playlist: Create a DisabledOptionsModel

And a DisabledOptionsFilter for filtering out options that have been
enabled on the playlist.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-11-07 21:41:10 -05:00
parent e646b12f65
commit 8d901afae7
2 changed files with 58 additions and 0 deletions

View File

@ -148,6 +148,34 @@ class SortOptionsModel(Gtk.StringList):
self.append("tracks.lastplayed ASC")
class DisabledOptionsFilter(Gtk.Filter):
def __init__(self):
Gtk.Filter.__init__(self)
self.playlist = None
def changed(self):
super().changed(Gtk.FilterChange.DIFFERENT)
def do_match(self, item):
if self.playlist == None: return True
field = item.get_string().split()[0]
return field not in [ f.split()[0] for f in self.playlist.sort ]
def set_playlist(self, plist):
self.playlist = plist
self.changed()
class DisabledOptionsModel(Gtk.FilterListModel):
def __init__(self):
Gtk.FilterListModel.__init__(self)
self.set_model(SortOptionsModel())
self.set_filter(DisabledOptionsFilter())
def set_playlist(self, plist):
self.get_filter().set_playlist(plist)
class TagModel(GObject.GObject, Gio.ListModel):
def __init__(self, tag=None):
GObject.GObject.__init__(self)

View File

@ -280,6 +280,36 @@ class TestSortOptionsModel(unittest.TestCase):
self.assertEqual(sort.get_item(8).get_string(), "tracks.lastplayed ASC")
class TestDisabledOptionsModel(unittest.TestCase):
def setUp(self):
db.reset()
def test_init(self):
collection = db.user.Table.find("Collection")
filter = model.DisabledOptionsModel()
self.assertIsInstance(filter, Gtk.FilterListModel)
self.assertIsInstance(filter.get_model(), model.SortOptionsModel)
self.assertIsInstance(filter.get_filter(), model.DisabledOptionsFilter)
self.assertIsNone(filter.get_filter().playlist)
filter.set_playlist(collection)
self.assertEqual(filter.get_filter().playlist, collection)
def test_filter(self):
collection = db.user.Table.find("Collection")
filter = model.DisabledOptionsFilter()
filter.set_playlist(collection)
self.assertFalse(filter.do_match(Gtk.StringObject.new("tracks.number ASC")))
self.assertTrue( filter.do_match(Gtk.StringObject.new("tracks.title DESC")))
self.assertTrue( filter.do_match(Gtk.StringObject.new("tracks.length ASC")))
self.assertFalse(filter.do_match(Gtk.StringObject.new("artists.sort DESC")))
self.assertFalse(filter.do_match(Gtk.StringObject.new("albums.sort ASC")))
self.assertTrue( filter.do_match(Gtk.StringObject.new("discs.subtitle DESC")))
self.assertFalse(filter.do_match(Gtk.StringObject.new("albums.release ASC")))
self.assertTrue( filter.do_match(Gtk.StringObject.new("tracks.playcount DESC")))
self.assertTrue( filter.do_match(Gtk.StringObject.new("tracks.lastplayed ASC")))
class TestTagModel(unittest.TestCase):
def setUp(self):
self.changed = (None, None, None)