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:
parent
c8de75e3d7
commit
2f1e8b6965
|
@ -6,5 +6,3 @@ from . import node
|
|||
from . import playlist
|
||||
|
||||
Application = gtk.Application
|
||||
PlistModel = playlist.PlistModel
|
||||
PlTreeview = playlist.Treeview
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
# Copyright 2019 (c) Anna Schumaker
|
||||
from . import model
|
||||
|
||||
Model = model.PlaylistModel
|
||||
View = model.Treeview
|
|
@ -1,5 +1,5 @@
|
|||
# Copyright 2019 (c) Anna Schumaker.
|
||||
from . import gtk
|
||||
from .. import gtk
|
||||
import curds
|
||||
from gi.repository import GObject, Gtk
|
||||
|
|
@ -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)
|
|
@ -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)
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue