audio: Add a Seeker to the Player
And related functions needed for operation Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
7a042dd381
commit
4f43a3faf4
|
@ -1,7 +1,8 @@
|
|||
# Copyright 2021 (c) Anna Schumaker.
|
||||
from . import controls
|
||||
from . import seeker
|
||||
from lib import settings
|
||||
from gi.repository import Gst
|
||||
from gi.repository import Gst, GLib
|
||||
import trackdb
|
||||
|
||||
class Player:
|
||||
|
@ -21,12 +22,21 @@ class Player:
|
|||
self.Controls.connect("next", self.next)
|
||||
self.Controls.connect("volume-changed", self.volume_changed)
|
||||
|
||||
self.Seeker = seeker.Seeker()
|
||||
self.Seeker.connect(self.seeked)
|
||||
self.Controls.sizegroup.add_widget(self.Seeker.scale)
|
||||
GLib.timeout_add(250, self.update_progress)
|
||||
|
||||
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")
|
||||
self.volume_changed()
|
||||
|
||||
def duration(self):
|
||||
(res, dur) = self.playbin.query_duration(Gst.Format.TIME)
|
||||
return dur if res == True else 0
|
||||
|
||||
def get_state(self):
|
||||
(ret, state, pending) = self.playbin.get_state(Gst.CLOCK_TIME_NONE)
|
||||
if ret == Gst.StateChangeReturn.SUCCESS:
|
||||
|
@ -67,8 +77,21 @@ class Player:
|
|||
self.load_set_state(track, Gst.State.PLAYING)
|
||||
return True
|
||||
|
||||
def position(self):
|
||||
(res, pos) = self.playbin.query_position(Gst.Format.TIME)
|
||||
return pos if res == True else 0
|
||||
|
||||
def previous(self, *args):
|
||||
self.play_track(trackdb.Stack.previous())
|
||||
|
||||
def seeked(self, scale, scroll, value):
|
||||
self.playbin.seek_simple(Gst.Format.TIME, Gst.SeekFlags.FLUSH,
|
||||
value * Gst.SECOND)
|
||||
|
||||
def update_progress(self):
|
||||
self.Seeker.configure(self.position() / Gst.SECOND,
|
||||
self.duration() / Gst.SECOND)
|
||||
return GLib.SOURCE_CONTINUE
|
||||
|
||||
def volume_changed(self, *args):
|
||||
self.playbin.set_property("volume", self.Controls.menu.volume.get_value())
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# Copyright 2021 (c) Anna Schumaker.
|
||||
from . import controls
|
||||
from . import player
|
||||
from . import seeker
|
||||
from lib import settings
|
||||
from gi.repository import Gst
|
||||
import pathlib
|
||||
|
@ -31,9 +32,11 @@ class TestPlayer(unittest.TestCase):
|
|||
self.assertIsInstance(play.playbin, Gst.Element)
|
||||
self.assertIsInstance(play.bus, Gst.Bus)
|
||||
self.assertIsInstance(play.Controls, controls.Controls)
|
||||
self.assertIsInstance(play.Seeker, seeker.Seeker)
|
||||
self.assertIsNone(play.track)
|
||||
|
||||
self.assertEqual(play.playbin.get_property("video-sink"), play.video)
|
||||
self.assertIn(play.Seeker.scale, play.Controls.sizegroup.get_widgets())
|
||||
|
||||
def test_player_load_track(self):
|
||||
play = player.Player()
|
||||
|
|
Loading…
Reference in New Issue