From: James Bunton Date: Thu, 12 Jul 2012 01:58:55 +0000 (+1000) Subject: Added advanced options sheet X-Git-Url: https://code.delx.au/notipod/commitdiff_plain/2a9cf12b1ce485fd53c1a70871a82c9d7a0c2523 Added advanced options sheet --- diff --git a/English.lproj/NotiPod.xib b/English.lproj/NotiPod.xib index b48b528..5ea898b 100644 --- a/English.lproj/NotiPod.xib +++ b/English.lproj/NotiPod.xib @@ -12,9 +12,10 @@ YES - + + YES @@ -195,6 +196,23 @@ + + + Force Reload + r + 1048576 + 2147483647 + + + + + + Advanced Options + + 2147483647 + + + YES @@ -724,7 +742,7 @@ 7 2 {{196, 410}, {342, 100}} - 603979776 + 1677721600 Window NSWindow @@ -1118,6 +1136,138 @@ {{0, 0}, {1280, 778}} {1.79769e+308, 1.79769e+308} + + 7 + 2 + {{235, 413}, {338, 146}} + 1685585920 + Window + NSWindow + + + + 256 + + YES + + + 268 + {{17, 116}, {144, 17}} + + YES + + 68288064 + 272630784 + Advanced options + + + + + + + + + 268 + {{29, 56}, {77, 17}} + + YES + + 68288064 + 272630784 + Path prefix: + + + + + + + + + 268 + {{29, 88}, {79, 17}} + + YES + + 68288064 + 272630784 + Sync folder: + + + + + + + + + 268 + {{111, 54}, {207, 22}} + + YES + + -1804468671 + 272630784 + + + + YES + + 6 + System + textBackgroundColor + + + + 6 + System + textColor + + + + + + + 268 + {{111, 86}, {207, 22}} + + YES + + -1804468671 + 272630784 + + + + YES + + + + + + + 268 + {{14, 12}, {96, 32}} + + YES + + 67239424 + 134217728 + Save + + + -2038284033 + 129 + + + 200 + 25 + + + + {338, 146} + + + {{0, 0}, {1920, 1178}} + {1.79769e+308, 1.79769e+308} + @@ -1394,6 +1544,54 @@ 647 + + + loadLibrary: + + + + 649 + + + + advancedSheet + + + + 677 + + + + showAdvancedOptions: + + + + 681 + + + + finishAdvancedOptions: + + + + 683 + + + + advancedPathPrefix + + + + 684 + + + + advancedSyncFolder + + + + 685 + @@ -1861,6 +2059,8 @@ + + @@ -1977,6 +2177,124 @@ + + 648 + + + + + 650 + + + + + 653 + + + YES + + + + AdvancedSheet + + + 654 + + + YES + + + + + + + + + + + 655 + + + YES + + + + + + 656 + + + + + 659 + + + YES + + + + + + 660 + + + + + 661 + + + YES + + + + + + 662 + + + + + 670 + + + YES + + + + + + 671 + + + + + 672 + + + YES + + + + + + 673 + + + + + 678 + + + YES + + + + + + 679 + + + @@ -2104,6 +2422,31 @@ 643.IBPluginDependency 644.IBPluginDependency 645.IBPluginDependency + 648.IBPluginDependency + 650.IBPluginDependency + 653.IBEditorWindowLastContentRect + 653.IBPluginDependency + 653.IBWindowTemplateEditedContentRect + 653.NSWindowTemplate.visibleAtLaunch + 654.IBPluginDependency + 655.IBPluginDependency + 655.IBViewBoundsToFrameTransform + 656.IBPluginDependency + 659.IBPluginDependency + 659.IBViewBoundsToFrameTransform + 660.IBPluginDependency + 661.IBPluginDependency + 661.IBViewBoundsToFrameTransform + 662.IBPluginDependency + 670.IBPluginDependency + 670.IBViewBoundsToFrameTransform + 671.IBPluginDependency + 672.IBPluginDependency + 672.IBViewBoundsToFrameTransform + 673.IBPluginDependency + 678.IBPluginDependency + 678.IBViewBoundsToFrameTransform + 679.IBPluginDependency YES @@ -2140,9 +2483,9 @@ {74, 862} {{529, 476}, {148, 20}} - {{329, 160}, {381, 527}} + {{339, 91}, {381, 527}} com.apple.InterfaceBuilder.CocoaPlugin - {{329, 160}, {381, 527}} + {{339, 91}, {381, 527}} {{505, 213}, {252, 190}} @@ -2168,9 +2511,9 @@ com.apple.InterfaceBuilder.CocoaPlugin {{89, 581}, {211, 33}} com.apple.InterfaceBuilder.CocoaPlugin - {{82, 548}, {342, 100}} + {{329, 548}, {342, 100}} com.apple.InterfaceBuilder.CocoaPlugin - {{82, 548}, {342, 100}} + {{329, 548}, {342, 100}} {{196, 436}, {204, 74}} com.apple.InterfaceBuilder.CocoaPlugin @@ -2184,9 +2527,9 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{329, 122}, {637, 540}} + {{803, 29}, {637, 540}} com.apple.InterfaceBuilder.CocoaPlugin - {{329, 122}, {637, 540}} + {{803, 29}, {637, 540}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -2213,7 +2556,7 @@ com.apple.InterfaceBuilder.CocoaPlugin - {{428, 681}, {189, 93}} + {{428, 641}, {215, 133}} com.apple.InterfaceBuilder.CocoaPlugin {{323, 672}, {199, 203}} @@ -2236,6 +2579,43 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{1079, 877}, {338, 146}} + com.apple.InterfaceBuilder.CocoaPlugin + {{1079, 877}, {338, 146}} + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABBiAAAwsIAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABB6AAAwhQAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABC3gAAwiAAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABB6AAAwooAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABC3gAAwpAAAA + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABBmAAAwigAAA + + com.apple.InterfaceBuilder.CocoaPlugin @@ -2254,7 +2634,7 @@ - 647 + 685 @@ -2320,12 +2700,18 @@ doCancel: doPreview: doSync: + finishAdvancedOptions: + loadLibrary: + showAdvancedOptions: YES id id id + id + id + id @@ -2335,6 +2721,9 @@ doCancel: doPreview: doSync: + finishAdvancedOptions: + loadLibrary: + showAdvancedOptions: YES @@ -2350,12 +2739,27 @@ doSync: id + + finishAdvancedOptions: + id + + + loadLibrary: + id + + + showAdvancedOptions: + id + YES YES + advancedPathPrefix + advancedSheet + advancedSyncFolder folderModel loadingIndicator loadingLabel @@ -2375,12 +2779,18 @@ id id id + id + id + id YES YES + advancedPathPrefix + advancedSheet + advancedSyncFolder folderModel loadingIndicator loadingLabel @@ -2392,6 +2802,18 @@ YES + + advancedPathPrefix + id + + + advancedSheet + id + + + advancedSyncFolder + id + folderModel id 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"])