]> code.delx.au - notipod/blobdiff - NotiPod.py
More stuff works!
[notipod] / NotiPod.py
index bb810ba38c50b4c0ff3c077ed8d2794da2b728b3..68bb1a11d1d15c20f109c4d0636bb7c9c2b111ca 100644 (file)
@@ -10,25 +10,58 @@ from PyObjCTools import AppHelper
 import libsyncitunes
 
 
-class PlaylistTableModel(NSObject):
-       tableView = objc.IBOutlet()
+class PlaylistModel(NSObject):
+       outlineView = objc.IBOutlet()
 
        def awakeFromNib(self):
-               self.playlists = []
-               self.tableView.setDataSource_(self)
-       
+               self.root = []
+               self.playlists = {}
+               self.outlineView.setDataSource_(self)
+
        def setPlaylists(self, playlists):
+               self.root = []
                self.playlists = playlists
-               self.tableView.reloadData()
-
-       def tableView_objectValueForTableColumn_row_(self, tableView, col, row):
-               assert 0 <= row < len(self.playlists)
-               return self.playlists[row]
-
-       def numberOfRowsInTableView_(self, tableView):
-               print "get number of rows", len(self.playlists)
-               return len(self.playlists)
-
+               for playlist in self.playlists:
+                       if playlist.parent is None:
+                               self.root.append(playlist)
+               self.outlineView.reloadData()
+
+       def outlineView_child_ofItem_(self, _, childIndex, playlist):
+               if playlist == None:
+                       return self.root[childIndex]
+               else:
+                       return playlist.children[childIndex]
+
+       def outlineView_isItemExpandable_(self, _, playlist):
+               if playlist == None:
+                       return True
+               else:
+                       return len(playlist.children) > 0
+
+       def outlineView_numberOfChildrenOfItem_(self, _, playlist):
+               if playlist == None:
+                       return len(self.root)
+               else:
+                       return len(playlist.children)
+
+       def outlineView_objectValueForTableColumn_byItem_(self, _, col, playlist):
+               col = col.identifier() if col else "playlist"
+
+               if col == "selected":
+                       selected = NSApp.delegate().playlists()
+                       return playlist.pid in selected
+               if col == None or col == "playlist":
+                       return playlist.name
+
+       def outlineView_setObjectValue_forTableColumn_byItem_(self, _, v, col, playlist):
+               col = col.identifier() if col else "playlist"
+
+               if col != "selected":
+                       return
+               if v:
+                       NSApp.delegate().addPlaylist_(playlist.pid)
+               else:
+                       NSApp.delegate().delPlaylist_(playlist.pid)
 
 
 class NotiPodController(NSObject):
@@ -40,10 +73,9 @@ class NotiPodController(NSObject):
 
        def awakeFromNib(self):
                self.performSelectorInBackground_withObject_(self.loadLibrary, None)
-               print "awakeFromNib"
        
        def finishLoading(self):
-               self.playlistModel.setPlaylists(self.library.list_playlists())
+               self.playlistModel.setPlaylists(self.library.get_playlists())
                self.folderPopup.addItemsWithTitles_(NSApp.delegate().folders())
 
        def loadLibrary(self):
@@ -89,21 +121,14 @@ class NotiPodController(NSObject):
 class NotiPodAppDelegate(NSObject):
 
        # Delegate methods
-
        def applicationWillFinishLaunching_(self, _):
-               print "loading prefs"
-               prefs = NSUserDefaults.standardUserDefaults()
-               self._playlists = prefs.stringArrayForKey_("playlists")
-               self._folders = prefs.stringArrayForKey_("folders")
-               print "folders", self._folders
-               print "playlists", self._playlists
+               pass
 
        def applicationDidFinishLaunching_(self, _):
                pass
 
        def applicationWillTerminate_(self, _):
-               prefs = NSUserDefaults.standardUserDefaults()
-               prefs.synchronize()
+               self.prefs().synchronize()
 
        def applicationShouldTerminateAfterLastWindowClosed_(self, _):
                return True
@@ -111,23 +136,36 @@ class NotiPodAppDelegate(NSObject):
 
        # Public accessors
 
+       def prefs(self):
+               return NSUserDefaults.standardUserDefaults()
+
+       def _getArray(self, key):
+               res = self.prefs().stringArrayForKey_(key)
+               return list(res) if res else []
+
+       def _saveArray(self, key, array):
+               self.prefs().setObject_forKey_(array, key)
+
        def playlists(self):
-               return self._playlists
+               return self._getArray("playlists")
 
        def folders(self):
-               return self._folders or []
+               return self._getArray("folders")
 
        def addFolder_(self, folder):
-               self._folders.insert(0, folder)
+               folders = self.folders()
+               folders.append(folder)
+               self._saveArray("folders", folders)
+
+       def delPlaylist_(self, playlist):
+               playlists = self.playlists()
+               playlists.remove(playlist)
+               self._saveArray("playlists", playlists)
 
-       def hasPlaylist_(self, playlist):
-               return playlist in self._playlists
-       
-       def removePlaylist_(self, playlist):
-               self._playlists.remove(playlist)
-       
        def addPlaylist_(self, playlist):
-               self._playlists.append(playlist)
+               playlists = self.playlists()
+               playlists.append(playlist)
+               self._saveArray("playlists", playlists)