]> code.delx.au - notipod/commitdiff
Better error handling, bump to v1.6
authorJames Bunton <jamesbunton@delx.net.au>
Mon, 9 Jan 2012 08:25:45 +0000 (19:25 +1100)
committerJames Bunton <jamesbunton@delx.net.au>
Mon, 9 Jan 2012 08:25:45 +0000 (19:25 +1100)
Info.plist
libnotipod.py
notipod_cli.py
notipod_gui.py

index 65e34183b42007bf127634113af1133cda43346e..d5ca792b968f3e83be393e2f4faf9ff14c7e9b19 100644 (file)
        <key>CFBundlePackageType</key>
        <string>APPL</string>
        <key>CFBundleShortVersionString</key>
-       <string>1.5</string>
+       <string>1.6</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>1.5</string>
+       <string>1.6</string>
        <key>NSMainNibFile</key>
        <string>NotiPod</string>
        <key>NSPrincipalClass</key>
index 7f1a6b0c31a15b46230d2e4d9baae62b41ff9626..3e30e4d965d61f4e3e664b16a5b8c83d927a031e 100644 (file)
@@ -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)
index 6e512513e48723a77193ac491b07c192ed335020..b21bfec52ffd60b4adb442a70cb3f3cff97b9663 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 
-VERSION = "1.5"
+VERSION = "1.6"
 
 import logging
 import optparse
index 4c175a909f2cfd94625c9d334cf30e2f54c9cb74..5a0d3290de5eab19fea3038f1298d9fa5038aac2 100644 (file)
@@ -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
                )