]> code.delx.au - notipod/blobdiff - libsyncitunes.py
More stuff works!
[notipod] / libsyncitunes.py
index 096abc2ab6ecd06cd0f53c88bcac3a5a0ac665e7..7e955ad72def6fba3b5e55ef4561d931d40bcfdf 100644 (file)
@@ -22,11 +22,16 @@ def read_plist(filename):
                raise TypeError(errStr)
        return plist
 
-class Playlist(object):
-       def __init__(self, name, tracks, parent=None):
+class Playlist(NSObject):
+       def init(self):
+               return self
+
+       def set(self, name, pid, tracks, parent):
                self.name = name
+               self.pid = pid
                self.children = []
-               self.tracks = tracks
+               self.tracks = []
+               self.parent = parent
                if parent is not None:
                        parent.children.append(self)
 
@@ -39,25 +44,35 @@ class ITunesLibrary(NSObject):
                plist = read_plist(os.path.expanduser(filename))
                self.folder = self.loc2name(plist["Music Folder"])
                pl_tracks = plist["Tracks"]
-               self.playlists = []
+               self.playlists = {}
                for pl_playlist in plist["Playlists"]:
-                       self.playlists.append(self.make_playlist(pl_playlist, pl_tracks))
+                       playlist = self.make_playlist(pl_playlist, pl_tracks)
+                       self.playlists[playlist.pid] = playlist
                return self
 
        def loc2name(self, location):
                return urllib.splithost(urllib.splittype(urllib.unquote(location))[1])[1]
        
        def make_playlist(self, pl_playlist, pl_tracks):
+###            print pl_playlist
                name = pl_playlist["Name"]
+               pid = pl_playlist["Playlist Persistent ID"]
+               parent = None
+               try:
+                       parent_pid = pl_playlist["Parent Persistent ID"]
+                       parent = self.playlists.get(parent_pid)
+               except KeyError:
+                       pass
                tracks = []
                for item in pl_playlist.get("Playlist Items", []):
                        trackID = item["Track ID"]
                        filename = str(pl_tracks[str(trackID)]["Location"])
                        filename = self.loc2name(filename)
-                       filename = filename[len(self.folder):]
                        filename = eval(repr(filename).lstrip("u")).decode("utf-8")
                        tracks.append(filename)
-               return Playlist(name, tracks)
+               playlist = Playlist.alloc().init()
+               playlist.set(name, pid, tracks, parent)
+               return playlist
 
        def has_playlist(self, playlist):
                for p in self.playlists:
@@ -69,8 +84,8 @@ class ITunesLibrary(NSObject):
                playlist = [p for p in self.playlists if p.name == name][0]
                return playlist.tracks
 
-       def list_playlists(self):
-               return [p.name for p in self.playlists]
+       def get_playlists(self):
+               return self.playlists.values()
 
        def outlineView_numberOfChildrenOfItem_(self, view, item):
                if item == None: