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:
Anna Schumaker 2019-04-07 21:03:14 -04:00
parent 0c1dcad3f3
commit 4187b3b8dc
2 changed files with 27 additions and 1 deletions

View File

@ -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)

View File

@ -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())