# Licensed for distribution under the GPL version 2, check COPYING for details
import logging
+import os
import objc
from Foundation import *
def awakeFromNib(self):
self.runningGenerator = False
+ self.previewWindow.setReleasedWhenClosed_(False)
# Delegate methods
def applicationWillFinishLaunching_(self, _):
self.library = libnotipod.ITunesLibrary.alloc().init()
def finish():
self.playlistModel.setPlaylists(self.library.get_playlists())
- self.runGenerator(lambda: self.library.load_(None), finish)
+ def fail():
+ sys.exit(0)
+ self.runGenerator(lambda: self.library.load_(None), finish, fail)
def applicationWillTerminate_(self, _):
self.prefs().synchronize()
# Utility methods
- def runGenerator(self, func, finish):
+ def runGenerator(self, func, finish, fail):
assert not self.runningGenerator
self.runningGenerator = True
self.loadingIndicator.startAnimation_(self)
NSApp.beginSheet_modalForWindow_modalDelegate_didEndSelector_contextInfo_(self.loadingSheet, self.window, None, None, None)
- arg = (func(), finish)
+ arg = (func(), finish, fail)
self.performSelectorInBackground_withObject_(self.runGeneratorThread, arg)
- def runGeneratorThread(self, (gen, finish)):
+ def runGeneratorThread(self, (gen, finish, fail)):
pool = NSAutoreleasePool.alloc().init()
- for msg in gen:
- if not self.runningGenerator:
- break
- self.loadingLabel.performSelectorOnMainThread_withObject_waitUntilDone_(
- self.loadingLabel.setStringValue_, msg, True)
+ try:
+ for msg in gen:
+ if not self.runningGenerator:
+ break
+ self.loadingLabel.performSelectorOnMainThread_withObject_waitUntilDone_(
+ self.loadingLabel.setStringValue_, msg, True)
+ except Exception, e:
+ NSRunAlertPanel("Error!", str(e), "Ok", None, None)
+ finish = fail
self.performSelectorOnMainThread_withObject_waitUntilDone_(
self.stopGenerator, finish, True)
self.runningGenerator = False
- del pool
def stopGenerator(self, finish):
self.runningGenerator = False
NSApp.endSheet_(self.loadingSheet)
self.loadingSheet.orderOut_(self)
self.loadingIndicator.stopAnimation_(self)
- finish()
+ if finish:
+ finish()
@objc.IBAction
def doCancel_(self, sender):
self.previewWindow.center()
self.previewWindow.makeKeyAndOrderFront_(self)
- self.runGenerator(self.doPreviewThread, finish)
+ self.runGenerator(self.doPreviewThread, finish, None)
@objc.IBAction
def doSync_(self, sender):
folder = self.folders()[0]
playlists = [self.library.get_playlist_pid(pid) for pid in self.playlists()]
+ if not os.path.isdir(folder.encode("utf-8")):
+ NSRunAlertPanel("Error!", "Destination " + folder + " does not exist, try mounting it first?", "Ok", None, None)
+ return
+
all_tracks = []
for playlist in playlists:
all_tracks.extend(playlist.tracks)
files_to_copy=all_tracks
)
,
- finish
+ finish,
+ None
)