audio: Save and restore the current track through the settings module

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-07-05 17:46:12 -04:00
parent 0fde1f58e2
commit d29f4c1b47
2 changed files with 20 additions and 4 deletions

View File

@ -1,4 +1,5 @@
# Copyright 2021 (c) Anna Schumaker.
from lib import settings
from gi.repository import Gst
import trackdb
@ -11,7 +12,10 @@ class Player:
self.bus = self.playbin.get_bus()
self.bus.add_signal_watch()
self.track = None
track = trackdb.Tracks[settings.get_int("audio.trackid")]
self.load_set_state(track, Gst.State.PAUSED)
if self.track:
self.track.add_to_playlist("Previous")
def get_state(self):
(ret, state, pending) = self.playbin.get_state(Gst.CLOCK_TIME_NONE)
@ -22,13 +26,15 @@ class Player:
def load_track(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)
def load_set_state(self, track, state):
self.playbin.set_state(Gst.State.READY)
self.load_track(track)
self.playbin.set_state(state)
if track is not None:
self.playbin.set_state(state)
def next(self, *args):
(track, cont) = trackdb.Stack.next()

View File

@ -1,5 +1,6 @@
# Copyright 2021 (c) Anna Schumaker.
from . import player
from lib import settings
from gi.repository import Gst
import pathlib
import trackdb
@ -16,6 +17,7 @@ class TestPlayer(unittest.TestCase):
lib.scan().join()
def setUp(self):
settings.reset()
self.library = trackdb.Library.store[test_album]
self.track = [ t for t in self.library.tracks if t.tracknumber == 1 ][0]
@ -36,17 +38,25 @@ class TestPlayer(unittest.TestCase):
uri = test_track.absolute().as_uri()
self.assertEqual(play.playbin.get_property("uri"), None)
play.load_track(self.track)
self.assertEqual(play.playbin.get_property("uri"), uri)
self.assertEqual(play.get_state(), Gst.State.NULL)
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.assertFalse(play.play_track(self.track))
trackdb.tags.User["Previous"].tracks.clear()
play2 = player.Player()
self.assertEqual(play2.track, self.track)
self.assertIn(self.track, trackdb.tags.User["Previous"].tracks)
def test_player_play_pause(self):
play = player.Player()
play.load_track(self.track)
self.assertEqual(play.track, self.track)
self.assertEqual(play.get_state(), Gst.State.NULL)
self.assertEqual(play.get_state(), Gst.State.READY)
play.pause()
self.assertEqual(play.get_state(), Gst.State.PAUSED)