Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MPRIS: Fix seek actions to correctly move the specified amount of time #782

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion cozy/control/mpris.py
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,12 @@ def SetPosition(self, track_id, position):
self._player.position = position * 10**3

def Seek(self, offset):
self._player.position = self._player.position + offset * 10**3
# convert milliseconds to seconds
offset_sec=offset / 10**6
if offset_sec > 0:
self._player.forward(offset_sec)
elif offset_sec < 0:
self._player.rewind(-offset_sec)

def Seeked(self, position):
self.__bus.emit_signal(
Expand Down
22 changes: 14 additions & 8 deletions cozy/media/player.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,17 +156,17 @@ def play_pause_chapter(self, book: Book, chapter: Chapter):

book.position = chapter.id

def rewind(self):
def rewind(self, duration=None):
state = self._gst_player.state
if state != GstPlayerState.STOPPED:
self._rewind_in_book()
self._rewind_in_book(duration)
if state == GstPlayerState.PLAYING:
self._gst_player.play()

def forward(self):
def forward(self, duration=None):
state = self._gst_player.state
if state != GstPlayerState.STOPPED:
self._forward_in_book()
self._forward_in_book(duration)
if state == GstPlayerState.PLAYING:
self._gst_player.play()

Expand Down Expand Up @@ -233,16 +233,19 @@ def _get_playback_path(self, chapter: Chapter):

return chapter.file

def _rewind_in_book(self):
def _rewind_in_book(self, rewind_duration=None):
if not self._book:
log.error("Rewind in book not possible because no book is loaded.")
reporter.error("player", "Rewind in book not possible because no book is loaded.")
return

if rewind_duration == None:
rewind_duration = self._app_settings.rewind_duration

current_position = self._gst_player.position
current_position_relative = max(current_position - self.loaded_chapter.start_position, 0)
chapter_number = self._book.chapters.index(self._book.current_chapter)
rewind_seconds = self._app_settings.rewind_duration * self.playback_speed
rewind_seconds = rewind_duration * self.playback_speed

if current_position_relative / NS_TO_SEC - rewind_seconds > 0:
self._gst_player.position = current_position - NS_TO_SEC * rewind_seconds
Expand All @@ -254,17 +257,20 @@ def _rewind_in_book(self):
else:
self._gst_player.position = 0

def _forward_in_book(self):
def _forward_in_book(self, forward_duration=None):
if not self._book:
log.error("Forward in book not possible because no book is loaded.")
reporter.error("player", "Forward in book not possible because no book is loaded.")
return

if forward_duration == None:
forward_duration = self._app_settings.forward_duration

current_position = self._gst_player.position
current_position_relative = max(current_position - self.loaded_chapter.start_position, 0)
old_chapter = self._book.current_chapter
chapter_number = self._book.chapters.index(self._book.current_chapter)
forward_seconds = self._app_settings.forward_duration * self.playback_speed
forward_seconds = forward_duration * self.playback_speed

if current_position_relative / NS_TO_SEC + forward_seconds < self._book.current_chapter.length:
self._gst_player.position = current_position + (NS_TO_SEC * forward_seconds)
Expand Down