curds: PlaylistManager shouldn't inherit from list

This is just the next step in changing this into a PlaylistNode

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2019-04-18 10:38:38 -04:00
parent 8ab2d97cf5
commit 8434446dcd
3 changed files with 89 additions and 66 deletions

View File

@ -9,24 +9,25 @@ import os
import random
class PlaylistManager(list):
class PlaylistManager:
def __init__(self):
self.append(collection.CollectionPlaylist())
self.append(previous.PreviousPlaylist())
self.append(genre.GenreNode())
self.append(library.LibraryNode())
for plist in self:
plist.parent = self
self.children = self
self.children = [ ]
self.parent = None
self.children.append(collection.CollectionPlaylist())
self.children.append(previous.PreviousPlaylist())
self.children.append(genre.GenreNode())
self.children.append(library.LibraryNode())
for plist in self.children:
plist.parent = self
self.current = [ self.lookup("Collection") ]
self.track = None
def __getitem__(self, index):
if index < len(self):
return list.__getitem__(self, index)
if index < len(self.children):
return self.children[index]
return None
def __current_changed(self, old):
@ -47,7 +48,7 @@ class PlaylistManager(list):
return [ ]
def index(self, plist):
for (i, pl) in enumerate(self):
for (i, pl) in enumerate(self.children):
if id(pl) == id(plist): return i
return None
@ -107,7 +108,7 @@ class PlaylistManager(list):
return self.track
def reset(self):
for plist in self:
for plist in self.children:
plist.reset()
self.current = [ self.lookup("Collection") ]
self.track = None

View File

@ -48,7 +48,6 @@ class TestPlaylistManager(unittest.TestCase):
def test_manager_init(self):
self.assertIsInstance(self.playman, manager.PlaylistManager)
self.assertIsInstance(self.playman, list)
self.assertIsInstance(self.playman.lookup("Collection"), collection.CollectionPlaylist)
self.assertIsInstance(self.playman.lookup("Previous"), previous.PreviousPlaylist)
@ -67,7 +66,7 @@ class TestPlaylistManager(unittest.TestCase):
self.assertEqual( self.playman[3], self.playman.lookup("Libraries"))
self.assertIsNone(self.playman[999])
for i in range(len(self.playman)):
for i in range(self.playman.n_children()):
self.assertEqual(self.playman.index(self.playman[i]), i)
self.assertIsNone(self.playman.index(plist))

View File

@ -53,16 +53,16 @@ class TestManager(unittest.TestCase):
self.assertEqual(self.model.get_column_type(col), GObject.GType(str))
def test_model_get_iter(self):
for i in range(len(plist_mgr)):
for i, node in enumerate(plist_mgr.children):
path = Gtk.TreePath.new_from_indices([ i ])
iter = self.model.get_iter(path)
self.assertTreeIterEqual(iter, (i + 1, 0, 0))
path = Gtk.TreePath.new_from_indices([ len(plist_mgr) ])
path = Gtk.TreePath.new_from_indices([ plist_mgr.n_children() ])
self.assertRaises(ValueError, self.model.get_iter, path)
idx = plist_mgr.index(self.genre)
for i in range(self.genre.n_children()):
for i, node in enumerate(self.genre.children):
path = Gtk.TreePath.new_from_indices([ idx, i ])
iter = self.model.get_iter(path)
self.assertTreeIterEqual(iter, (idx + 1, i + 1, 0))
@ -70,13 +70,13 @@ class TestManager(unittest.TestCase):
def test_model_get_path(self):
iter = Gtk.TreeIter()
for i in range(len(plist_mgr)):
for i, node in enumerate(plist_mgr.children):
iter.user_data = i + 1
path = self.model.get_path(iter)
self.assertEqual(path.get_indices(), [ i ])
iter = self.model.playlist_iter(self.genre)
for i in range(self.genre.n_children()):
for i, node in enumerate(self.genre.children):
iter.user_data2 = i + 1
path = self.model.get_path(iter)
self.assertEqual(path.get_indices(), [ iter.user_data - 1, i ])
@ -84,52 +84,59 @@ class TestManager(unittest.TestCase):
def test_model_get_value(self):
iter = Gtk.TreeIter()
for i in range(len(plist_mgr)):
plist = plist_mgr[i]
text = str(plist) if i != 0 else f"<b>{str(plist)}</b>"
for i, node in enumerate(plist_mgr.children):
text = str(node) if i != 0 else f"<b>{str(node)}</b>"
iter.user_data = i + 1
self.assertEqual(self.model.get_value(iter, 0), plist.icon)
self.assertEqual(self.model.get_value(iter, 0), node.icon)
self.assertEqual(self.model.get_value(iter, 1), text)
def test_model_iter_children(self):
iter = self.model.iter_children(None)
self.assertTreeIterEqual(iter, (1, 0, 0))
for i in range(len(plist_mgr) + 1):
for i, node in enumerate(plist_mgr.children):
iter.user_data = i + 1
child = self.model.iter_children(iter)
if plist_mgr[i] != self.genre:
if node != self.genre:
self.assertIsNone(child)
iter.user_data = plist_mgr.n_children()
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, 0))
for i in range(self.genre.n_children()):
for i, node in enumerate(self.genre.children):
child.user_data2 = i + 1
self.assertIsNone(self.model.iter_children(child))
def test_model_iter_has_child(self):
iter = Gtk.TreeIter()
for i in range(len(plist_mgr) + 1):
for i, node in enumerate(plist_mgr.children):
iter.user_data = i + 1
expected = plist_mgr[i] == self.genre
expected = node == self.genre
self.assertEqual(self.model.iter_has_child(iter), expected)
iter.user_data = plist_mgr.n_children()
self.assertFalse(self.model.iter_has_child(iter))
iter = self.model.playlist_iter(self.genre)
for i in range(self.genre.n_children() + 1):
for i, node in enumerate(self.genre.children):
iter.user_data2 = i + 1
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), len(plist_mgr))
self.assertEqual(self.model.iter_n_children(None), plist_mgr.n_children())
for i in range(len(plist_mgr) + 1):
for i, node in enumerate(plist_mgr.children):
iter.user_data = i + 1
n = 2 if plist_mgr[i] == self.genre else 0
n = 2 if node == self.genre else 0
self.assertEqual(self.model.iter_n_children(iter), n)
iter.user_data = plist_mgr.n_children()
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):
@ -137,49 +144,49 @@ class TestManager(unittest.TestCase):
self.assertEqual(self.model.iter_n_children(iter), 0)
def test_model_iter_nth_child(self):
for i in range(len(plist_mgr)):
for i, node in enumerate(plist_mgr.children):
iter = self.model.iter_nth_child(None, i)
self.assertTreeIterEqual(iter, (i + 1, 0, 0))
if plist_mgr[i] != self.genre:
if node != self.genre:
self.assertIsNone(self.model.iter_nth_child(iter, 0))
self.assertIsNone(self.model.iter_nth_child(None, len(plist_mgr)))
self.assertIsNone(self.model.iter_nth_child(None, plist_mgr.n_children()))
iter = self.model.playlist_iter(self.genre)
for i in range(self.genre.n_children()):
for i, node in enumerate(self.genre.children):
child = self.model.iter_nth_child(iter, i)
self.assertTreeIterEqual(child, (iter.user_data, i + 1, 0))
self.assertIsNone(self.model.iter_nth_child(iter, i + 1))
def test_model_iter_next(self):
iter = self.model.iter_children(None)
for i in range(len(curds.PlaylistManager)):
for i, node in enumerate(plist_mgr.children):
self.assertTreeIterEqual(iter, (i + 1, 0, 0))
iter = self.model.iter_next(iter)
self.assertIsNone(iter)
iter = self.model.playlist_iter(self.genre)
child = self.model.iter_children(iter)
for i in range(self.genre.n_children()):
for i, node in enumerate(self.genre.children):
self.assertTreeIterEqual(child, (iter.user_data, i + 1, 0))
child = self.model.iter_next(child)
self.assertIsNone(child)
def test_model_iter_parent(self):
iter = self.model.iter_children(None)
for i in range(len(curds.PlaylistManager)):
for i, node in enumerate(plist_mgr.children):
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 in range(self.genre.n_children()):
for i, node in enumerate(self.genre.children):
parent = self.model.iter_parent(iter)
self.assertTreeIterEqual(parent, (iter.user_data, 0, 0))
iter = self.model.iter_next(iter)
def test_model_iter_previous(self):
iter = self.model.playlist_iter(plist_mgr.lookup("Libraries"))
for i in range(len(curds.PlaylistManager) - 1, -1, -1):
for i in range(plist_mgr.n_children() - 1, -1, -1):
self.assertTreeIterEqual(iter, (i + 1, 0, 0))
iter = self.model.iter_previous(iter)
self.assertIsNone(iter)
@ -197,15 +204,16 @@ class TestManager(unittest.TestCase):
self.assertEqual(self.model.iter_playlist(None), curds.PlaylistManager)
self.assertEqual(self.model.iter_playlist(iter), curds.PlaylistManager)
for i in range(len(plist_mgr) + 1):
for i, node in enumerate(plist_mgr.children):
iter.user_data = i + 1
expected = plist_mgr[i] if i < len(plist_mgr) else None
self.assertEqual(self.model.iter_playlist(iter), expected)
self.assertEqual(self.model.iter_playlist(iter), node)
iter.user_data = plist_mgr.n_children() + 1
self.assertIsNone(self.model.iter_playlist(iter))
iter.user_data2 = 1
for i in range(len(plist_mgr) + 1):
for i, node in enumerate(plist_mgr.children):
iter.user_data = i + 1
expected = self.genre.nth_child(0) if plist_mgr[i] == self.genre else None
expected = self.genre.nth_child(0) if node == self.genre else None
self.assertEqual(self.model.iter_playlist(iter), expected)
iter = self.model.playlist_iter(self.genre)
@ -218,33 +226,48 @@ class TestManager(unittest.TestCase):
iter = Gtk.TreeIter()
self.assertEqual(self.model.iter_valid(iter), (False, None))
for i in range(len(plist_mgr) + 1):
for i, node in enumerate(plist_mgr.children):
iter.user_data = i + 1
expected = (True, iter) if i < len(plist_mgr) else (False, None)
self.assertEqual(self.model.iter_valid(iter), expected)
self.assertEqual(self.model.iter_valid(iter), (True, iter))
iter.user_data = plist_mgr.n_children() + 1
self.assertEqual(self.model.iter_valid(iter), (False, None))
def test_model_playlist_iter(self):
self.assertIsNone(self.model.playlist_iter(None))
for i in range(len(plist_mgr)):
iter = self.model.playlist_iter(plist_mgr[i])
for i, node in enumerate(plist_mgr.children):
iter = self.model.playlist_iter(node)
self.assertTreeIterEqual(iter, (i + 1, 0, 0))
iter = self.model.playlist_iter(self.genre)
for i in range(self.genre.n_children()):
child = self.model.playlist_iter(self.genre.nth_child(i))
for i, node in enumerate(self.genre.children):
child = self.model.playlist_iter(node)
self.assertTreeIterEqual(child, (iter.user_data, i + 1, 0))
def test_model_playlist_valid_iter(self):
self.assertEqual(self.model.playlist_valid_iter(None), (False, None))
for i, node in enumerate(plist_mgr.children):
(valid, iter) = self.model.playlist_valid_iter(node)
self.assertTrue(valid)
self.assertTreeIterEqual(iter, (i + 1, 0, 0))
iter = self.model.playlist_iter(self.genre)
for i, node in enumerate(self.genre.children):
(valid, child) = self.model.playlist_valid_iter(node)
self.assertTrue(valid)
self.assertTreeIterEqual(child, (iter.user_data, i + 1, 0))
def test_manager_selection(self):
selection = manager.Treeview.get_selection()
self.assertIsInstance(selection, Gtk.TreeSelection)
for i in range(len(plist_mgr)):
for i, node in enumerate(plist_mgr.children):
path = Gtk.TreePath(i)
selection.select_path(path)
if isinstance(plist_mgr[i], curds.Playlist):
if isinstance(node, curds.Playlist):
self.assertTrue( selection.path_is_selected(path))
self.assertEqual(playlist.PlistModel.playlist, plist_mgr[i])
self.assertEqual(playlist.PlistModel.playlist, node)
else:
self.assertFalse(selection.path_is_selected(path))
@ -276,16 +299,16 @@ class TestManager(unittest.TestCase):
self.assertFalse(entry.get_style_context().has_class("warning"))
self.assertFalse(manager.SearchPopover.is_visible())
for i in range(len(plist_mgr)):
for i, node in enumerate(plist_mgr.children):
iter = filter.iter_nth_child(None, i)
text = str(plist_mgr[i]) if i != 0 else f"<b>{str(plist_mgr[i])}</b>"
text = str(node) if i != 0 else f"<b>{str(node)}</b>"
self.assertEqual(filter.get_value(iter, 1), text)
if plist_mgr[i] != self.genre:
if node != self.genre:
self.assertIsNone(filter.iter_nth_child(iter, 0))
else:
for i in range(self.genre.n_children()):
for i, node in enumerate(self.genre.children):
child = filter.iter_nth_child(iter, i)
self.assertEqual(filter.get_value(child, 1), str(self.genre.nth_child(i)))
self.assertEqual(filter.get_value(child, 1), str(node))
entry.set_text("*v")
self.model.set_filter_text(entry)
@ -301,11 +324,11 @@ class TestManager(unittest.TestCase):
self.assertFalse(entry.get_style_context().has_class("warning"))
self.assertFalse(manager.SearchPopover.is_visible())
for i in range(2, len(plist_mgr)):
iter = filter.iter_nth_child(None, i - 2)
self.assertEqual(filter.get_value(iter, 1), str(plist_mgr[i]))
for i, node in enumerate(plist_mgr.children[2:]):
iter = filter.iter_nth_child(None, i)
self.assertEqual(filter.get_value(iter, 1), str(node))
child = filter.iter_nth_child(iter, 0)
if plist_mgr[i] != self.genre:
if node != self.genre:
self.assertIsNone(child)
else:
self.assertEqual(filter.get_value(child, 1), str(self.genre.nth_child(1)))