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;