Add exact seek option to player and config.

This commit is contained in:
Ian Walton 2020-08-25 20:25:23 -04:00
parent da7ff35d35
commit e3f01b7718
3 changed files with 25 additions and 7 deletions

View File

@ -280,6 +280,8 @@ You can reconfigure the custom keyboard shortcuts. You can also set them to `nul
- `seek_right` - Time to seek for "right" key. (Default: `5`)
- `seek_left` - Time to seek for "left" key. (Default: `-5`)
- `media_keys` - Enable binding of MPV to media keys. Default: `true`
- `seek_v_exact` - Use exact seek for up/down keys. Default: `false`
- `seek_h_exact` - Use exact seek for left/right keys. Default: `false`
### Shader Packs

View File

@ -72,6 +72,8 @@ class Settings(BaseModel):
seek_down: int = -60
seek_right: int = 5
seek_left: int = -5
seek_v_exact: bool = False
seek_h_exact: bool = False
shader_pack_enable: bool = True
shader_pack_custom: bool = False
shader_pack_remember: bool = True

View File

@ -252,7 +252,7 @@ class PlayerManager(object):
seektime = settings.seek_left
if settings.use_web_seek:
seektime, _x = self.get_seek_times()
self.seek(seektime)
self.seek(seektime, exact=settings.seek_h_exact)
@keypress(settings.kb_menu_right)
def menu_right():
@ -262,21 +262,21 @@ class PlayerManager(object):
seektime = settings.seek_right
if settings.use_web_seek:
_x, seektime = self.get_seek_times()
self.seek(seektime)
self.seek(seektime, exact=settings.seek_h_exact)
@keypress(settings.kb_menu_up)
def menu_up():
if self.menu.is_menu_shown:
self.menu.menu_action("up")
else:
self.seek(settings.seek_up)
self.seek(settings.seek_up, exact=settings.seek_v_exact)
@keypress(settings.kb_menu_down)
def menu_down():
if self.menu.is_menu_shown:
self.menu.menu_action("down")
else:
self.seek(settings.seek_down)
self.seek(settings.seek_down, exact=settings.seek_v_exact)
@keypress(settings.kb_pause)
def handle_pause():
@ -525,10 +525,18 @@ class PlayerManager(object):
self.timeline_handle()
@synchronous("_lock")
def seek(self, offset: float, absolute: bool = False, force: bool = False):
def seek(
self,
offset: float,
absolute: bool = False,
force: bool = False,
exact: Optional[bool] = None,
):
"""
Seek to ``offset`` seconds
"""
if exact is None:
exact = absolute
if self.syncplay.is_enabled() and not force:
if not absolute:
offset += self._player.playback_time
@ -538,11 +546,17 @@ class PlayerManager(object):
if absolute:
if self.syncplay.is_enabled():
self.last_seek = offset
self._player.playback_time = offset
p2 = "absolute"
if exact:
p2 += "+exact"
self._player.command("seek", offset, p2)
else:
if self.syncplay.is_enabled():
self.last_seek = self._player.playback_time + offset
self._player.command("seek", offset)
if exact:
self._player.command("seek", offset, "exact")
else:
self._player.command("seek", offset)
self.timeline_handle()
@synchronous("_lock")