sidebar: Create a FilterUserModel list model

With a custom filter that only displays playlists that users can add
tracks to directly.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-11-04 15:53:42 -04:00
parent 43ec165a56
commit b74f948acb
2 changed files with 30 additions and 0 deletions

View File

@ -1,4 +1,5 @@
# Copyright 2021 (c) Anna Schumaker.
import db
import lib
from gi.repository import GObject
from gi.repository import Gio
@ -50,3 +51,15 @@ class FilterTableModel(Gtk.FilterListModel):
def get_table(self):
return self.get_model().get_model()
class UserFilter(Gtk.Filter):
def do_match(self, item):
return item.name not in [ "Collection", "New Tracks", "Previous" ]
class FilterUserModel(Gtk.FilterListModel):
def __init__(self):
Gtk.FilterListModel.__init__(self)
self.set_model(db.user.Table)
self.set_filter(UserFilter())

View File

@ -76,3 +76,20 @@ class TestFilterTableModel(unittest.TestCase):
self.assertTrue(model.TableFilter.do_check(artist))
model.TableFilter.set_pattern("Disc")
self.assertFalse(model.TableFilter.do_check(artist))
class TestFilterUserModel(unittest.TestCase):
def test_init(self):
filter = model.FilterUserModel()
self.assertIsInstance(filter, Gtk.FilterListModel)
self.assertIsInstance(filter.get_filter(), model.UserFilter)
self.assertEqual(filter.get_model(), db.user.Table)
def test_filter(self):
filter = model.UserFilter()
self.assertFalse(filter.do_match(db.user.Table.find("Collection")))
self.assertTrue(filter.do_match(db.user.Table.find("Favorites")))
self.assertFalse(filter.do_match(db.user.Table.find("New Tracks")))
self.assertFalse(filter.do_match(db.user.Table.find("Previous")))
self.assertTrue(filter.do_match(db.user.Table.find("Queued Tracks")))
self.assertTrue(filter.do_match(db.user.Table.find("Test Playlist")))