Skip to content

Commit 27f59e0

Browse files
committed
Implement timer for next video to not play automatically
1 parent 8492051 commit 27f59e0

File tree

8 files changed

+62
-11
lines changed

8 files changed

+62
-11
lines changed

src/renderer/components/ft-shaka-video-player/ft-shaka-video-player.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,12 +106,17 @@ export default defineComponent({
106106
vrProjection: {
107107
type: String,
108108
default: null
109+
},
110+
blockVideoAutoplay: {
111+
type: Boolean,
112+
default: false
109113
}
110114
},
111115
emits: [
112116
'error',
113117
'loaded',
114118
'ended',
119+
'reset-autoplay-interruption-timeout',
115120
'timeupdate',
116121
'toggle-theatre-mode'
117122
],
@@ -155,6 +160,15 @@ export default defineComponent({
155160
*/
156161
let sortedCaptions
157162

163+
const blockAutoplay = props.blockVideoAutoplay
164+
if (blockAutoplay) {
165+
resetAutoplayInterruptionTimeout()
166+
}
167+
168+
function resetAutoplayInterruptionTimeout() {
169+
emit('reset-autoplay-interruption-timeout')
170+
}
171+
158172
// we don't need to sort if we only have one caption or don't have any
159173
if (props.captions.length > 1) {
160174
// theoretically we would resort when the language changes, but we can't remove captions that we already added to the player
@@ -1959,6 +1973,8 @@ export default defineComponent({
19591973
* @param {KeyboardEvent} event
19601974
*/
19611975
function keyboardShortcutHandler(event) {
1976+
resetAutoplayInterruptionTimeout()
1977+
19621978
if (!player || !hasLoaded.value) {
19631979
return
19641980
}
@@ -2365,6 +2381,9 @@ export default defineComponent({
23652381
document.removeEventListener('keydown', keyboardShortcutHandler)
23662382
document.addEventListener('keydown', keyboardShortcutHandler)
23672383

2384+
document.removeEventListener('click', resetAutoplayInterruptionTimeout)
2385+
document.addEventListener('click', resetAutoplayInterruptionTimeout)
2386+
23682387
player.addEventListener('loading', () => {
23692388
hasLoaded.value = false
23702389
})
@@ -2673,6 +2692,7 @@ export default defineComponent({
26732692
document.body.classList.remove('playerFullWindow')
26742693

26752694
document.removeEventListener('keydown', keyboardShortcutHandler)
2695+
document.removeEventListener('click', resetAutoplayInterruptionTimeout)
26762696

26772697
if (resizeObserver) {
26782698
resizeObserver.disconnect()
@@ -2768,6 +2788,7 @@ export default defineComponent({
27682788
stats,
27692789

27702790
autoplayVideos,
2791+
blockAutoplay,
27712792
sponsorBlockShowSkippedToast,
27722793

27732794
skippedSponsorBlockSegments,

src/renderer/components/ft-shaka-video-player/ft-shaka-video-player.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
preload="auto"
1515
crossorigin="anonymous"
1616
playsinline
17-
:autoplay="autoplayVideos ? true : null"
17+
:autoplay="autoplayVideos && !blockAutoplay ? true : null"
1818
:poster="thumbnail"
1919
@play="handlePlay"
2020
@pause="handlePause"

src/renderer/components/player-settings/player-settings.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,10 @@ export default defineComponent({
9595
return this.backendPreference !== 'invidious' && !this.backendFallback
9696
},
9797

98+
defaultAutoplayInterruptionInterval: function () {
99+
return parseInt(this.$store.getters.getDefaultAutoplayInterruptionInterval)
100+
},
101+
98102
defaultSkipInterval: function () {
99103
return parseInt(this.$store.getters.getDefaultSkipInterval)
100104
},
@@ -286,6 +290,7 @@ export default defineComponent({
286290
...mapActions([
287291
'updateAutoplayVideos',
288292
'updateAutoplayPlaylists',
293+
'updateDefaultAutoplayInterruptionInterval',
289294
'updatePlayNextVideo',
290295
'updateEnableSubtitlesByDefault',
291296
'updateProxyVideos',

src/renderer/components/player-settings/player-settings.vue

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -82,15 +82,6 @@
8282
</div>
8383
</div>
8484
<ft-flex-box>
85-
<ft-slider
86-
:label="$t('Settings.Player Settings.Fast-Forward / Rewind Interval')"
87-
:default-value="defaultSkipInterval"
88-
:min-value="1"
89-
:max-value="70"
90-
:step="1"
91-
value-extension="s"
92-
@change="updateDefaultSkipInterval"
93-
/>
9485
<ft-slider
9586
:label="$t('Settings.Player Settings.Next Video Interval')"
9687
:default-value="defaultInterval"
@@ -100,6 +91,24 @@
10091
value-extension="s"
10192
@change="updateDefaultInterval"
10293
/>
94+
<ft-slider
95+
:label="$t('Settings.Player Settings.Autoplay Interruption Timer')"
96+
:default-value="defaultAutoplayInterruptionInterval"
97+
:min-value="1"
98+
:max-value="12"
99+
:step="1"
100+
value-extension="h"
101+
@change="updateDefaultAutoplayInterruptionInterval"
102+
/>
103+
<ft-slider
104+
:label="$t('Settings.Player Settings.Fast-Forward / Rewind Interval')"
105+
:default-value="defaultSkipInterval"
106+
:min-value="1"
107+
:max-value="70"
108+
:step="1"
109+
value-extension="s"
110+
@change="updateDefaultSkipInterval"
111+
/>
103112
<ft-slider
104113
:label="$t('Settings.Player Settings.Default Volume')"
105114
:default-value="defaultVolume"

src/renderer/store/modules/settings.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ const state = {
172172
baseTheme: 'system',
173173
mainColor: 'Red',
174174
secColor: 'Blue',
175+
defaultAutoplayInterruptionInterval: 3,
175176
defaultCaptionSettings: '{}',
176177
defaultInterval: 5,
177178
defaultPlayback: 1,

src/renderer/views/Watch/Watch.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,8 @@ export default defineComponent({
117117
playNextCountDownIntervalId: null,
118118
infoAreaSticky: true,
119119
commentsEnabled: true,
120+
blockVideoAutoplay: false,
121+
autoplayInterruptionTimeout: null,
120122

121123
onMountedRun: false,
122124

@@ -158,6 +160,9 @@ export default defineComponent({
158160
proxyVideos: function () {
159161
return this.$store.getters.getProxyVideos
160162
},
163+
defaultAutoplayInterruptionInterval: function () {
164+
return this.$store.getters.getDefaultAutoplayInterruptionInterval
165+
},
161166
defaultInterval: function () {
162167
return this.$store.getters.getDefaultInterval
163168
},
@@ -320,6 +325,7 @@ export default defineComponent({
320325
}
321326

322327
window.addEventListener('beforeunload', this.handleWatchProgress)
328+
this.resetAutoplayInterruptionTimeout()
323329
},
324330

325331
changeTimestamp: function (timestamp) {
@@ -1619,6 +1625,12 @@ export default defineComponent({
16191625
this.updatePlaylistLastPlayedAt({ _id: playlist._id })
16201626
},
16211627

1628+
resetAutoplayInterruptionTimeout() {
1629+
clearTimeout(this.autoplayInterruptionTimeout)
1630+
this.autoplayInterruptionTimeout = setTimeout(() => { this.blockVideoAutoplay = true }, this.defaultAutoplayInterruptionInterval * 3_600_000)
1631+
this.blockVideoAutoplay = false
1632+
},
1633+
16221634
...mapActions([
16231635
'updateHistory',
16241636
'updateWatchProgress',

src/renderer/views/Watch/Watch.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,13 @@
3434
:theatre-possible="theatrePossible"
3535
:use-theatre-mode="useTheatreMode"
3636
:vr-projection="vrProjection"
37+
:block-video-autoplay="blockVideoAutoplay"
3738
class="videoPlayer"
3839
@error="handlePlayerError"
3940
@loaded="handleVideoLoaded"
4041
@timeupdate="updateCurrentChapter"
4142
@ended="handleVideoEnded"
43+
@reset-autoplay-interruption-timeout="resetAutoplayInterruptionTimeout"
4244
@toggle-theatre-mode="useTheatreMode = !useTheatreMode"
4345
/>
4446
<div

static/locales/en-US.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -408,7 +408,8 @@ Settings:
408408
Skip by Scrolling Over Video Player: Skip by Scrolling Over Video Player
409409
Display Play Button In Video Player: Display Play Button In Video Player
410410
Enter Fullscreen on Display Rotate: Enter Fullscreen on Display Rotate
411-
Next Video Interval: Next Video Interval
411+
Next Video Interval: Autoplay Countdown Timer
412+
Autoplay Interruption Timer: Autoplay Interruption Timer
412413
Fast-Forward / Rewind Interval: Fast-Forward / Rewind Interval
413414
Default Volume: Default Volume
414415
Default Playback Rate: Default Playback Rate

0 commit comments

Comments
 (0)