Skip to content

Commit 552e4ab

Browse files
committed
fix: timer restarts on video pause
refs: #189 (comment)
1 parent 528fe0a commit 552e4ab

2 files changed

Lines changed: 55 additions & 9 deletions

File tree

package/contents/ui/FadePlayer.qml

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import QtQuick
2-
import QtQuick.Layouts
32
import QtMultimedia
4-
import org.kde.kirigami as Kirigami
53
import "code/utils.js" as Utils
64
import "code/enum.js" as Enum
75

@@ -75,23 +73,21 @@ Item {
7573
}
7674
signal setNextSource
7775

78-
Timer {
76+
PausableTimer {
7977
id: changeTimer
8078
running: root.changeWallpaperMode === Enum.ChangeWallpaperMode.OnATimer && root.player.playing
81-
interval: !running ? 0 : root.changeWallpaperTimerMs - (root.crossfadeEnabled ? root.crossfadeMinDurationCurrent : 0)
79+
interval: root.changeWallpaperTimerMs - (root.crossfadeEnabled ? root.crossfadeMinDurationCurrent : 0)
8280
repeat: true
81+
useNewIntervalImmediately: true
8382
onTriggered: {
8483
if (root.debugEnabled) {
8584
console.log("Timer triggered, changing wallpaper");
8685
}
8786
root.next(true);
8887
}
8988
onIntervalChanged: {
90-
if (running) {
91-
if (root.debugEnabled) {
92-
console.log("Timer started. Interval:", interval);
93-
}
94-
changeTimer.restart();
89+
if (root.debugEnabled) {
90+
console.log("Timer changed:", interval);
9591
}
9692
}
9793
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// based on https://github.com/grassator/qml-utils/blob/master/qml/PausableTimer.qml
2+
import QtQuick
3+
4+
Item {
5+
id: root
6+
property alias repeat: timer.repeat
7+
property alias running: timer.running
8+
property alias interval: timer.pausableInterval
9+
property alias triggeredOnStart: timer.triggeredOnStart
10+
property alias previousTimestamp: timer.previousTimestamp
11+
property bool useNewIntervalImmediately: false
12+
13+
signal triggered
14+
15+
Timer {
16+
id: timer
17+
property int pausableInterval: 1000
18+
property real previousTimestamp: 0
19+
interval: pausableInterval
20+
21+
onPausableIntervalChanged: {
22+
if (!root.useNewIntervalImmediately) {
23+
return;
24+
}
25+
interval = pausableInterval;
26+
if (running) {
27+
previousTimestamp = new Date().getTime();
28+
} else {
29+
previousTimestamp = 0;
30+
}
31+
}
32+
33+
onRunningChanged: {
34+
if (running) {
35+
previousTimestamp = new Date().getTime();
36+
return;
37+
}
38+
var timeDifference = new Date().getTime() - previousTimestamp;
39+
if (timeDifference < interval) {
40+
interval = interval - timeDifference;
41+
}
42+
}
43+
44+
onTriggered: {
45+
previousTimestamp = new Date().getTime();
46+
interval = pausableInterval;
47+
root.triggered();
48+
}
49+
}
50+
}

0 commit comments

Comments
 (0)