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()
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()]
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