]> code.delx.au - notipod/blobdiff - notipod_gui.py
Added advanced options sheet
[notipod] / notipod_gui.py
index 283a547782f86e5a38294e95515dc38d7ad6e523..2d2cffdc2598b182be6365afc01866bac0950036 100644 (file)
@@ -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"])