def init(self):
return self
- def set(self, name, pid, tracks, parent):
+ def set(self, name, pid, ptype, tracks, parent):
self.name = name
self.pid = pid
+ self.ptype = ptype
self.children = []
self.tracks = tracks
self.parent = parent
filename = os.path.expanduser(filename)
yield "Reading library..."
plist = read_plist(os.path.expanduser(filename))
+ if plist is None:
+ raise Exception("Could not find music library: " + filename)
self.folder = self.loc2name(plist["Music Folder"])
pl_tracks = plist["Tracks"]
- self.playlists = {}
+ pl_lookup = {}
+ self.playlists = []
for pl_playlist in plist["Playlists"]:
- playlist = self.make_playlist(pl_playlist, pl_tracks)
+ playlist = self.make_playlist(pl_playlist, pl_tracks, pl_lookup)
+ if not playlist:
+ continue
yield "Read playlist: " + playlist.name
- self.playlists[playlist.pid] = playlist
+ self.playlists.append(playlist)
+ pl_lookup[playlist.pid] = playlist
def loc2name(self, location):
return urllib.splithost(urllib.splittype(urllib.unquote(location))[1])[1]
- def make_playlist(self, pl_playlist, pl_tracks):
+ def make_playlist(self, pl_playlist, pl_tracks, pl_lookup):
+ if int(pl_playlist.get("Master", 0)):
+ return
+ kind = int(pl_playlist.get("Distinguished Kind", -1))
+ if kind == 26:
+ # Don't do genius
+ return
+
name = pl_playlist["Name"]
pid = pl_playlist["Playlist Persistent ID"]
+ if kind > 0:
+ ptype = {
+ 2: "movies",
+ 3: "tv-shows",
+ 4: "music",
+ 5: "books",
+ 10: "podcasts",
+ 19: "purchased",
+ 22: "itunes-dj",
+ 31: "itunes-u",
+ }.get(kind, "playlist")
+ elif pl_playlist.has_key("Smart Info"):
+ ptype = "smart-playlist"
+ elif int(pl_playlist.get("Folder", 0)):
+ ptype = "folder"
+ else:
+ ptype = "playlist"
+
parent = None
try:
parent_pid = pl_playlist["Parent Persistent ID"]
- parent = self.playlists.get(parent_pid)
+ parent = pl_lookup[parent_pid]
except KeyError:
pass
tracks = []
filename = strip_prefix(filename, self.folder)
tracks.append(filename)
playlist = Playlist.alloc().init()
- playlist.set(name, pid, tracks, parent)
+ playlist.set(name, pid, ptype, tracks, parent)
return playlist
def has_playlist_name(self, name):
return playlist
def get_playlists(self):
- return self.playlists.values()
-
- def outlineView_numberOfChildrenOfItem_(self, view, item):
- if item == None:
- return len(self.playlists)
- else:
- return 0
-
- def outlineView_isItemExpandable_(self, view, item):
- return False
-
- def outlineView_child_ofItem_(self, view, index, item):
- if item == None:
- return self.playlists[index]
- else:
- return None
-
- def outlineView_objectValueForTableColumn_byItem_(self, view, column, item):
- return item.name
+ return self.playlists
encoded_names = {}
if not path_prefix:
path_prefix = "../"
playlist_file = os.path.join(dest, "-Playlists-", playlist_name) + ".m3u"
+ playlist_file = encode_filename(playlist_file)
mkdirhier(os.path.dirname(playlist_file))
logging.info("Writing: " + playlist_file)
f = open(playlist_file, "w")