playlist: Use a bus for TrackAdded and TrackRemoved
This helps keep us from sending the items_changed() signal too soon, before the track finishes initializing. Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
e21eca37ae
commit
9dd017dc43
|
@ -1,9 +1,11 @@
|
|||
# Copyright 2021 (c) Anna Schumaker.
|
||||
from lib import bus
|
||||
from gi.repository import GObject, Gio
|
||||
|
||||
class TagModel(GObject.GObject, Gio.ListModel):
|
||||
def __init__(self, tag=None):
|
||||
GObject.GObject.__init__(self)
|
||||
self.bus = bus.Bus(1)
|
||||
self.items = [ ]
|
||||
self.__set_tag__(tag)
|
||||
|
||||
|
@ -34,13 +36,20 @@ class TagModel(GObject.GObject, Gio.ListModel):
|
|||
return self.items[n]
|
||||
|
||||
def switch_tag(self, tag):
|
||||
self.items_changed(0, self.__unset_tag__(),
|
||||
self.__set_tag__(tag))
|
||||
removed = self.__unset_tag__()
|
||||
added = self.__set_tag__(tag)
|
||||
self.items_changed(0, removed, added)
|
||||
|
||||
def track_added(self, tag, track, pos):
|
||||
def do_track_added(self, tag, track, pos):
|
||||
self.items.insert(pos, track)
|
||||
self.items_changed(pos, 0, 1)
|
||||
|
||||
def track_removed(self, tag, track, pos):
|
||||
def track_added(self, tag, track, pos):
|
||||
self.bus.board(self.do_track_added, tag, track, pos)
|
||||
|
||||
def do_track_removed(self, tag, track, pos):
|
||||
self.items.remove(track)
|
||||
return self.items_changed(pos, 1, 0)
|
||||
|
||||
def track_removed(self, tag, track, pos):
|
||||
self.bus.board(self.do_track_removed, tag, track, pos)
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
# Copyright 2021 (c) Anna Schumaker.
|
||||
from . import model
|
||||
from lib import bus
|
||||
from lib import fake
|
||||
from lib import tag
|
||||
from gi.repository import GObject, Gio
|
||||
|
@ -19,6 +20,7 @@ class TestTagModel(unittest.TestCase):
|
|||
|
||||
self.assertIsInstance(m, GObject.Object)
|
||||
self.assertIsInstance(m, Gio.ListModel)
|
||||
self.assertIsInstance(m.bus, bus.Bus)
|
||||
|
||||
self.assertEqual(m.tag, t)
|
||||
self.assertEqual(m.items, [ ])
|
||||
|
@ -33,11 +35,13 @@ class TestTagModel(unittest.TestCase):
|
|||
track = fake.Track(1)
|
||||
|
||||
t.add_track(track)
|
||||
m.bus.complete()
|
||||
self.assertEqual(m.items, [ track ])
|
||||
self.assertEqual(m.get_n_items(), 1)
|
||||
self.assertEqual(m.get_item(0), fake.Track(1))
|
||||
|
||||
t.remove_track(track)
|
||||
m.bus.complete()
|
||||
self.assertEqual(m.items, [ ])
|
||||
self.assertEqual(m.get_n_items(), 0)
|
||||
self.assertIsNone(m.get_item(0))
|
||||
|
|
Loading…
Reference in New Issue