]> code.delx.au - notipod/blobdiff - NotiPod.py
Display progress
[notipod] / NotiPod.py
index b844b34409d71b84976e32b2cb344ba8505a0dde..f302f6f9ed167a3b01843a482990e51cb778dbcc 100644 (file)
@@ -104,19 +104,20 @@ class NotiPodAppDelegate(NSObject):
        playlistModel = objc.IBOutlet()
        folderModel = objc.IBOutlet()
        loadingSheet = objc.IBOutlet()
-       synchronizingSheet = objc.IBOutlet()
+       loadingLabel = objc.IBOutlet()
 
+       def awakeFromNib(self):
+               self.gen = None
 
        # Delegate methods
        def applicationWillFinishLaunching_(self, _):
                pass
 
        def applicationDidFinishLaunching_(self, _):
-               NSApp.beginSheet_modalForWindow_modalDelegate_didEndSelector_contextInfo_(self.loadingSheet, self.window, None, None, None)
                self.library = libsyncitunes.ITunesLibrary.alloc().init()
-               self.playlistModel.setPlaylists(self.library.get_playlists())
-               NSApp.endSheet_(self.loadingSheet)
-               self.loadingSheet.orderOut_(self)
+               def finish():
+                       self.playlistModel.setPlaylists(self.library.get_playlists())
+               self.runGenerator(lambda: self.library.load_(None), finish)
 
        def applicationWillTerminate_(self, _):
                self.prefs().synchronize()
@@ -124,10 +125,29 @@ class NotiPodAppDelegate(NSObject):
        def applicationShouldTerminateAfterLastWindowClosed_(self, _):
                return True
 
+
+       # Utility methods
+       def runGenerator(self, func, finish):
+               NSApp.beginSheet_modalForWindow_modalDelegate_didEndSelector_contextInfo_(self.loadingSheet, self.window, None, None, None)
+               self.gen = func()
+               self.finish = finish
+               self.runGeneratorNext()
+
+       def runGeneratorNext(self):
+               try:
+                       msg = self.gen.next()
+                       self.loadingLabel.setStringValue_(msg)
+                       self.performSelector_withObject_afterDelay_(
+                               self.runGeneratorNext, None, 0)
+               except StopIteration:
+                       self.gen = None
+                       NSApp.endSheet_(self.loadingSheet)
+                       self.loadingSheet.orderOut_(self)
+                       self.finish()
+                       self.finish = None
+
        @objc.IBAction
        def doSync_(self, sender):
-               NSApp.beginSheet_modalForWindow_modalDelegate_didEndSelector_contextInfo_(self.synchronizingSheet, self.window, None, None, None)
-
                folder = self.folders()[0]
                playlists = [self.library.get_playlist_pid(pid) for pid in self.playlists()]
 
@@ -137,13 +157,19 @@ class NotiPodAppDelegate(NSObject):
                        libsyncitunes.export_m3u(dry_run=False, dest=folder, path_prefix="",
                                        playlist_name=playlist.name, files=playlist.tracks)
 
-               libsyncitunes.sync(dry_run=False,
-                       source=self.library.folder, dest=folder, files=all_tracks)
-
-               NSApp.endSheet_(self.synchronizingSheet)
-               self.synchronizingSheet.orderOut_(self)
-
-               NSRunAlertPanel("Complete!", "Synchronisation is complete", "Ok", None, None)
+               def finish():
+                       NSRunAlertPanel("Complete!", "Synchronisation is complete", "Ok", None, None)
+               self.runGenerator(
+                       lambda:
+                               libsyncitunes.sync(
+                                       dry_run=False,
+                                       source=self.library.folder,
+                                       dest=folder, 
+                                       files=all_tracks
+                               )
+                       ,
+                       finish
+               )
 
 
        # Public accessors