rind: Add seek keypresses
- Ctrl+Right seeks forward by 10 seconds - Ctrl+Left seeks backwards by 10 seconds Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
0c1dcad3f3
commit
4187b3b8dc
21
rind/gst.py
21
rind/gst.py
|
@ -5,7 +5,7 @@ import datetime
|
|||
import gi
|
||||
import sys
|
||||
gi.require_version("Gst", "1.0")
|
||||
from gi.repository import Gst, GLib
|
||||
from gi.repository import Gst, GLib, Gdk
|
||||
|
||||
Gst.init(sys.argv)
|
||||
Adjustment = gtk.Builder.get_object("progress_adjustment")
|
||||
|
@ -77,6 +77,15 @@ class EmmentalAudio:
|
|||
else:
|
||||
self.load(curds.PlaylistManager.track)
|
||||
|
||||
def on_key_press(self, widget, event):
|
||||
key = Gdk.keyval_name(event.keyval)
|
||||
ctrl = event.state & Gdk.ModifierType.CONTROL_MASK
|
||||
step = 10 * Gst.SECOND
|
||||
if ctrl and key in ("Left", "Right"):
|
||||
self.seek_step(step if key == "Right" else -step)
|
||||
return True
|
||||
return False
|
||||
|
||||
def on_message(self, bus, message):
|
||||
if message.type == Gst.MessageType.ASYNC_DONE:
|
||||
state = message.src.get_state(Gst.Format.TIME)
|
||||
|
@ -122,6 +131,15 @@ class EmmentalAudio:
|
|||
pos = (dur * value) / 100.0
|
||||
self.playbin.seek_simple(Gst.Format.TIME, Gst.SeekFlags.FLUSH, pos)
|
||||
|
||||
def seek_step(self, step):
|
||||
(res1, dur) = self.playbin.query_duration(Gst.Format.TIME)
|
||||
(res2, pos) = self.playbin.query_position(Gst.Format.TIME)
|
||||
if res1 == True and res2 == True:
|
||||
pos += step
|
||||
if pos < 0: pos = 0
|
||||
if pos > dur: pos = dur
|
||||
self.playbin.seek_simple(Gst.Format.TIME, Gst.SeekFlags.FLUSH, pos)
|
||||
|
||||
def set_volume(self, button, value):
|
||||
self.playbin.set_property("volume", value / 100.0)
|
||||
|
||||
|
@ -149,3 +167,4 @@ Audio = EmmentalAudio()
|
|||
|
||||
for button in [ NextButton, PauseButton, PlayButton, PrevButton ]:
|
||||
button.connect("can-activate-accel", gtk.can_activate_accel)
|
||||
gtk.Window.connect("key-press-event", Audio.on_key_press)
|
||||
|
|
|
@ -162,6 +162,13 @@ class TestGst(unittest.TestCase):
|
|||
self.assertEqual(gst.Position.get_text(), "00:01")
|
||||
self.assertEqual(gst.Duration.get_text(), "-00:02")
|
||||
|
||||
self.audio.seek_step(step=0.5 * Gst.SECOND)
|
||||
self.main_loop(delay=0.1)
|
||||
self.assertEqual(self.audio_duration(), 3.0)
|
||||
self.assertEqual(self.audio.position(), 1.5)
|
||||
self.assertEqual(gst.Position.get_text(), "00:02")
|
||||
self.assertEqual(gst.Duration.get_text(), "-00:01")
|
||||
|
||||
gst.PlayButton.clicked()
|
||||
self.main_loop_until(Gst.State.PLAYING)
|
||||
self.assertTrue( gst.PauseButton.is_visible())
|
||||
|
|
Loading…
Reference in New Issue