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:
Anna Schumaker 2021-07-05 12:26:09 -04:00
parent e21eca37ae
commit 9dd017dc43
2 changed files with 17 additions and 4 deletions

View File

@ -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)

View File

@ -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))