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.performSelectorInBackground_withObject_(self.loadFromThread, None)
+ self.library = libsyncitunes.ITunesLibrary.alloc().init()
+ def finish():
+ self.playlistModel.setPlaylists(self.library.get_playlists())
+ self.runGenerator(lambda: self.library.load_(None), finish)
def applicationWillTerminate_(self, _):
self.prefs().synchronize()
return True
- def loadFromThread(self):
- pool = NSAutoreleasePool.alloc().init()
- self.library = libsyncitunes.ITunesLibrary.alloc().init()
- self.performSelectorOnMainThread_withObject_waitUntilDone_(self.finishLoading, None, True)
- del pool
+ # 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 finishLoading(self):
- self.playlistModel.setPlaylists(self.library.get_playlists())
+ def runGeneratorNext(self):
+ if self.gen is None or self.finish is None:
+ return
+ try:
+ msg = self.gen.next()
+ self.loadingLabel.setStringValue_(msg)
+ self.performSelector_withObject_afterDelay_(
+ self.runGeneratorNext, None, 0)
+ except StopIteration:
+ self.stopGenerator()
+
+ def stopGenerator(self):
+ self.gen = None
NSApp.endSheet_(self.loadingSheet)
- self.loadingSheet.close()
+ 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)
- self.performSelectorInBackground_withObject_(self.syncFromThread, None)
-
- def syncFromThread(self):
- pool = NSAutoreleasePool.alloc().init()
+ def doCancel_(self, sender):
+ self.stopGenerator()
+ @objc.IBAction
+ def doSync_(self, sender):
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)
-
- self.performSelectorOnMainThread_withObject_waitUntilDone_(self.finishSync, None, True)
- del pool
-
- def finishSync(self):
- NSApp.endSheet_(self.synchronizingSheet)
- self.synchronizingSheet.close()
+ 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_to_copy=all_tracks
+ )
+ ,
+ finish
+ )
# Public accessors