From 0807f0abbd2f0c91c43ff97b088cacf34acf6f7c Mon Sep 17 00:00:00 2001 From: James Bunton Date: Thu, 12 Jul 2012 11:05:48 +1000 Subject: [PATCH] Auto reload library when window comes to the foreground --- English.lproj/NotiPod.xib | 14 +++++++++--- libnotipod.py | 12 +++++++--- notipod_gui.py | 48 +++++++++++++++++++++++++-------------- 3 files changed, 51 insertions(+), 23 deletions(-) diff --git a/English.lproj/NotiPod.xib b/English.lproj/NotiPod.xib index 4c384a5..b48b528 100644 --- a/English.lproj/NotiPod.xib +++ b/English.lproj/NotiPod.xib @@ -12,9 +12,9 @@ YES - - + + YES @@ -1386,6 +1386,14 @@ 646 + + + delegate + + + + 647 + @@ -2246,7 +2254,7 @@ - 646 + 647 diff --git a/libnotipod.py b/libnotipod.py index 2a996ec..30a6a08 100644 --- a/libnotipod.py +++ b/libnotipod.py @@ -39,10 +39,13 @@ class Playlist(NSObject): parent.children.append(self) class ITunesLibrary(NSObject): - def load_(self, filename): + def load_(self, filename=None): if filename is None: - filename = "~/Music/iTunes/iTunes Music Library.xml" - filename = os.path.expanduser(filename) + filename = getattr(self, "filename", None) + if filename is None: + filename = os.path.expanduser("~/Music/iTunes/iTunes Music Library.xml") + self.filename = filename + self.mtime = os.stat(filename).st_mtime yield "Reading library..." plist = read_plist(os.path.expanduser(filename)) if plist is None: @@ -61,6 +64,9 @@ class ITunesLibrary(NSObject): self.playlists.append(playlist) pl_lookup[playlist.pid] = playlist + def needs_reload(self): + return os.stat(self.filename).st_mtime > self.mtime + def loc2name(self, location): return urllib.splithost(urllib.splittype(urllib.unquote(location))[1])[1] diff --git a/notipod_gui.py b/notipod_gui.py index 52b4456..283a547 100644 --- a/notipod_gui.py +++ b/notipod_gui.py @@ -143,13 +143,9 @@ class NotiPodController(NSObject): for target in self.targets: folders.append(target["folder"]) self.folderModel.loadFolders_(folders) - + self.library = libnotipod.ITunesLibrary.alloc().init() - def finish(): - self.playlistModel.setPlaylists(self.library.get_playlists()) - def fail(): - sys.exit(0) - self.runGenerator(lambda: self.library.load_(None), finish, fail) + self.loadLibrary() def applicationWillTerminate_(self, _): self.prefs().synchronize() @@ -157,8 +153,26 @@ class NotiPodController(NSObject): def applicationShouldTerminateAfterLastWindowClosed_(self, _): return True + def windowDidBecomeKey_(self, _): + if self.library.needs_reload(): + print "needs reload!" + self.loadLibrary() + else: + print "no reloading this time" + # Utility methods + def loadLibrary(self): + if self.runningGenerator: + return + + def finish(): + self.playlistModel.setPlaylists(self.library.get_playlists()) + def fail(): + NSRunAlertPanel("Error!", "Unable to load iTunes library! Exiting...", "Ok", None, None) + sys.exit(0) + self.runGenerator(lambda: self.library.load_(None), finish, fail) + def runGenerator(self, func, finish, fail): assert not self.runningGenerator self.runningGenerator = True @@ -301,7 +315,7 @@ class NotiPodController(NSObject): def _migratePrefs(self): p = self.prefs() - + playlists = p.stringArrayForKey_("playlists") if playlists is not None: p.removeObjectForKey_("playlists") @@ -329,8 +343,8 @@ class NotiPodController(NSObject): def _loadPrefs(self): p = self.prefs() - self.current_target = None - self.setCurrentTarget_(p.stringForKey_("current_target")) + self.currentTarget = None + self.setCurrentTarget_(p.stringForKey_("currentTarget")) self.targets = self.prefs().arrayForKey_("targets") if self.targets is None: @@ -343,22 +357,22 @@ class NotiPodController(NSObject): def _savePrefs(self): p = self.prefs() - p.setObject_forKey_(self.current_target, "current_target") + p.setObject_forKey_(self.currentTarget, "currentTarget") p.setObject_forKey_(self.targets, "targets") p.synchronize() def getCurrentTarget(self): for target in self.targets: - if target["uuid"] == self.current_target: + if target["uuid"] == self.currentTarget: return target return None - - def setCurrentTarget_(self, target_uuid): - old_uuid = self.current_target - self.current_target = target_uuid - if old_uuid is None and target_uuid is not None: + + def setCurrentTarget_(self, targetUuid): + oldUuid = self.currentTarget + self.currentTarget = targetUuid + if oldUuid is None and targetUuid is not None: self.playlistModel.outlineView.setEnabled_(True) - if old_uuid != target_uuid: + if oldUuid != targetUuid: self.playlistModel.outlineView.reloadItem_reloadChildren_(None, True) def playlists(self): -- 2.39.2