lib: Create a new Filter class
The intention is to have some common code that can be shared by both the sidebar and the tracklist so they don't need to re-implement the same things. Implements: #4 (Create common filtering widgets) Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
64a6fdca2d
commit
aae99218e0
|
@ -5,6 +5,7 @@ gi.require_version("Gst", "1.0")
|
|||
|
||||
from . import bus
|
||||
from . import data
|
||||
from . import filter
|
||||
from . import publisher
|
||||
from . import settings
|
||||
from . import tag
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
# Copyright 2021 (c) Anna Schumaker.
|
||||
import re
|
||||
from gi.repository import Gtk
|
||||
|
||||
class Regex(Gtk.Filter):
|
||||
def __init__(self):
|
||||
Gtk.Filter.__init__(self)
|
||||
self.pattern = re.compile("")
|
||||
|
||||
def do_match(self, item):
|
||||
raise NotImplementedError
|
||||
|
||||
def search(self, text):
|
||||
return self.pattern.search(text) != None
|
||||
|
||||
def set_pattern(self, pattern):
|
||||
change = Gtk.FilterChange.DIFFERENT
|
||||
if pattern in self.pattern.pattern:
|
||||
change = Gtk.FilterChange.LESS_STRICT
|
||||
elif self.pattern.pattern in pattern:
|
||||
change = Gtk.FilterChange.MORE_STRICT
|
||||
|
||||
self.pattern = re.compile(pattern, re.I)
|
||||
self.changed(change)
|
|
@ -0,0 +1,40 @@
|
|||
# Copyright 2021 (c) Anna Schumaker.
|
||||
import lib
|
||||
import re
|
||||
import unittest
|
||||
from gi.repository import Gtk
|
||||
|
||||
class TestRegex(unittest.TestCase):
|
||||
def changed(self, filter, how):
|
||||
self.how = how
|
||||
|
||||
def test_init(self):
|
||||
filter = lib.filter.Regex()
|
||||
self.assertIsInstance(filter, Gtk.Filter)
|
||||
self.assertIsInstance(filter.pattern, re.Pattern)
|
||||
self.assertEqual(filter.pattern.pattern, "")
|
||||
with self.assertRaises(NotImplementedError):
|
||||
filter.do_match(None)
|
||||
|
||||
def test_set_pattern(self):
|
||||
filter = lib.filter.Regex()
|
||||
filter.connect("changed", self.changed)
|
||||
|
||||
filter.set_pattern("abc")
|
||||
self.assertEqual(filter.pattern.pattern, "abc")
|
||||
self.assertEqual(self.how, Gtk.FilterChange.MORE_STRICT)
|
||||
|
||||
filter.set_pattern("ab")
|
||||
self.assertEqual(filter.pattern.pattern, "ab")
|
||||
self.assertEqual(self.how, Gtk.FilterChange.LESS_STRICT)
|
||||
|
||||
filter.set_pattern("cd")
|
||||
self.assertEqual(self.how, Gtk.FilterChange.DIFFERENT)
|
||||
self.assertEqual(filter.pattern.pattern, "cd")
|
||||
|
||||
def test_search(self):
|
||||
filter = lib.filter.Regex()
|
||||
filter.set_pattern("ab")
|
||||
|
||||
self.assertTrue(filter.search("abc"))
|
||||
self.assertFalse(filter.search("cde"))
|
Loading…
Reference in New Issue