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:
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]
except OSError:
pass
-def export_m3u(dry_run, dest, path_prefix, playlist_name, files):
- if dry_run:
+def delete_playlists(dry_run, dest):
+ dest = os.path.join(dest, "-Playlists-")
+ try:
+ filenames = os.listdir(dest)
+ except OSError:
return
+
+ for filename in filenames:
+ if not filename.lower().endswith(".m3u"):
+ continue
+ filename = os.path.join(dest, filename)
+ logging.info("Deleting: " + filename)
+ if not dry_run:
+ try:
+ os.unlink(filename)
+ except OSError:
+ pass
+
+def export_m3u(dry_run, dest, path_prefix, playlist_name, files):
dest = os.path.join(dest, "-Playlists-")
- if not path_prefix:
- try:
- f = open(os.path.join(dest, ".path_prefix"))
- path_prefix = f.read().strip()
- except:
- path_prefix = "../"
+ mkdirhier(dest)
+ playlist_name = playlist_name.replace("/", "-")
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)
+
+ if dry_run:
+ return
+
+ sep = "/"
+ if path_prefix.find("\\") > 0:
+ sep = "\\"
+ if path_prefix[-1] != sep:
+ path_prefix += sep
+
f = open(playlist_file, "w")
for filename in files:
- if path_prefix.find("\\") > 0:
+ if sep == "\\":
filename = filename.replace("/", "\\")
filename = encode_filename(filename)
f.write("%s%s\n" % (path_prefix, filename))