audio: Create a new Selector object
This is used to query for the next or previous track. The Playlist layer will implement our playlist stack as one of these objects, and set it on the Player Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
e38ce61cf7
commit
6fc0fb6b26
|
@ -4,12 +4,14 @@ import tagdb
|
|||
from gi.repository import GObject
|
||||
from . import bass
|
||||
from . import scale
|
||||
from . import selector
|
||||
|
||||
|
||||
class Player(bass.BassPlayer):
|
||||
def __init__(self):
|
||||
bass.BassPlayer.__init__(self)
|
||||
self.Autopause = scale.AutoPauseScale()
|
||||
self.Selector = selector.TagdbSelector()
|
||||
|
||||
self.emit("track-changed", None,
|
||||
tagdb.Tracks[lib.settings.get_int("audio.trackid")])
|
||||
|
@ -19,7 +21,7 @@ class Player(bass.BassPlayer):
|
|||
|
||||
def do_about_to_finish(self):
|
||||
if self.Autopause.get_value() != 0:
|
||||
(track, cont) = tagdb.Stack.next()
|
||||
track = self.Selector.next()
|
||||
self.emit("track-changed", self.track, track)
|
||||
self.Autopause.decrement()
|
||||
|
||||
|
@ -32,15 +34,14 @@ class Player(bass.BassPlayer):
|
|||
self.playing = (self.Autopause.decrement() != -1)
|
||||
|
||||
def next(self):
|
||||
(track, cont) = tagdb.Stack.next()
|
||||
self.load_track(track)
|
||||
self.load_track(self.Selector.next())
|
||||
|
||||
def play(self): self.playing = True
|
||||
def pause(self): self.playing = False
|
||||
def playpause(self): self.playing = not self.playing
|
||||
|
||||
def previous(self):
|
||||
self.load_track(tagdb.Stack.previous())
|
||||
self.load_track(self.Selector.previous())
|
||||
|
||||
@GObject.Signal(arg_types=(tagdb.track.Track, tagdb.track.Track))
|
||||
def track_changed(self, prev, new):
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
# Copyright 2021 (c) Anna Schumaker.
|
||||
import tagdb
|
||||
from gi.repository import GObject
|
||||
|
||||
class Selector(GObject.GObject):
|
||||
def __init__(self): GObject.GObject.__init__(self)
|
||||
def next(self): return None
|
||||
def previous(self): return None
|
||||
|
||||
|
||||
class TagdbSelector(Selector):
|
||||
def next(self): return tagdb.Stack.next()[0]
|
||||
def previous(self): return tagdb.Stack.previous()
|
|
@ -8,6 +8,7 @@ from gi.repository import Gst
|
|||
from . import bass
|
||||
from . import player
|
||||
from . import scale
|
||||
from . import selector
|
||||
|
||||
main_context = GLib.main_context_default()
|
||||
test_album = pathlib.Path("./data/Test Album/")
|
||||
|
@ -15,6 +16,24 @@ test_track = test_album / "01 - Test Track.ogg"
|
|||
test_uri = test_track.absolute().as_uri()
|
||||
|
||||
|
||||
class FakeSelector(selector.Selector):
|
||||
def __init__(self, library):
|
||||
selector.Selector.__init__(self)
|
||||
t1 = [ t for t in library.tracks if t.tracknumber == 1 ][0]
|
||||
t2 = [ t for t in library.tracks if t.tracknumber == 11 ][0]
|
||||
self.tracks = [ t1, t2 ]
|
||||
self.cur = -1
|
||||
|
||||
def next(self):
|
||||
self.cur += 1
|
||||
return self.tracks[self.cur]
|
||||
|
||||
def previous(self):
|
||||
self.cur -= 1
|
||||
return self.tracks[self.cur]
|
||||
|
||||
|
||||
|
||||
class TestPlayer(unittest.TestCase):
|
||||
def setUpClass():
|
||||
tagdb.reset()
|
||||
|
@ -38,6 +57,7 @@ class TestPlayer(unittest.TestCase):
|
|||
self.assertIsInstance(play, bass.BassPlayer)
|
||||
self.assertIsInstance(play.bus, Gst.Bus)
|
||||
self.assertIsInstance(play.Autopause, scale.AutoPauseScale)
|
||||
self.assertIsInstance(play.Selector, selector.Selector)
|
||||
self.assertIsNone(play.track)
|
||||
|
||||
def test_player_load_track(self):
|
||||
|
@ -79,17 +99,19 @@ class TestPlayer(unittest.TestCase):
|
|||
self.assertFalse(play.playing)
|
||||
|
||||
def test_player_next_previous(self):
|
||||
select = FakeSelector(self.library)
|
||||
play = player.Player()
|
||||
play.connect("track-changed", self.on_track_changed)
|
||||
|
||||
play.next()
|
||||
self.assertEqual(play.track.trackid, 0)
|
||||
self.assertEqual(self.changed, (None, tagdb.Tracks[0]) )
|
||||
play.Selector = select
|
||||
|
||||
play.next()
|
||||
self.assertEqual(play.track.trackid, 1)
|
||||
self.assertEqual(self.changed, (tagdb.Tracks[0], tagdb.Tracks[1]) )
|
||||
self.assertEqual(self.changed, (None, tagdb.Tracks[1]) )
|
||||
|
||||
play.next()
|
||||
self.assertEqual(play.track.trackid, 11)
|
||||
self.assertEqual(self.changed, (tagdb.Tracks[1], tagdb.Tracks[11]) )
|
||||
|
||||
play.previous()
|
||||
self.assertEqual(play.track.trackid, 0)
|
||||
self.assertEqual(self.changed, (tagdb.Tracks[1], tagdb.Tracks[0]) )
|
||||
self.assertEqual(play.track.trackid, 1)
|
||||
self.assertEqual(self.changed, (tagdb.Tracks[11], tagdb.Tracks[1]) )
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
# Copyright 2021 (c) Anna Schumaker.
|
||||
import unittest
|
||||
from gi.repository import GObject
|
||||
from . import selector
|
||||
|
||||
class TestAudioSelector(unittest.TestCase):
|
||||
def test_audio_selector_init(self):
|
||||
select = selector.Selector()
|
||||
self.assertIsInstance(select, GObject.GObject)
|
||||
self.assertIsNone(select.next())
|
||||
self.assertIsNone(select.previous())
|
Loading…
Reference in New Issue