rind: Fix up automatically picking the next track
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
071c356dbc
commit
ce4011c069
13
rind/gst.py
13
rind/gst.py
|
@ -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()):
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue