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):
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):
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
# 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)