audio: Give Players a TrackChanged publisher
The playlist model can use this to make the current track bold Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
500d0757d1
commit
b1ece1cd1d
|
@ -3,6 +3,7 @@ from . import artwork
|
|||
from . import controls
|
||||
from . import nowplaying
|
||||
from . import seeker
|
||||
from lib import publisher
|
||||
from lib import settings
|
||||
from gi.repository import Gst, GLib
|
||||
import trackdb
|
||||
|
@ -34,8 +35,9 @@ class Player:
|
|||
self.Controls.sizegroup.add_widget(self.Seeker.scale)
|
||||
GLib.timeout_add(250, self.update_progress)
|
||||
|
||||
track = trackdb.Tracks[settings.get_int("audio.trackid")]
|
||||
self.load_set_state(track, Gst.State.PAUSED)
|
||||
self.TrackChanged = publisher.Publisher()
|
||||
self.track = trackdb.Tracks[settings.get_int("audio.trackid")]
|
||||
self.load_set_state(self.track, Gst.State.PAUSED)
|
||||
if self.track:
|
||||
self.track.add_to_playlist("Previous")
|
||||
self.volume_changed()
|
||||
|
@ -51,11 +53,13 @@ class Player:
|
|||
return ret
|
||||
|
||||
def load_track(self, track):
|
||||
prev = self.track
|
||||
self.track = track
|
||||
if track is not None:
|
||||
settings.set("audio.trackid", track.trackid)
|
||||
uri = track.filepath().absolute().as_uri()
|
||||
self.playbin.set_property("uri", uri)
|
||||
self.TrackChanged.publish(prev, self.track)
|
||||
|
||||
def load_set_state(self, track, state):
|
||||
self.playbin.set_state(Gst.State.READY)
|
||||
|
|
|
@ -4,6 +4,7 @@ from . import controls
|
|||
from . import nowplaying
|
||||
from . import player
|
||||
from . import seeker
|
||||
from lib import publisher
|
||||
from lib import settings
|
||||
from gi.repository import Gst
|
||||
import pathlib
|
||||
|
@ -21,6 +22,7 @@ class TestPlayer(unittest.TestCase):
|
|||
lib.scan().join()
|
||||
|
||||
def setUp(self):
|
||||
self.changed = None
|
||||
settings.reset()
|
||||
self.library = trackdb.Library.store[test_album]
|
||||
self.track = [ t for t in self.library.tracks if t.tracknumber == 1 ][0]
|
||||
|
@ -28,6 +30,9 @@ class TestPlayer(unittest.TestCase):
|
|||
def tearDownClass():
|
||||
trackdb.reset()
|
||||
|
||||
def on_track_changed(self, prev, new):
|
||||
self.changed = (prev, new)
|
||||
|
||||
def test_player_init(self):
|
||||
play = player.Player()
|
||||
self.assertIsInstance(play.video, Gst.Element)
|
||||
|
@ -37,6 +42,7 @@ class TestPlayer(unittest.TestCase):
|
|||
self.assertIsInstance(play.NowPlaying, nowplaying.NowPlaying)
|
||||
self.assertIsInstance(play.Artwork, artwork.Artwork)
|
||||
self.assertIsInstance(play.Seeker, seeker.Seeker)
|
||||
self.assertIsInstance(play.TrackChanged, publisher.Publisher)
|
||||
self.assertIsNone(play.track)
|
||||
|
||||
self.assertEqual(play.playbin.get_property("video-sink"), play.video)
|
||||
|
@ -45,6 +51,7 @@ class TestPlayer(unittest.TestCase):
|
|||
def test_player_load_track(self):
|
||||
play = player.Player()
|
||||
uri = test_track.absolute().as_uri()
|
||||
play.TrackChanged.register(self.on_track_changed)
|
||||
|
||||
self.assertEqual(play.playbin.get_property("uri"), None)
|
||||
|
||||
|
@ -53,6 +60,7 @@ class TestPlayer(unittest.TestCase):
|
|||
self.assertEqual(play.track, self.track)
|
||||
self.assertEqual(settings.get_int("audio.trackid"), self.track.trackid)
|
||||
self.assertEqual(play.get_state(), Gst.State.READY)
|
||||
self.assertEqual(self.changed, (None, self.track) )
|
||||
self.assertFalse(play.play_track(self.track))
|
||||
|
||||
trackdb.tags.User["Previous"].tracks.clear()
|
||||
|
@ -78,12 +86,16 @@ class TestPlayer(unittest.TestCase):
|
|||
|
||||
def test_player_next_previous(self):
|
||||
play = player.Player()
|
||||
play.TrackChanged.register(self.on_track_changed)
|
||||
|
||||
play.next()
|
||||
self.assertEqual(play.track.trackid, 0)
|
||||
self.assertEqual(self.changed, (None, trackdb.Tracks[0]) )
|
||||
|
||||
play.next()
|
||||
self.assertEqual(play.track.trackid, 1)
|
||||
self.assertEqual(self.changed, (trackdb.Tracks[0], trackdb.Tracks[1]) )
|
||||
|
||||
play.previous()
|
||||
self.assertEqual(play.track.trackid, 0)
|
||||
self.assertEqual(self.changed, (trackdb.Tracks[1], trackdb.Tracks[0]) )
|
||||
|
|
Loading…
Reference in New Issue