X-Git-Url: https://code.delx.au/notipod/blobdiff_plain/9dd422728335209742d07c4d2a846a3cafdc9e9a..2a9cf12b1ce485fd53c1a70871a82c9d7a0c2523:/notipod_gui.py diff --git a/notipod_gui.py b/notipod_gui.py index 283a547..2d2cffd 100644 --- a/notipod_gui.py +++ b/notipod_gui.py @@ -122,6 +122,10 @@ class NotiPodController(NSObject): loadingLabel = objc.IBOutlet() loadingIndicator = objc.IBOutlet() + advancedSheet = objc.IBOutlet() + advancedSyncFolder = objc.IBOutlet() + advancedPathPrefix = objc.IBOutlet() + previewWindow = objc.IBOutlet() previewText = objc.IBOutlet() @@ -145,7 +149,7 @@ class NotiPodController(NSObject): self.folderModel.loadFolders_(folders) self.library = libnotipod.ITunesLibrary.alloc().init() - self.loadLibrary() + self.loadLibrary_(self) def applicationWillTerminate_(self, _): self.prefs().synchronize() @@ -155,24 +159,10 @@ class NotiPodController(NSObject): def windowDidBecomeKey_(self, _): if self.library.needs_reload(): - print "needs reload!" - self.loadLibrary() - else: - print "no reloading this time" + self.loadLibrary_(self) # Utility methods - def loadLibrary(self): - if self.runningGenerator: - return - - def finish(): - self.playlistModel.setPlaylists(self.library.get_playlists()) - def fail(): - NSRunAlertPanel("Error!", "Unable to load iTunes library! Exiting...", "Ok", None, None) - sys.exit(0) - self.runGenerator(lambda: self.library.load_(None), finish, fail) - def runGenerator(self, func, finish, fail): assert not self.runningGenerator self.runningGenerator = True @@ -205,11 +195,42 @@ class NotiPodController(NSObject): if finish: finish() + + @objc.IBAction + def loadLibrary_(self, sender): + if self.runningGenerator: + return + + def finish(): + self.playlistModel.setPlaylists(self.library.get_playlists()) + def fail(): + NSRunAlertPanel("Error!", "Unable to load iTunes library! Exiting...", "Ok", None, None) + sys.exit(0) + self.runGenerator(lambda: self.library.load_(None), finish, fail) + + @objc.IBAction + def showAdvancedOptions_(self, sender): + if self.runningGenerator: + return + target = self.getCurrentTarget() + self.advancedSyncFolder.setStringValue_(target["folder"]) + self.advancedPathPrefix.setStringValue_(target["path_prefix"]) + NSApp.beginSheet_modalForWindow_modalDelegate_didEndSelector_contextInfo_(self.advancedSheet, self.window, None, None, None) + + @objc.IBAction + def finishAdvancedOptions_(self, sender): + target = self.getCurrentTarget() + target["folder"] = self.advancedSyncFolder.stringValue() + target["path_prefix"] = self.advancedPathPrefix.stringValue() + self._savePrefs() + NSApp.endSheet_(self.advancedSheet) + self.advancedSheet.orderOut_(self) + @objc.IBAction def doCancel_(self, sender): self.runningGenerator = False - def getDestFolder(self): + def getCheckTarget(self): target = self.getCurrentTarget() if not target: NSRunAlertPanel("Error!", "You must choose a folder first!", "Ok", None, None) @@ -218,13 +239,15 @@ class NotiPodController(NSObject): if not os.path.isdir(folder.encode("utf-8")): NSRunAlertPanel("Error!", "Destination " + folder + " does not exist, try mounting it first?", "Ok", None, None) return - return folder + target["folder"] = folder + target["path_prefix"] = target["path_prefix"].encode("utf-8") + return target def doPreviewThread(self): yield "Calculating changes..." - folder = self.getDestFolder() - if not folder: + target = self.getCheckTarget() + if not target: return all_tracks = set() @@ -240,7 +263,7 @@ class NotiPodController(NSObject): gen = libnotipod.sync( dry_run=True, source=self.library.folder, - dest=folder, + dest=target["folder"], files_to_copy=all_filenames, ) self.previewResult = "\n".join(gen) @@ -259,8 +282,8 @@ class NotiPodController(NSObject): @objc.IBAction def doSync_(self, sender): - folder = self.getDestFolder() - if not folder: + target = self.getCheckTarget() + if not target: return all_tracks = set() @@ -289,8 +312,13 @@ class NotiPodController(NSObject): tracks.append(self.library.get_track_filename(trackID)) if playlist_id not in orig_playlists and len(tracks) < 10: continue - libnotipod.export_m3u(dry_run=False, dest=folder, path_prefix="", - playlist_name=playlist.name, files=tracks) + libnotipod.export_m3u( + dry_run=False, + dest=target["folder"], + path_prefix=target["path_prefix"], + playlist_name=playlist.name, + files=tracks + ) def finish(): NSRunAlertPanel("Complete!", "Synchronisation is complete", "Ok", None, None) @@ -299,7 +327,7 @@ class NotiPodController(NSObject): libnotipod.sync( dry_run=False, source=self.library.folder, - dest=folder, + dest=target["folder"], files_to_copy=all_filenames, ) , @@ -333,6 +361,7 @@ class NotiPodController(NSObject): target["folder"] = f target["playlists"] = list(playlists) target["uuid"] = uuid.uuid1().get_hex() + target["path_prefix"] = "../" if first: first = False self.setCurrentTarget_(target["uuid"]) @@ -392,6 +421,7 @@ class NotiPodController(NSObject): target["folder"] = folder target["playlists"] = self.playlists() target["uuid"] = uuid.uuid1().get_hex() + target["path_prefix"] = "../" self.targets.insertObject_atIndex_(target, 0) self.setCurrentTarget_(target["uuid"])