curds: Add .parent variable to the PlaylistManager
And then clean up the ManagerModel with the node functions that we can now use. Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
8aff4d7f8a
commit
91a606e054
|
@ -19,6 +19,7 @@ class PlaylistManager(list):
|
|||
for plist in self:
|
||||
plist.parent = self
|
||||
self.children = self
|
||||
self.parent = None
|
||||
|
||||
self.current = [ self.lookup("Collection") ]
|
||||
self.track = None
|
||||
|
@ -33,6 +34,15 @@ class PlaylistManager(list):
|
|||
old.changed()
|
||||
self.current[0].changed()
|
||||
|
||||
def get_node(self, path):
|
||||
if len(path) == 1:
|
||||
return self.nth_child(path[0])
|
||||
elif len(path) > 1:
|
||||
if path[0] < self.n_children():
|
||||
node = self.nth_child(path[0])
|
||||
return node.get_node(path[1:])
|
||||
return None
|
||||
|
||||
def get_path(self):
|
||||
return [ ]
|
||||
|
||||
|
@ -57,6 +67,14 @@ class PlaylistManager(list):
|
|||
self.__current_changed(old)
|
||||
return self.track
|
||||
|
||||
def n_children(self):
|
||||
return len(self.children)
|
||||
|
||||
def nth_child(self, n):
|
||||
if n < len(self.children):
|
||||
return self.children[n]
|
||||
return None
|
||||
|
||||
def __peek_pl(self, plist, n):
|
||||
cur = plist.current
|
||||
res = [ ]
|
||||
|
|
|
@ -10,6 +10,9 @@ import unittest
|
|||
test_library = os.path.abspath("./trier/Test Library/Test Artist 01")
|
||||
|
||||
class TestGenrePlaylist(unittest.TestCase):
|
||||
def setUp(self):
|
||||
notify.registered.clear()
|
||||
|
||||
def test_genre_node(self):
|
||||
gnode = genre.GenreNode()
|
||||
self.assertIsInstance(gnode, node.PlaylistNode)
|
||||
|
|
|
@ -14,7 +14,7 @@ class ManagerModel(GObject.GObject, Gtk.TreeModel):
|
|||
self.filter_re = re.compile("")
|
||||
self.filter.set_visible_func(self.is_visible)
|
||||
|
||||
curds.notify.register("new-playlist", self.on_new_playlist)
|
||||
curds.notify.register("node-inserted", self.on_node_inserted)
|
||||
curds.notify.register("playlist-changed", self.on_playlist_changed, queue=True)
|
||||
|
||||
def can_select_path(self, selection, model, path, current):
|
||||
|
@ -60,21 +60,16 @@ class ManagerModel(GObject.GObject, Gtk.TreeModel):
|
|||
|
||||
def do_iter_n_children(self, iter):
|
||||
plist = self.iter_playlist(iter)
|
||||
if plist and not isinstance(plist, curds.Playlist):
|
||||
try:
|
||||
return plist.n_children()
|
||||
except:
|
||||
return len(plist)
|
||||
if plist:
|
||||
return plist.n_children()
|
||||
return 0
|
||||
|
||||
def do_iter_nth_child(self, iter, n):
|
||||
child = Gtk.TreeIter()
|
||||
if iter == None:
|
||||
child.user_data = n + 1
|
||||
elif iter.user_data2 == 0:
|
||||
child.user_data = iter.user_data
|
||||
child.user_data2 = n + 1
|
||||
return self.iter_valid(child)
|
||||
plist = self.iter_playlist(iter)
|
||||
if plist:
|
||||
child = plist.nth_child(n)
|
||||
return self.playlist_valid_iter(child)
|
||||
return (False, None)
|
||||
|
||||
def do_iter_next(self, iter):
|
||||
if iter.user_data2 > 0:
|
||||
|
@ -84,11 +79,8 @@ class ManagerModel(GObject.GObject, Gtk.TreeModel):
|
|||
return self.iter_valid(iter)
|
||||
|
||||
def do_iter_parent(self, child):
|
||||
if child.user_data2 > 0:
|
||||
iter = Gtk.TreeIter()
|
||||
iter.user_data = child.user_data
|
||||
return self.iter_valid(iter)
|
||||
return (False, None)
|
||||
plist = self.iter_playlist(child)
|
||||
return self.playlist_valid_iter(plist.parent)
|
||||
|
||||
def do_iter_previous(self, iter):
|
||||
if iter.user_data2 > 0:
|
||||
|
@ -108,16 +100,10 @@ class ManagerModel(GObject.GObject, Gtk.TreeModel):
|
|||
return True
|
||||
|
||||
def iter_playlist(self, iter):
|
||||
plist = curds.PlaylistManager
|
||||
if iter and iter.user_data > 0:
|
||||
plist = curds.PlaylistManager[iter.user_data - 1]
|
||||
if plist != None and iter.user_data2 > 0:
|
||||
try:
|
||||
plist = plist.nth_child(iter.user_data2 - 1)
|
||||
except:
|
||||
valid = not isinstance(plist, curds.Playlist)
|
||||
plist = plist[iter.user_data2 - 1] if valid == True else None
|
||||
return plist
|
||||
path = self.get_path(iter)
|
||||
return curds.PlaylistManager.get_node(path.get_indices())
|
||||
return curds.PlaylistManager
|
||||
|
||||
def iter_valid(self, iter):
|
||||
plist = self.iter_playlist(iter)
|
||||
|
@ -125,24 +111,22 @@ class ManagerModel(GObject.GObject, Gtk.TreeModel):
|
|||
return (True, iter) if valid else (False, None)
|
||||
|
||||
def on_playlist_changed(self, plist):
|
||||
iter = self.playlist_iter(plist)
|
||||
if iter:
|
||||
self.row_changed(self.get_path(iter), iter)
|
||||
if plist.parent:
|
||||
path = Gtk.TreePath(plist.get_path())
|
||||
self.row_changed(path, self.get_iter(path))
|
||||
|
||||
def on_new_playlist(self, plist, index, first):
|
||||
if first == True:
|
||||
parent = curds.PlaylistManager.parent(plist)
|
||||
iter = self.playlist_iter(parent)
|
||||
self.row_has_child_toggled(self.get_path(iter), iter)
|
||||
def on_node_inserted(self, plist, index):
|
||||
if not plist.has_sibling():
|
||||
path = Gtk.TreePath(plist.parent.get_path())
|
||||
self.row_has_child_toggled(path, self.get_iter(path))
|
||||
if isinstance(plist, curds.LibraryPlaylist):
|
||||
iter = self.playlist_iter(plist)
|
||||
fiter = self.filter.convert_child_iter_to_iter(iter)
|
||||
Treeview.expand_to_path(self.filter.get_path(fiter[1]))
|
||||
path = Gtk.TreePath(plist.get_path())
|
||||
fpath = self.filter.convert_child_path_to_path(path)
|
||||
Treeview.expand_to_path(fpath)
|
||||
|
||||
def on_row_activated(self, treeview, path, column):
|
||||
iter = self.filter.get_iter(path)
|
||||
child = self.filter.convert_iter_to_child_iter(iter)
|
||||
plist = self.iter_playlist(child)
|
||||
child = self.filter.convert_path_to_child_path(path)
|
||||
plist = curds.PlaylistManager.get_node(child)
|
||||
if isinstance(plist, curds.Playlist):
|
||||
curds.PlaylistManager.select(plist)
|
||||
|
||||
|
@ -157,8 +141,11 @@ class ManagerModel(GObject.GObject, Gtk.TreeModel):
|
|||
def playlist_iter(self, plist):
|
||||
if plist == None or plist.parent == None:
|
||||
return None
|
||||
path = plist.get_path()
|
||||
return self.do_get_iter(path)[1]
|
||||
return self.get_iter(plist.get_path())
|
||||
|
||||
def playlist_valid_iter(self, plist):
|
||||
iter = self.playlist_iter(plist)
|
||||
return self.iter_valid(iter)
|
||||
|
||||
def set_filter_text(self, entry):
|
||||
try:
|
||||
|
|
|
@ -16,7 +16,7 @@ class TestManager(unittest.TestCase):
|
|||
def setUp(self):
|
||||
curds.reset()
|
||||
curds.notify.register("playlist-changed", manager.MgrModel.on_playlist_changed, queue=True)
|
||||
curds.notify.register("new-playlist", manager.MgrModel.on_new_playlist, queue=True)
|
||||
curds.notify.register("node-inserted", manager.MgrModel.on_node_inserted)
|
||||
|
||||
self.model = manager.ManagerModel()
|
||||
self.genre = curds.PlaylistManager.lookup("Genres")
|
||||
|
|
Loading…
Reference in New Issue