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:
parent
e646b12f65
commit
8d901afae7
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue