From 09e1e4ec2d3c9ffc5701e613ac4484d63ee0a8f7 Mon Sep 17 00:00:00 2001 From: James Bunton Date: Mon, 9 Jan 2012 19:25:45 +1100 Subject: [PATCH] Better error handling, bump to v1.6 --- Info.plist | 4 ++-- libnotipod.py | 2 -- notipod_cli.py | 2 +- notipod_gui.py | 39 ++++++++++++++++++++++++++------------- 4 files changed, 29 insertions(+), 18 deletions(-) diff --git a/Info.plist b/Info.plist index 65e3418..d5ca792 100644 --- a/Info.plist +++ b/Info.plist @@ -17,11 +17,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.5 + 1.6 CFBundleSignature ???? CFBundleVersion - 1.5 + 1.6 NSMainNibFile NotiPod NSPrincipalClass diff --git a/libnotipod.py b/libnotipod.py index 7f1a6b0..3e30e4d 100644 --- a/libnotipod.py +++ b/libnotipod.py @@ -197,8 +197,6 @@ def sync(dry_run, source, dest, files_to_copy): filemap[sf.encoded_filename.lower()] = sf files_to_copy = set(filemap) - if not os.path.isdir(dest): - raise OSError("No such file or directory: '%s'" % dest) for dirpath, dirnames, filenames in os.walk(dest): full_dirpath = dirpath dirpath = strip_prefix(dirpath, dest) diff --git a/notipod_cli.py b/notipod_cli.py index 6e51251..b21bfec 100755 --- a/notipod_cli.py +++ b/notipod_cli.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -VERSION = "1.5" +VERSION = "1.6" import logging import optparse diff --git a/notipod_gui.py b/notipod_gui.py index 4c175a9..5a0d329 100644 --- a/notipod_gui.py +++ b/notipod_gui.py @@ -3,6 +3,7 @@ # Licensed for distribution under the GPL version 2, check COPYING for details import logging +import os import objc from Foundation import * @@ -126,6 +127,7 @@ class NotiPodController(NSObject): def awakeFromNib(self): self.runningGenerator = False + self.previewWindow.setReleasedWhenClosed_(False) # Delegate methods def applicationWillFinishLaunching_(self, _): @@ -135,7 +137,9 @@ class NotiPodController(NSObject): 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() @@ -145,32 +149,36 @@ class NotiPodController(NSObject): # 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): @@ -204,13 +212,17 @@ class NotiPodController(NSObject): 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) @@ -228,7 +240,8 @@ class NotiPodController(NSObject): files_to_copy=all_tracks ) , - finish + finish, + None ) -- 2.39.2