rind: Move playlist.py into a subdirectory

I'm planning to split this into model and view code, similar to the node
sidebar.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2019-05-13 20:41:45 -04:00
parent c8de75e3d7
commit 2f1e8b6965
8 changed files with 180 additions and 174 deletions

View File

@ -6,5 +6,3 @@ from . import node
from . import playlist
Application = gtk.Application
PlistModel = playlist.PlistModel
PlTreeview = playlist.Treeview

View File

@ -95,18 +95,18 @@ class TestNodeTreeView(unittest.TestCase):
collection = curds.playlist.Root.lookup("Collection")
previous = curds.playlist.Root.lookup("Previous")
self.assertNotEqual(playlist.PlistModel.playlist, previous)
self.assertNotEqual(playlist.model.PlistModel.playlist, previous)
path = Gtk.TreePath(previous.get_path())
view.Selection.select_path(path)
self.assertEqual(playlist.PlistModel.playlist, previous)
self.assertEqual(playlist.model.PlistModel.playlist, previous)
path = Gtk.TreePath(collection.get_path())
view.Selection.select_path(path)
self.assertEqual(playlist.PlistModel.playlist, collection)
self.assertEqual(playlist.model.PlistModel.playlist, collection)
view.Selection.unselect_all()
self.assertEqual(playlist.PlistModel.playlist, collection)
self.assertEqual(playlist.model.PlistModel.playlist, collection)
def test_row_activate(self):
collection = curds.playlist.Root.lookup("Collection")

View File

@ -34,7 +34,7 @@ def on_selection_changed(selection):
if len(rows) > 0:
child = model.convert_path_to_child_path(rows[0])
plist = curds.playlist.Root.get_node(child)
playlist.PlistModel.set_playlist(plist)
playlist.model.PlistModel.set_playlist(plist)
Selection.connect("changed", on_selection_changed)

View File

@ -0,0 +1,5 @@
# Copyright 2019 (c) Anna Schumaker
from . import model
Model = model.PlaylistModel
View = model.Treeview

View File

@ -1,5 +1,5 @@
# Copyright 2019 (c) Anna Schumaker.
from . import gtk
from .. import gtk
import curds
from gi.repository import GObject, Gtk

166
rind/playlist/test_model.py Normal file
View File

@ -0,0 +1,166 @@
# Copyright 2019 (c) Anna Schumaker.
from . import model
from .. import gtk
from .. import node
import curds
import os
import unittest
from gi.repository import Gtk, GObject
test_album = os.path.abspath("./trier/Test Library/Test Artist 01/Test Album 1")
class TestPlaylist(unittest.TestCase):
def setUp(self):
curds.reset()
node.reset()
model.PlistModel.set_playlist(curds.playlist.Root.lookup("Collection"))
def test_init(self):
self.assertIsInstance(gtk.Builder.get_object("playlist_treeview"), Gtk.TreeView)
self.assertIsInstance(model.PlistModel, Gtk.TreeModel)
self.assertIsInstance(model.Runtime, Gtk.Label)
self.assertEqual(model.Treeview, gtk.Builder.get_object("playlist_treeview"))
self.assertEqual(model.Treeview.get_model(), model.PlistModel)
self.assertEqual(model.Runtime.get_text(), "")
def test_model_init(self):
plist_model = model.PlaylistModel()
self.assertEqual(plist_model.playlist, curds.playlist.Root.lookup("Collection"))
self.assertTrue( plist_model.playlist.visible)
self.assertEqual(plist_model.get_n_columns(), 9)
self.assertEqual(plist_model.get_flags(), Gtk.TreeModelFlags.LIST_ONLY)
for col in range(plist_model.get_n_columns()):
self.assertEqual(plist_model.get_column_type(col), GObject.GType(str))
def test_model_empty(self):
plist = curds.Playlist("Test Playlist")
plist_model = model.PlistModel
path = Gtk.TreePath(0)
plist_model.set_playlist(plist)
self.assertEqual(plist_model.playlist, plist)
self.assertEqual(len(plist_model), 0)
self.assertRaises(ValueError, plist_model.get_iter, path)
self.assertEqual(plist_model.iter_n_children(None), 0)
self.assertIsNone(plist_model.iter_nth_child(None, 1))
self.assertEqual(model.Runtime.get_text(), "")
def test_model(self):
plist = curds.Playlist("Test Playlist")
plist_model = model.PlaylistModel()
path = Gtk.TreePath(1)
tracks = [ ]
old = plist_model.playlist
self.assertTrue( old.visible)
self.assertFalse(plist.visible)
plist_model.set_playlist(plist)
self.assertEqual(plist_model.playlist, plist)
self.assertTrue(plist.visible)
self.assertTrue(old.visible)
for i in range(1, 11):
track = curds.Track.lookup(os.path.join(test_album, f"{i:02} - Test Track {i:02}.ogg"))
tracks.append(track)
plist.add(track)
self.assertEqual(len(plist_model), i)
while curds.notify.run_queued(): continue
self.assertEqual(model.Runtime.get_text(), plist.runtime())
iter = plist_model.get_iter(path)
self.assertEqual(iter.user_data, 1)
self.assertFalse(plist_model.iter_has_child(iter))
for i in range(2, 10):
iter = plist_model.iter_next(iter)
path = plist_model.get_path(iter)
self.assertEqual(iter.user_data, i)
self.assertEqual(path.get_indices()[0], i)
self.assertIsNone(plist_model.iter_next(iter))
iter = plist_model.iter_nth_child(None, 4)
self.assertEqual(iter.user_data, 4)
self.assertIsNone(plist_model.iter_nth_child(iter, 999))
self.assertEqual(plist_model.get_value(iter, 0), "non-starred")
self.assertEqual(plist_model.get_value(iter, 1), "05")
self.assertEqual(plist_model.get_value(iter, 2), "Test Track 05")
self.assertEqual(plist_model.get_value(iter, 3), "0:05")
self.assertEqual(plist_model.get_value(iter, 4), "Test Artist 01")
self.assertEqual(plist_model.get_value(iter, 5), "Test Album 1")
self.assertEqual(plist_model.get_value(iter, 6), "Disc 1")
self.assertEqual(plist_model.get_value(iter, 7), "1973")
self.assertEqual(plist_model.get_value(iter, 8).title(), "Test Genre 1")
iter.user_data = 99
self.assertEqual(plist_model.get_value(iter, 0), "")
def test_random(self):
plist = curds.Playlist("Test Playlist")
model.PlistModel.set_playlist(plist)
self.assertFalse(plist.random)
self.assertIsInstance(model.RandomButton, Gtk.ToggleButton)
model.RandomButton.set_active(True)
self.assertTrue(plist.random)
model.RandomButton.set_active(False)
self.assertFalse(plist.random)
plist.can_random = False
plist.random = True
model.PlistModel.set_playlist(plist)
self.assertFalse(model.RandomButton.get_sensitive())
self.assertTrue( model.RandomButton.get_active())
def test_loop(self):
plist = curds.Playlist("Test Playlist")
model.PlistModel.set_playlist(plist)
self.assertFalse(plist.loop)
self.assertIsInstance(model.LoopButton, Gtk.ToggleButton)
model.LoopButton.set_active(True)
self.assertTrue(plist.loop)
model.LoopButton.set_active(False)
self.assertFalse(plist.loop)
plist.can_loop = False
plist.loop = True
model.PlistModel.set_playlist(plist)
self.assertFalse(model.LoopButton.get_sensitive())
self.assertTrue( model.LoopButton.get_active())
def test_next(self):
plist_model = model.PlaylistModel()
selection = model.Treeview.get_selection()
model.Treeview.set_model(plist_model)
for i in range(1, 11):
curds.Track.lookup(os.path.join(test_album, f"{i:02} - Test Track {i:02}.ogg"))
gtk.main_loop()
for i in range(10):
curds.playlist.Root.next()
(plist_model, rows) = selection.get_selected_rows()
self.assertEqual(len(rows), 1)
self.assertEqual(rows[0].get_indices(), [ i ])
def test_sort(self):
plist_model = model.PlistModel
plist = plist_model.playlist
plist.sort_order = [ ]
for i, col in enumerate(model.Treeview.get_columns()):
if i == 0:
self.assertFalse(col.get_clickable())
continue
self.assertTrue(col.get_clickable())
col.clicked()
self.assertEqual(plist.sort_order, [ model.cols[i] ])
self.assertEqual(col.get_sort_indicator(), True)
self.assertEqual(col.get_sort_order(), Gtk.SortType.ASCENDING)
col.clicked()
self.assertEqual(plist.sort_order, [ ])
self.assertEqual(col.get_sort_indicator(), False)

View File

@ -1,164 +0,0 @@
# Copyright 2019 (c) Anna Schumaker.
from . import gtk
from . import playlist
import curds
import os
import unittest
from gi.repository import Gtk, GObject
test_album = os.path.abspath("./trier/Test Library/Test Artist 01/Test Album 1")
class TestPlaylist(unittest.TestCase):
def setUp(self):
curds.reset()
playlist.PlistModel.set_playlist(curds.playlist.Root.lookup("Collection"))
def test_init(self):
self.assertIsInstance(gtk.Builder.get_object("playlist_treeview"), Gtk.TreeView)
self.assertIsInstance(playlist.PlistModel, Gtk.TreeModel)
self.assertIsInstance(playlist.Runtime, Gtk.Label)
self.assertEqual(playlist.Treeview, gtk.Builder.get_object("playlist_treeview"))
self.assertEqual(playlist.Treeview.get_model(), playlist.PlistModel)
self.assertEqual(playlist.Runtime.get_text(), "")
def test_model_init(self):
model = playlist.PlaylistModel()
self.assertEqual(model.playlist, curds.playlist.Root.lookup("Collection"))
self.assertTrue( model.playlist.visible)
self.assertEqual(model.get_n_columns(), 9)
self.assertEqual(model.get_flags(), Gtk.TreeModelFlags.LIST_ONLY)
for col in range(model.get_n_columns()):
self.assertEqual(model.get_column_type(col), GObject.GType(str))
def test_model_empty(self):
plist = curds.Playlist("Test Playlist")
model = playlist.PlistModel
path = Gtk.TreePath(0)
model.set_playlist(plist)
self.assertEqual(model.playlist, plist)
self.assertEqual(len(model), 0)
self.assertRaises(ValueError, model.get_iter, path)
self.assertEqual(model.iter_n_children(None), 0)
self.assertIsNone(model.iter_nth_child(None, 1))
self.assertEqual(playlist.Runtime.get_text(), "")
def test_model(self):
plist = curds.Playlist("Test Playlist")
model = playlist.PlaylistModel()
path = Gtk.TreePath(1)
tracks = [ ]
old = model.playlist
self.assertTrue( old.visible)
self.assertFalse(plist.visible)
model.set_playlist(plist)
self.assertEqual(model.playlist, plist)
self.assertTrue(plist.visible)
self.assertTrue(old.visible)
for i in range(1, 11):
track = curds.Track.lookup(os.path.join(test_album, f"{i:02} - Test Track {i:02}.ogg"))
tracks.append(track)
plist.add(track)
self.assertEqual(len(model), i)
while curds.notify.run_queued(): continue
self.assertEqual(playlist.Runtime.get_text(), plist.runtime())
iter = model.get_iter(path)
self.assertEqual(iter.user_data, 1)
self.assertFalse(model.iter_has_child(iter))
for i in range(2, 10):
iter = model.iter_next(iter)
path = model.get_path(iter)
self.assertEqual(iter.user_data, i)
self.assertEqual(path.get_indices()[0], i)
self.assertIsNone(model.iter_next(iter))
iter = model.iter_nth_child(None, 4)
self.assertEqual(iter.user_data, 4)
self.assertIsNone(model.iter_nth_child(iter, 999))
self.assertEqual(model.get_value(iter, 0), "non-starred")
self.assertEqual(model.get_value(iter, 1), "05")
self.assertEqual(model.get_value(iter, 2), "Test Track 05")
self.assertEqual(model.get_value(iter, 3), "0:05")
self.assertEqual(model.get_value(iter, 4), "Test Artist 01")
self.assertEqual(model.get_value(iter, 5), "Test Album 1")
self.assertEqual(model.get_value(iter, 6), "Disc 1")
self.assertEqual(model.get_value(iter, 7), "1973")
self.assertEqual(model.get_value(iter, 8).title(), "Test Genre 1")
iter.user_data = 99
self.assertEqual(model.get_value(iter, 0), "")
def test_random(self):
plist = curds.Playlist("Test Playlist")
playlist.PlistModel.set_playlist(plist)
self.assertFalse(plist.random)
self.assertIsInstance(playlist.RandomButton, Gtk.ToggleButton)
playlist.RandomButton.set_active(True)
self.assertTrue(plist.random)
playlist.RandomButton.set_active(False)
self.assertFalse(plist.random)
plist.can_random = False
plist.random = True
playlist.PlistModel.set_playlist(plist)
self.assertFalse(playlist.RandomButton.get_sensitive())
self.assertTrue( playlist.RandomButton.get_active())
def test_loop(self):
plist = curds.Playlist("Test Playlist")
playlist.PlistModel.set_playlist(plist)
self.assertFalse(plist.loop)
self.assertIsInstance(playlist.LoopButton, Gtk.ToggleButton)
playlist.LoopButton.set_active(True)
self.assertTrue(plist.loop)
playlist.LoopButton.set_active(False)
self.assertFalse(plist.loop)
plist.can_loop = False
plist.loop = True
playlist.PlistModel.set_playlist(plist)
self.assertFalse(playlist.LoopButton.get_sensitive())
self.assertTrue( playlist.LoopButton.get_active())
def test_next(self):
model = playlist.PlaylistModel()
selection = playlist.Treeview.get_selection()
playlist.Treeview.set_model(model)
for i in range(1, 11):
curds.Track.lookup(os.path.join(test_album, f"{i:02} - Test Track {i:02}.ogg"))
gtk.main_loop()
for i in range(10):
curds.playlist.Root.next()
(model, rows) = selection.get_selected_rows()
self.assertEqual(len(rows), 1)
self.assertEqual(rows[0].get_indices(), [ i ])
def test_sort(self):
model = playlist.PlistModel
plist = model.playlist
plist.sort_order = [ ]
for i, col in enumerate(playlist.Treeview.get_columns()):
if i == 0:
self.assertFalse(col.get_clickable())
continue
self.assertTrue(col.get_clickable())
col.clicked()
self.assertEqual(plist.sort_order, [ playlist.cols[i] ])
self.assertEqual(col.get_sort_indicator(), True)
self.assertEqual(col.get_sort_order(), Gtk.SortType.ASCENDING)
col.clicked()
self.assertEqual(plist.sort_order, [ ])
self.assertEqual(col.get_sort_indicator(), False)

View File

@ -21,12 +21,13 @@ class TestEmmental(unittest.TestCase):
def test_import_rind(self):
self.assertEqual(rind.Application, rind.gtk.Application)
self.assertEqual(rind.audio.Playbin, rind.audio.playbin.Playbin)
self.assertEqual(rind.PlistModel, rind.playlist.PlistModel)
self.assertEqual(rind.PlTreeview, rind.playlist.Treeview)
self.assertEqual(rind.node.Model, rind.node.model.NodeTreeModel)
self.assertEqual(rind.node.View, rind.node.model.Treeview)
self.assertEqual(rind.playlist.Model, rind.playlist.model.PlaylistModel)
self.assertEqual(rind.playlist.View, rind.playlist.model.Treeview)
def test_reset_stop_curds(self):
path = os.path.join("trier", "Test Album", "01 - Test Track.ogg")
track = curds.Track.lookup(path)