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:
Anna Schumaker 2019-04-17 16:14:33 -04:00
parent 8aff4d7f8a
commit 91a606e054
4 changed files with 52 additions and 44 deletions

View File

@ -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 = [ ]

View File

@ -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)

View File

@ -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:

View File

@ -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")