diff --git a/audio/player.py b/audio/player.py index ad4a2a5..ba54658 100644 --- a/audio/player.py +++ b/audio/player.py @@ -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): diff --git a/audio/selector.py b/audio/selector.py new file mode 100644 index 0000000..919a4f5 --- /dev/null +++ b/audio/selector.py @@ -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() diff --git a/audio/test_player.py b/audio/test_player.py index 3b91bd2..c10e87a 100644 --- a/audio/test_player.py +++ b/audio/test_player.py @@ -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]) ) diff --git a/audio/test_selector.py b/audio/test_selector.py new file mode 100644 index 0000000..3f77e99 --- /dev/null +++ b/audio/test_selector.py @@ -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())