rind: Fix up automatically picking the next track

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2019-03-28 14:14:16 -04:00
parent 071c356dbc
commit ce4011c069
2 changed files with 31 additions and 10 deletions

View File

@ -21,8 +21,9 @@ Title = gtk.Builder.get_object("title")
class EmmentalAudio:
def __init__(self):
self.playbin = Gst.ElementFactory.make("playbin")
self.bus = self.playbin.get_bus()
self.playbin = Gst.ElementFactory.make("playbin")
self.bus = self.playbin.get_bus()
self.have_next = False
self.bus.add_signal_watch()
@ -41,6 +42,7 @@ class EmmentalAudio:
track = curds.PlaylistManager.next()
if track:
self.playbin.set_property("uri", f"file://{track.path}")
self.have_next = True
def disconnect(self):
self.playbin.disconnect(self.finish_cb)
@ -64,7 +66,7 @@ class EmmentalAudio:
self.playbin.set_state(Gst.State.PLAYING)
def next(self, *args):
if self.playbin.get_property("uri") == None:
if self.have_next == False:
self.load(curds.PlaylistManager.next())
else:
self.load(curds.PlaylistManager.track)
@ -73,9 +75,12 @@ class EmmentalAudio:
if message.type == Gst.MessageType.ASYNC_DONE:
state = message.src.get_state(Gst.Format.TIME)
self.state_changed(message.src, state[1])
if message.type == Gst.MessageType.STATE_CHANGED:
elif message.type == Gst.MessageType.STATE_CHANGED:
(old, new, pending) = message.parse_state_changed()
self.state_changed(message.src, new)
elif message.type == Gst.MessageType.STREAM_START:
self.have_next = False
curds.notify.notify("stream-start")
elif message.type == Gst.MessageType.TAG:
taglist = message.parse_tag()
for i in range(taglist.n_tags()):

View File

@ -13,9 +13,11 @@ class TestGst(unittest.TestCase):
def setUp(self):
curds.reset()
self.audio = gst.EmmentalAudio()
self.state = None
self.audio = gst.EmmentalAudio()
self.state = None
self.stream = False
curds.notify.register("state-changed", self.on_state_changed)
curds.notify.register("stream-start", self.on_stream_start)
def setUpClass():
gst.Audio.disconnect()
@ -42,6 +44,9 @@ class TestGst(unittest.TestCase):
def on_state_changed(self, state):
self.state = state
def on_stream_start(self):
self.stream = True
def test_gst_init(self):
self.assertIsInstance(self.audio.playbin, Gst.Element)
self.assertIsInstance(self.audio.bus, Gst.Bus)
@ -115,14 +120,17 @@ class TestGst(unittest.TestCase):
curds.PlaylistManager["Library"].add(test_album)
curds.playlist.library.join()
self.assertEqual(curds.PlaylistManager["Collection"].current, -1)
gst.NextButton.clicked()
track1 = curds.PlaylistManager.track
self.assertIsNotNone(track1)
self.assertEqual(curds.PlaylistManager["Collection"].current, 0)
gst.NextButton.clicked()
self.assertNotEqual(track1, curds.PlaylistManager.track)
track2 = curds.PlaylistManager.track
self.assertEqual(curds.PlaylistManager["Collection"].current, 1)
self.main_loop_until(Gst.State.PLAYING)
self.assertTrue( gst.PauseButton.is_visible())
@ -137,10 +145,10 @@ class TestGst(unittest.TestCase):
self.audio.seek(value=50.0)
self.main_loop(delay=0.1)
self.assertEqual(self.audio.duration(), 2.0)
self.assertEqual(self.audio.position(), 1.0)
self.assertEqual(self.audio.duration(), 3.0)
self.assertEqual(self.audio.position(), 1.5)
self.assertEqual(gst.Position.get_text(), "00:01")
self.assertEqual(gst.Duration.get_text(), "-00:01")
self.assertEqual(gst.Duration.get_text(), "-00:02")
gst.PlayButton.clicked()
self.main_loop_until(Gst.State.PLAYING)
@ -151,12 +159,20 @@ class TestGst(unittest.TestCase):
self.main_loop_until(Gst.State.PLAYING)
self.assertNotEqual(curds.PlaylistManager.track, track2)
track3 = curds.PlaylistManager.track
self.assertEqual(curds.PlaylistManager["Collection"].current, 2)
gst.PrevButton.clicked()
self.main_loop_until(Gst.State.PLAYING)
self.assertEqual(curds.PlaylistManager.track, track2)
self.assertEqual(curds.PlaylistManager["Collection"].current, 2)
self.assertEqual(curds.PlaylistManager["Previous"].current, 1)
self.state = None
self.audio.seek(value=90)
self.main_loop_until(Gst.State.PLAYING)
self.main_loop(delay=1)
self.stream = False
while self.stream == False:
Gtk.main_iteration_do(True)
self.main_loop_until(Gst.State.PLAYING)
self.assertEqual(curds.PlaylistManager["Collection"].current, 3)
self.assertNotEqual(curds.PlaylistManager.track, track2)