rind: Don't set node iterators based on path
Instead, use the node id and node cache to find playlists. Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
e4d96755e9
commit
dcc2f7e6d0
20
rind/node.py
20
rind/node.py
|
@ -87,17 +87,15 @@ class NodeTreeModel(GObject.GObject, Gtk.TreeModel):
|
|||
plist = self.iter_playlist(iter)
|
||||
if plist == None or plist.next_child == None:
|
||||
return (False, None)
|
||||
res = self.playlist_iter(plist.next_child)
|
||||
iter.user_data = res.user_data
|
||||
iter.user_data2 = res.user_data2
|
||||
iter.user_data3 = id(plist.next_child)
|
||||
return (True, iter)
|
||||
|
||||
def do_iter_parent(self, child):
|
||||
plist = self.iter_playlist(child)
|
||||
if plist.parent == None or plist.parent == curds.playlist.Root:
|
||||
return (False, None)
|
||||
return (True, self.playlist_iter(plist.parent))
|
||||
if plist != None and plist.parent != None:
|
||||
if plist.parent != curds.playlist.Root:
|
||||
return (True, self.playlist_iter(plist.parent))
|
||||
return (False, None)
|
||||
|
||||
def is_visible(self, model, iter, data):
|
||||
plist = self.iter_playlist(iter)
|
||||
|
@ -106,11 +104,8 @@ class NodeTreeModel(GObject.GObject, Gtk.TreeModel):
|
|||
return True
|
||||
|
||||
def iter_playlist(self, iter):
|
||||
if iter and iter.user_data > 0:
|
||||
path = Gtk.TreePath(iter.user_data - 1)
|
||||
if iter.user_data2 > 0:
|
||||
path.append_index(iter.user_data2 - 1)
|
||||
return curds.playlist.Root.get_node(path)
|
||||
if iter and iter.user_data3 > 0:
|
||||
return curds.playlist.Root.lookup_byid(iter.user_data3)
|
||||
return curds.playlist.Root
|
||||
|
||||
def on_playlist_changed(self, plist):
|
||||
|
@ -143,10 +138,7 @@ class NodeTreeModel(GObject.GObject, Gtk.TreeModel):
|
|||
def playlist_iter(self, plist):
|
||||
if plist == None or plist.parent == None:
|
||||
return None
|
||||
path = plist.get_path()
|
||||
iter = Gtk.TreeIter()
|
||||
iter.user_data = path[0] + 1
|
||||
iter.user_data2 = path[1] + 1 if len(path) >= 2 else 0
|
||||
iter.user_data3 = id(plist)
|
||||
return iter
|
||||
|
||||
|
|
|
@ -57,33 +57,31 @@ class TestNodeTreeModel(unittest.TestCase):
|
|||
self.assertEqual(self.model.get_column_type(2), GObject.GType(int))
|
||||
|
||||
def test_model_get_iter(self):
|
||||
for i, node in enumerate(plist_root.children):
|
||||
path = Gtk.TreePath(node.get_path())
|
||||
iter = self.model.get_iter(path)
|
||||
self.assertTreeIterEqual(iter, (i + 1, 0, id(node)))
|
||||
|
||||
path = Gtk.TreePath.new_from_indices([ plist_root.n_children() ])
|
||||
self.assertRaises(ValueError, self.model.get_iter, path)
|
||||
|
||||
index = self.genre.node_index()
|
||||
for i, node in enumerate(self.genre.children):
|
||||
for node in plist_root.children:
|
||||
path = Gtk.TreePath(node.get_path())
|
||||
iter = self.model.get_iter(path)
|
||||
self.assertTreeIterEqual(iter, (index + 1, i + 1, id(node)))
|
||||
self.assertTreeIterEqual(iter, (0, 0, id(node)))
|
||||
|
||||
for node in self.genre.children:
|
||||
path = Gtk.TreePath(node.get_path())
|
||||
iter = self.model.get_iter(path)
|
||||
self.assertTreeIterEqual(iter, (0, 0, id(node)))
|
||||
|
||||
def test_model_get_path(self):
|
||||
iter = Gtk.TreeIter()
|
||||
|
||||
for i, node in enumerate(plist_root.children):
|
||||
iter.user_data = i + 1
|
||||
for node in plist_root.children:
|
||||
iter.user_data3 = id(node)
|
||||
path = self.model.get_path(iter)
|
||||
self.assertEqual(path.get_indices(), [ i ])
|
||||
self.assertEqual(path.get_indices(), node.get_path())
|
||||
|
||||
iter = self.model.playlist_iter(self.genre)
|
||||
for i, node in enumerate(self.genre.children):
|
||||
iter.user_data2 = i + 1
|
||||
for node in self.genre.children:
|
||||
iter.user_data3 = id(node)
|
||||
path = self.model.get_path(iter)
|
||||
self.assertEqual(path.get_indices(), [ iter.user_data - 1, i ])
|
||||
self.assertEqual(path.get_indices(), node.get_path())
|
||||
|
||||
def test_model_get_value(self):
|
||||
col = node.Treeview.get_column(1)
|
||||
|
@ -92,7 +90,7 @@ class TestNodeTreeModel(unittest.TestCase):
|
|||
|
||||
for i, child in enumerate(plist_root.children):
|
||||
text = str(child) if i != 0 else f"<b>{str(child)}</b>"
|
||||
iter.user_data = i + 1
|
||||
iter.user_data3 = id(child)
|
||||
self.assertEqual(self.model.get_value(iter, 0), child.icon)
|
||||
self.assertEqual(self.model.get_value(iter, 1), text)
|
||||
if isinstance(child, curds.Playlist):
|
||||
|
@ -102,60 +100,56 @@ class TestNodeTreeModel(unittest.TestCase):
|
|||
|
||||
def test_model_iter_children(self):
|
||||
iter = self.model.iter_children(None)
|
||||
self.assertTreeIterEqual(iter, (1, 0, id(plist_root.nth_child(0))))
|
||||
self.assertTreeIterEqual(iter, (0, 0, id(plist_root.nth_child(0))))
|
||||
|
||||
for i, node in enumerate(plist_root.children):
|
||||
iter.user_data = i + 1
|
||||
for node in plist_root.children:
|
||||
iter.user_data3 = id(node)
|
||||
child = self.model.iter_children(iter)
|
||||
if node not in [ self.artist, self.decade, self.genre ]:
|
||||
self.assertIsNone(child)
|
||||
iter.user_data = plist_root.n_children()
|
||||
iter.user_data3 = 42
|
||||
self.assertIsNone(self.model.iter_children(iter))
|
||||
|
||||
iter = self.model.playlist_iter(self.genre)
|
||||
child = self.model.iter_children(iter)
|
||||
self.assertTreeIterEqual(child, (iter.user_data, 1, id(self.genre.nth_child(0))))
|
||||
self.assertTreeIterEqual(child, (0, 0, id(self.genre.nth_child(0))))
|
||||
|
||||
for i, node in enumerate(self.genre.children):
|
||||
child.user_data2 = i + 1
|
||||
for node in self.genre.children:
|
||||
child.user_data3 = id(node)
|
||||
self.assertIsNone(self.model.iter_children(child))
|
||||
|
||||
def test_model_iter_has_child(self):
|
||||
iter = Gtk.TreeIter()
|
||||
|
||||
for i, node in enumerate(plist_root.children):
|
||||
iter.user_data = i + 1
|
||||
for node in plist_root.children:
|
||||
iter.user_data3 = id(node)
|
||||
expected = node in [ self.artist, self.decade, self.genre ]
|
||||
self.assertEqual(self.model.iter_has_child(iter), expected)
|
||||
iter.user_data = plist_root.n_children()
|
||||
iter.user_data3 = 42
|
||||
self.assertFalse(self.model.iter_has_child(iter))
|
||||
|
||||
iter = self.model.playlist_iter(self.genre)
|
||||
for i, node in enumerate(self.genre.children):
|
||||
iter.user_data2 = i + 1
|
||||
for node in self.genre.children:
|
||||
iter.user_data3 = id(node)
|
||||
self.assertFalse(self.model.iter_has_child(iter))
|
||||
iter.user_data2 = self.genre.n_children()
|
||||
self.assertFalse(self.model.iter_has_child(iter))
|
||||
|
||||
def test_model_iter_n_children(self):
|
||||
iter = Gtk.TreeIter()
|
||||
self.assertEqual(self.model.iter_n_children(None), plist_root.n_children())
|
||||
|
||||
for i, node in enumerate(plist_root.children):
|
||||
iter.user_data = i + 1
|
||||
for node in plist_root.children:
|
||||
iter.user_data3 = id(node)
|
||||
self.assertEqual(self.model.iter_n_children(iter), node.n_children())
|
||||
iter.user_data = plist_root.n_children()
|
||||
iter.user_data3 = 42
|
||||
self.assertEqual(self.model.iter_n_children(iter), 0)
|
||||
|
||||
iter = self.model.playlist_iter(self.genre)
|
||||
for i in range(self.genre.n_children() + 1):
|
||||
iter.user_data2 = i + 1
|
||||
for node in self.genre.children:
|
||||
iter.user_data3 = id(node)
|
||||
self.assertEqual(self.model.iter_n_children(iter), 0)
|
||||
|
||||
def test_model_iter_nth_child(self):
|
||||
for i, node in enumerate(plist_root.children):
|
||||
iter = self.model.iter_nth_child(None, i)
|
||||
self.assertTreeIterEqual(iter, (i + 1, 0, id(node)))
|
||||
self.assertTreeIterEqual(iter, (0, 0, id(node)))
|
||||
if node not in [self.artist, self.decade, self.genre]:
|
||||
self.assertIsNone(self.model.iter_nth_child(iter, 0))
|
||||
self.assertIsNone(self.model.iter_nth_child(None, plist_root.n_children()))
|
||||
|
@ -163,35 +157,33 @@ class TestNodeTreeModel(unittest.TestCase):
|
|||
iter = self.model.playlist_iter(self.genre)
|
||||
for i, node in enumerate(self.genre.children):
|
||||
child = self.model.iter_nth_child(iter, i)
|
||||
self.assertTreeIterEqual(child, (iter.user_data, i + 1, id(node)))
|
||||
self.assertTreeIterEqual(child, (0, 0, id(node)))
|
||||
self.assertIsNone(self.model.iter_nth_child(iter, i + 1))
|
||||
|
||||
def test_model_iter_next(self):
|
||||
iter = self.model.iter_children(None)
|
||||
for i, node in enumerate(plist_root.children):
|
||||
self.assertTreeIterEqual(iter, (i + 1, 0, id(node)))
|
||||
for node in plist_root.children:
|
||||
self.assertTreeIterEqual(iter, (0, 0, id(node)))
|
||||
iter = self.model.iter_next(iter)
|
||||
self.assertIsNone(iter)
|
||||
|
||||
iter = self.model.playlist_iter(self.genre)
|
||||
child = self.model.iter_children(iter)
|
||||
for i, node in enumerate(self.genre.children):
|
||||
self.assertTreeIterEqual(child, (iter.user_data, i + 1, id(node)))
|
||||
for node in self.genre.children:
|
||||
self.assertTreeIterEqual(child, (0, 0, id(node)))
|
||||
child = self.model.iter_next(child)
|
||||
self.assertIsNone(child)
|
||||
|
||||
def test_model_iter_parent(self):
|
||||
iter = self.model.iter_children(None)
|
||||
for i, node in enumerate(plist_root.children):
|
||||
iter = Gtk.TreeIter()
|
||||
for node in enumerate(plist_root.children):
|
||||
iter.user_data3 = id(node)
|
||||
self.assertIsNone(self.model.iter_parent(iter))
|
||||
iter = self.model.iter_next(iter)
|
||||
|
||||
iter = self.model.playlist_iter(self.genre)
|
||||
iter = self.model.iter_children(iter)
|
||||
for i, node in enumerate(self.genre.children):
|
||||
for node in self.genre.children:
|
||||
iter.user_data3 = id(node)
|
||||
parent = self.model.iter_parent(iter)
|
||||
self.assertTreeIterEqual(parent, (iter.user_data, 0, id(self.genre)))
|
||||
iter = self.model.iter_next(iter)
|
||||
self.assertTreeIterEqual(parent, (0, 0, id(self.genre)))
|
||||
|
||||
def test_model_iter_playlist(self):
|
||||
iter = Gtk.TreeIter()
|
||||
|
@ -199,41 +191,35 @@ class TestNodeTreeModel(unittest.TestCase):
|
|||
self.assertEqual(self.model.iter_playlist(None), plist_root)
|
||||
self.assertEqual(self.model.iter_playlist(iter), plist_root)
|
||||
|
||||
for i, node in enumerate(plist_root.children):
|
||||
iter.user_data = i + 1
|
||||
self.assertEqual(self.model.iter_playlist(iter), node)
|
||||
iter.user_data = plist_root.n_children() + 1
|
||||
iter.user_data3 = 42
|
||||
self.assertIsNone(self.model.iter_playlist(iter))
|
||||
|
||||
iter.user_data2 = 1
|
||||
for i, node in enumerate(plist_root.children):
|
||||
iter.user_data = i + 1
|
||||
self.assertEqual(self.model.iter_playlist(iter), node.nth_child(0))
|
||||
for node in plist_root.children:
|
||||
iter.user_data3 = id(node)
|
||||
self.assertEqual(self.model.iter_playlist(iter), node)
|
||||
|
||||
iter = self.model.playlist_iter(self.genre)
|
||||
for i in range(self.genre.n_children() + 1):
|
||||
iter.user_data2 = i + 1
|
||||
expected = self.genre.nth_child(i) if i < self.genre.n_children() else None
|
||||
self.assertEqual(self.model.iter_playlist(iter), expected)
|
||||
for node in self.genre.children:
|
||||
iter.user_data3 = id(node)
|
||||
self.assertEqual(self.model.iter_playlist(iter), node)
|
||||
|
||||
def test_model_playlist_iter(self):
|
||||
self.assertIsNone(self.model.playlist_iter(None))
|
||||
|
||||
for i, node in enumerate(plist_root.children):
|
||||
for node in plist_root.children:
|
||||
iter = self.model.playlist_iter(node)
|
||||
self.assertTreeIterEqual(iter, (i + 1, 0, id(node)))
|
||||
self.assertTreeIterEqual(iter, (0, 0, id(node)))
|
||||
|
||||
iter = self.model.playlist_iter(self.genre)
|
||||
for i, node in enumerate(self.genre.children):
|
||||
for node in self.genre.children:
|
||||
child = self.model.playlist_iter(node)
|
||||
self.assertTreeIterEqual(child, (iter.user_data, i + 1, id(node)))
|
||||
self.assertTreeIterEqual(child, (0, 0, id(node)))
|
||||
|
||||
def test_node_selection(self):
|
||||
selection = node.Treeview.get_selection()
|
||||
self.assertIsInstance(selection, Gtk.TreeSelection)
|
||||
|
||||
for i, child in enumerate(plist_root.children):
|
||||
path = Gtk.TreePath(i)
|
||||
for child in plist_root.children:
|
||||
path = Gtk.TreePath(child.get_path())
|
||||
selection.select_path(path)
|
||||
if isinstance(child, curds.Playlist):
|
||||
self.assertTrue( selection.path_is_selected(path))
|
||||
|
|
Loading…
Reference in New Issue