lib: Give Tags a next() function
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
08a055bbe2
commit
6d2a817a9b
23
lib/tag.py
23
lib/tag.py
|
@ -6,6 +6,7 @@ class Tag:
|
|||
def __init__(self, name, sort=None):
|
||||
self.name = name
|
||||
self.sort = sort.lower() if sort else str(name).lower()
|
||||
self.current = -1
|
||||
self.tracks = [ ]
|
||||
self.widgets = None
|
||||
self.lock = threading.Lock()
|
||||
|
@ -14,9 +15,10 @@ class Tag:
|
|||
|
||||
def __getstate__(self):
|
||||
with self.lock:
|
||||
return { "name" : self.name,
|
||||
"sort" : self.sort,
|
||||
"tracks" : [ t.trackid for t in self.tracks ] }
|
||||
return { "name" : self.name,
|
||||
"sort" : self.sort,
|
||||
"current" : self.current,
|
||||
"tracks" : [ t.trackid for t in self.tracks ] }
|
||||
|
||||
def __len__(self):
|
||||
with self.lock:
|
||||
|
@ -32,6 +34,7 @@ class Tag:
|
|||
def __setstate__(self, state):
|
||||
self.name = state["name"]
|
||||
self.sort = state["sort"]
|
||||
self.current = state["current"]
|
||||
self.tracks = state["tracks"]
|
||||
self.widgets = None
|
||||
self.lock = threading.Lock()
|
||||
|
@ -57,6 +60,13 @@ class Tag:
|
|||
except Exception as e:
|
||||
pass
|
||||
|
||||
def next(self):
|
||||
with self.lock:
|
||||
self.current += 1
|
||||
if self.current < len(self.tracks):
|
||||
return self.tracks[self.current]
|
||||
return None
|
||||
|
||||
def remove_track(self, track):
|
||||
with self.lock:
|
||||
self.tracks.remove(track)
|
||||
|
@ -70,9 +80,10 @@ class SuperTag(Tag):
|
|||
|
||||
def __getstate__(self):
|
||||
with self.lock:
|
||||
return { "name" : self.name,
|
||||
"sort" : self.sort,
|
||||
"tracks" : [ t.trackid for t in self.tracks ],
|
||||
return { "name" : self.name,
|
||||
"sort" : self.sort,
|
||||
"current" : self.current,
|
||||
"tracks" : [ t.trackid for t in self.tracks ],
|
||||
"parent" : self.parent }
|
||||
|
||||
def __lt__(self, rhs):
|
||||
|
|
|
@ -20,6 +20,7 @@ class TestTag(unittest.TestCase):
|
|||
t = tag.Tag("test")
|
||||
self.assertEqual(t.name, "test")
|
||||
self.assertEqual(t.sort, "test")
|
||||
self.assertEqual(t.current, -1)
|
||||
self.assertEqual(t.tracks, [ ])
|
||||
self.assertIsNone(t.widgets)
|
||||
self.assertIsInstance(t.lock, type(threading.Lock()))
|
||||
|
@ -59,16 +60,21 @@ class TestTag(unittest.TestCase):
|
|||
t.tracks = tracks
|
||||
|
||||
state = t.__getstate__()
|
||||
self.assertEqual(set(state.keys()), set([ "name", "sort", "tracks" ]))
|
||||
self.assertEqual(set(state.keys()),
|
||||
set([ "name", "sort", "current", "tracks" ]))
|
||||
self.assertEqual(state["name"], "test")
|
||||
self.assertEqual(state["sort"], "test")
|
||||
self.assertEqual(state["current"], -1)
|
||||
self.assertEqual(state["tracks"], [ 0, 1, 2, 3, 4 ])
|
||||
|
||||
state["sort"] = "sort"
|
||||
state["current"] = 42
|
||||
|
||||
t.__dict__.clear()
|
||||
t.__setstate__(state)
|
||||
self.assertEqual(t.name, "test")
|
||||
self.assertEqual(t.sort, "sort")
|
||||
self.assertEqual(t.current, 42)
|
||||
self.assertEqual(t.tracks, [ 0, 1, 2, 3, 4 ])
|
||||
self.assertEqual(t.widgets, None)
|
||||
self.assertIsInstance(t.lock, type(threading.Lock()))
|
||||
|
@ -104,6 +110,22 @@ class TestTag(unittest.TestCase):
|
|||
self.assertEqual(t.tracks, [ ])
|
||||
self.assertEqual(self.changed, (t, 2))
|
||||
|
||||
def test_tag_next(self):
|
||||
t = tag.Tag("test")
|
||||
t.tracks = [ 1, 2, 3 ]
|
||||
|
||||
self.assertEqual(t.next(), 1)
|
||||
self.assertEqual(t.current, 0)
|
||||
|
||||
self.assertEqual(t.next(), 2)
|
||||
self.assertEqual(t.current, 1)
|
||||
|
||||
self.assertEqual(t.next(), 3)
|
||||
self.assertEqual(t.current, 2)
|
||||
|
||||
self.assertIsNone(t.next())
|
||||
self.assertEqual(t.current, 3)
|
||||
|
||||
|
||||
class TestSuperTag(unittest.TestCase):
|
||||
def test_super_tag(self):
|
||||
|
@ -117,6 +139,7 @@ class TestSuperTag(unittest.TestCase):
|
|||
state = st.__getstate__()
|
||||
self.assertEqual(state["name"], "test")
|
||||
self.assertEqual(state["sort"], "sort")
|
||||
self.assertEqual(state["current"], -1)
|
||||
self.assertEqual(state["tracks"], [ 0, 1, 2, 3, 4 ])
|
||||
self.assertEqual(state["parent"], parent)
|
||||
|
||||
|
|
Loading…
Reference in New Issue