diff --git a/common/GPodderPlayback.qml b/common/GPodderPlayback.qml index 80f9262..9629da0 100644 --- a/common/GPodderPlayback.qml +++ b/common/GPodderPlayback.qml @@ -116,6 +116,9 @@ MediaPlayer { } else { sendPositionToCore(lastPosition); savePlaybackAfterStopTimer.restart(); + if (sleepTimerRunning) { + stopSleepTimer(); + } } } @@ -123,6 +126,37 @@ MediaPlayer { py.call('main.save_playback_state', []); } + property var durationChoices: ([5, 15, 30, 45, 60]) + + function startSleepTimer(seconds) { + sleepTimer.running = false; + sleepTimer.secondsRemaining = seconds; + sleepTimer.running = true; + } + + function stopSleepTimer() { + sleepTimer.running = false; + sleepTimer.secondsRemaining = 0; + } + + property bool sleepTimerRunning: sleepTimer.running + property int sleepTimerRemaining: sleepTimer.secondsRemaining + + property var sleepTimer: Timer { + property int secondsRemaining: 0 + + interval: 1000 + repeat: true + onTriggered: { + secondsRemaining -= 1; + + if (secondsRemaining <= 0) { + player.pause(); + running = false; + } + } + } + property var savePlaybackPositionTimer: Timer { // Save position every minute during playback interval: 60 * 1000 diff --git a/touch/PlayerPage.qml b/touch/PlayerPage.qml index 0212e90..ff6cb60 100644 --- a/touch/PlayerPage.qml +++ b/touch/PlayerPage.qml @@ -141,6 +141,32 @@ SlidePage { onClicked: player.seekAndSync(player.position + 60 * 1000); } + IconMenuItem { + text: player.sleepTimerRunning ? Util.formatDuration(player.sleepTimerRemaining) : 'Sleep' + alwaysShowText: player.sleepTimerRunning + color: Constants.colors.playback + icon: Icons.sleep + onClicked: { + if (player.sleepTimerRunning) { + player.stopSleepTimer(); + } else { + var options = []; + var durations_minutes = player.durationChoices; + for (var i=0; i