rind: Add library playlists to the playlist manager
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
9f690ae204
commit
57b642265c
|
@ -27,11 +27,13 @@
|
|||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="headers_visible">False</property>
|
||||
<property name="expander_column">treeviewcolumn1</property>
|
||||
<property name="enable_tree_lines">True</property>
|
||||
<child internal-child="selection">
|
||||
<object class="GtkTreeSelection"/>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn">
|
||||
<object class="GtkTreeViewColumn" id="treeviewcolumn1">
|
||||
<property name="sizing">fixed</property>
|
||||
<property name="fixed_width">50</property>
|
||||
<property name="title" translatable="yes">column</property>
|
||||
|
|
|
@ -9,19 +9,26 @@ class ManagerModel(GObject.GObject, Gtk.TreeModel):
|
|||
def __init__(self, *args, **kwargs):
|
||||
GObject.GObject.__init__(self)
|
||||
curds.Notify.notify_me("add-track", self.on_add_track)
|
||||
curds.Notify.notify_me("new-library-playlist", self.on_new_library)
|
||||
|
||||
def do_get_column_type(self, col):
|
||||
return str
|
||||
|
||||
def do_get_iter(self, path):
|
||||
return self.do_iter_nth_child(None, path.get_indices()[0])
|
||||
res = (False, None)
|
||||
for i in path.get_indices():
|
||||
res = self.do_iter_nth_child(res[1], i)
|
||||
return res
|
||||
|
||||
def do_get_n_columns(self):
|
||||
return 2
|
||||
|
||||
def do_get_path(self, iter):
|
||||
if iter != None:
|
||||
return Gtk.TreePath((iter.user_data - 1))
|
||||
indices = [ iter.user_data - 1 ]
|
||||
if iter.user_data2 > 0:
|
||||
indices.append(iter.user_data2 - 1)
|
||||
return Gtk.TreePath().new_from_indices(indices)
|
||||
return None
|
||||
|
||||
def do_get_value(self, iter, column):
|
||||
|
@ -32,22 +39,31 @@ class ManagerModel(GObject.GObject, Gtk.TreeModel):
|
|||
return plist.icon
|
||||
return str(plist)
|
||||
|
||||
def do_iter_children(self, parent):
|
||||
return self.do_iter_nth_child(parent, 0)
|
||||
|
||||
def do_iter_has_child(self, iter):
|
||||
return False
|
||||
return self.iter_n_children(iter) > 0
|
||||
|
||||
def do_iter_n_children(self, iter):
|
||||
if iter == None:
|
||||
return len(toplevel)
|
||||
return 0
|
||||
if iter != None:
|
||||
plist = self.iter_playlist(iter)
|
||||
if plist == curds.PlaylistManager["Library"]:
|
||||
return len(plist)
|
||||
return 0
|
||||
return len(toplevel)
|
||||
|
||||
def do_iter_nth_child(self, iter, n):
|
||||
if n < len(toplevel):
|
||||
iter = Gtk.TreeIter()
|
||||
iter.user_data = n + 1
|
||||
iter.user_data2 = 0
|
||||
iter.user_data3 = 0
|
||||
return (True, iter)
|
||||
return (False, None)
|
||||
if n >= self.iter_n_children(iter):
|
||||
return (False, None)
|
||||
|
||||
ret = Gtk.TreeIter()
|
||||
if iter == None:
|
||||
ret.user_data = n + 1
|
||||
elif iter.user_data2 == 0:
|
||||
ret.user_data = iter.user_data
|
||||
ret.user_data2 = n + 1
|
||||
return (True, ret)
|
||||
|
||||
def do_iter_next(self, iter):
|
||||
iter.user_data += 1
|
||||
|
@ -55,19 +71,45 @@ class ManagerModel(GObject.GObject, Gtk.TreeModel):
|
|||
return (False, None)
|
||||
return (True, iter)
|
||||
|
||||
def do_iter_parent(self, child):
|
||||
iter = Gtk.TreeIter()
|
||||
iter.user_data = child.user_data
|
||||
return (True, iter)
|
||||
|
||||
def find_playlist(self, plist):
|
||||
if plist != None:
|
||||
if isinstance(plist, curds.LibraryPlaylist):
|
||||
iter = self.iter_nth_child(None, toplevel.index("Library"))
|
||||
index = curds.PlaylistManager["Library"].index(plist)
|
||||
return self.iter_nth_child(iter, index)
|
||||
elif plist.name in toplevel:
|
||||
return self.iter_nth_child(None, toplevel.index(plist.name))
|
||||
return None
|
||||
|
||||
def iter_playlist(self, iter):
|
||||
top = toplevel[iter.user_data - 1]
|
||||
if top != None:
|
||||
return curds.PlaylistManager[top]
|
||||
item = toplevel[iter.user_data - 1]
|
||||
if item != None:
|
||||
plist = curds.PlaylistManager[item]
|
||||
if iter.user_data2 > 0:
|
||||
plist = plist[iter.user_data2 - 1]
|
||||
return plist
|
||||
return None
|
||||
|
||||
def on_add_track(self, plist, track):
|
||||
if plist.name in toplevel:
|
||||
iter = self.iter_nth_child(None, toplevel.index(plist.name))
|
||||
path = self.get_path(iter)
|
||||
self.row_changed(path, iter)
|
||||
iter = self.find_playlist(plist)
|
||||
if iter != None:
|
||||
self.row_changed(self.get_path(iter), iter)
|
||||
|
||||
def on_new_library(self, plist):
|
||||
iter = self.find_playlist(plist)
|
||||
if iter != None:
|
||||
self.row_inserted(self.get_path(iter), iter)
|
||||
if len(curds.PlaylistManager["Library"]) == 1:
|
||||
parent = self.iter_parent(iter)
|
||||
self.row_has_child_toggled(self.get_path(parent), parent)
|
||||
|
||||
|
||||
MgrModel = ManagerModel()
|
||||
Treeview = gtk.Builder.get_object("manager_treeview")
|
||||
Treeview.set_model(MgrModel)
|
||||
Treeview.expand_all()
|
||||
|
|
|
@ -16,7 +16,13 @@ class TestManager(unittest.TestCase):
|
|||
def setUp(self):
|
||||
curds.tags.tag_map.clear()
|
||||
curds.PlaylistManager["Collection"].list.clear()
|
||||
curds.PlaylistManager["Library"].clear()
|
||||
curds.Notify.notify_me("new-track", curds.PlaylistManager["Collection"].add)
|
||||
if not curds.playlist.library.library_thread.is_alive():
|
||||
curds.playlist.library.library_thread = curds.ThreadQueue()
|
||||
|
||||
def tearDown(self):
|
||||
curds.playlist.library.library_thread.stop()
|
||||
|
||||
def test_init(self):
|
||||
self.assertIsInstance(gtk.Builder.get_object("manager_treeview"), Gtk.TreeView)
|
||||
|
@ -58,7 +64,7 @@ class TestManager(unittest.TestCase):
|
|||
self.assertEqual(iter.user_data, i + 1)
|
||||
self.assertEqual(iter.user_data2, 0)
|
||||
self.assertEqual(iter.user_data3, 0)
|
||||
self.assertEqual(path.get_indices()[0], i)
|
||||
self.assertEqual(path.get_indices(), [ i ])
|
||||
self.assertEqual(model.iter_n_children(iter), 0)
|
||||
self.assertEqual(model.iter_playlist(iter), toplevel_plist[i])
|
||||
self.assertEqual(model.get_value(iter, 0), toplevel_icons[i])
|
||||
|
@ -68,3 +74,49 @@ class TestManager(unittest.TestCase):
|
|||
self.assertEqual(iter.user_data, 3)
|
||||
self.assertEqual(iter.user_data2, 0)
|
||||
self.assertEqual(iter.user_data3, 0)
|
||||
|
||||
iter = model.find_playlist(plist_mgr["Collection"])
|
||||
self.assertEqual(iter.user_data, 1)
|
||||
self.assertEqual(iter.user_data2, 0)
|
||||
self.assertEqual(iter.user_data3, 0)
|
||||
self.assertIsNone(model.find_playlist(None))
|
||||
|
||||
def test_model_library(self):
|
||||
model = manager.ManagerModel()
|
||||
iter = model.find_playlist(plist_mgr["Library"])
|
||||
|
||||
self.assertEqual(iter.user_data, 3)
|
||||
self.assertEqual(iter.user_data2, 0)
|
||||
self.assertEqual(iter.user_data3, 0)
|
||||
self.assertFalse(model.iter_has_child(iter))
|
||||
self.assertEqual(model.iter_n_children(iter), 0)
|
||||
plist = plist_mgr["Library"].add(test_album)
|
||||
self.assertTrue(model.iter_has_child(iter))
|
||||
self.assertEqual(model.iter_n_children(iter), 1)
|
||||
|
||||
child = model.iter_children(iter)
|
||||
self.assertEqual(child.user_data, 3)
|
||||
self.assertEqual(child.user_data2, 1)
|
||||
self.assertEqual(child.user_data3, 0)
|
||||
self.assertEqual(model.get_path(child).get_indices(), [ 2, 0 ])
|
||||
|
||||
child = model.find_playlist(plist)
|
||||
path = model.get_path(child)
|
||||
self.assertEqual(child.user_data, 3)
|
||||
self.assertEqual(child.user_data2, 1)
|
||||
self.assertEqual(child.user_data3, 0)
|
||||
self.assertEqual(model.iter_playlist(child), plist)
|
||||
self.assertEqual(path.get_indices(), [ 2, 0 ])
|
||||
citer = model.get_iter(path)
|
||||
self.assertEqual(citer.user_data, 3)
|
||||
self.assertEqual(citer.user_data2, 1)
|
||||
self.assertEqual(citer.user_data3, 0)
|
||||
|
||||
iter = model.iter_parent(child)
|
||||
self.assertEqual(iter.user_data, 3)
|
||||
self.assertEqual(iter.user_data2, 0)
|
||||
self.assertEqual(iter.user_data3, 0)
|
||||
|
||||
curds.playlist.library.library_thread.join()
|
||||
self.assertEqual(model.get_value(child, 0), "folder")
|
||||
self.assertEqual(model.get_value(child, 1), f"{test_album}\n10 Tracks")
|
||||
|
|
Loading…
Reference in New Issue