From 9023235f076116536624795a76bb3e546c65f4f6 Mon Sep 17 00:00:00 2001 From: Thomas Perl Date: Wed, 30 Apr 2014 19:04:18 +0200 Subject: [PATCH] GPodderPlayback: Try harder to resume playback position --- common/GPodderPlayback.qml | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/common/GPodderPlayback.qml b/common/GPodderPlayback.qml index 134ab30..982a896 100644 --- a/common/GPodderPlayback.qml +++ b/common/GPodderPlayback.qml @@ -86,13 +86,7 @@ MediaPlayer { onPlaybackStateChanged: { if (playbackState == MediaPlayer.PlayingState) { - if (seekAfterPlay) { - // A seek was scheduled, execute now that we're playing - player.inhibitPositionEvents = false; - player.seek(seekTargetSeconds * 1000); - player.playedFrom = seekTargetSeconds * 1000; - seekAfterPlay = false; - } else { + if (!seekAfterPlay) { player.playedFrom = position; } } else { @@ -100,6 +94,25 @@ MediaPlayer { } } + property var seekAfterPlayTimer: Timer { + interval: 100 + repeat: true + running: player.isPlaying && player.seekAfterPlay + + onTriggered: { + var targetPosition = player.seekTargetSeconds * 1000; + if (Math.abs(player.position - targetPosition) < 10 * interval) { + // We have seeked properly + player.inhibitPositionEvents = false; + player.seekAfterPlay = false; + } else { + // Try to seek to the target position + player.seek(targetPosition); + player.playedFrom = targetPosition; + } + } + } + function sendPositionToCore(positionToSend) { if (episode != 0 && !inhibitPositionEvents) { var begin = playedFrom / 1000;