]> code.delx.au - notipod/blobdiff - libnotipod.py
Added tooltips
[notipod] / libnotipod.py
index bc0b1eebd77f8759d375f6b850374593775e0a3c..30a6a08c625afcc39d679a466e18e1195d104e22 100644 (file)
@@ -39,10 +39,13 @@ class Playlist(NSObject):
                        parent.children.append(self)
 
 class ITunesLibrary(NSObject):
-       def load_(self, filename):
+       def load_(self, filename=None):
                if filename is None:
-                       filename = "~/Music/iTunes/iTunes Music Library.xml"
-               filename = os.path.expanduser(filename)
+                       filename = getattr(self, "filename", None)
+               if filename is None:
+                       filename = os.path.expanduser("~/Music/iTunes/iTunes Music Library.xml")
+               self.filename = filename
+               self.mtime = os.stat(filename).st_mtime
                yield "Reading library..."
                plist = read_plist(os.path.expanduser(filename))
                if plist is None:
@@ -61,6 +64,9 @@ class ITunesLibrary(NSObject):
                        self.playlists.append(playlist)
                        pl_lookup[playlist.pid] = playlist
 
+       def needs_reload(self):
+               return os.stat(self.filename).st_mtime > self.mtime
+
        def loc2name(self, location):
                return urllib.splithost(urllib.splittype(urllib.unquote(location))[1])[1]
 
@@ -102,10 +108,13 @@ class ITunesLibrary(NSObject):
                tracks = []
                for item in pl_playlist.get("Playlist Items", []):
                        trackID = item["Track ID"]
+                       item = pl_tracks[str(trackID)]
                        self.track2playlist[trackID].add(pid)
                        tracks.append(trackID)
                        if trackID not in self.track2filename:
-                               filename = str(pl_tracks[str(trackID)]["Location"])
+                               if item["Track Type"] != "File":
+                                       continue
+                               filename = str(item["Location"])
                                filename = self.loc2name(filename)
                                filename = filename.decode("utf-8")
                                if not filename.startswith(self.folder):
@@ -184,9 +193,14 @@ def mkdirhier(path):
 def export_m3u(dry_run, dest, path_prefix, playlist_name, files):
        if dry_run:
                return
+       dest = os.path.join(dest, "-Playlists-")
        if not path_prefix:
-               path_prefix = "../"
-       playlist_file = os.path.join(dest, "-Playlists-", playlist_name) + ".m3u"
+               try:
+                       f = open(os.path.join(dest, ".path_prefix"))
+                       path_prefix = f.read().strip()
+               except:
+                       path_prefix = "../"
+       playlist_file = os.path.join(dest, playlist_name) + ".m3u"
        playlist_file = encode_filename(playlist_file)
        mkdirhier(os.path.dirname(playlist_file))
        logging.info("Writing: " + playlist_file)