From 039834b6767b0a2e541ef5e04a29c3a4ab955b74 Mon Sep 17 00:00:00 2001 From: Greg Lorenzen Date: Wed, 3 Jul 2024 00:59:09 +0000 Subject: [PATCH 01/14] Add playback settings string to en-us --- client/strings/en-us.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/client/strings/en-us.json b/client/strings/en-us.json index b28b5e332d..93f5994101 100644 --- a/client/strings/en-us.json +++ b/client/strings/en-us.json @@ -172,6 +172,7 @@ "HeaderSettingsDisplay": "Display", "HeaderSettingsExperimental": "Experimental Features", "HeaderSettingsGeneral": "General", + "HeaderSettingsPlayback": "Playback", "HeaderSettingsScanner": "Scanner", "HeaderSleepTimer": "Sleep Timer", "HeaderStatsLargestItems": "Largest Items", @@ -493,6 +494,10 @@ "LabelSettingsHideSingleBookSeries": "Hide single book series", "LabelSettingsHideSingleBookSeriesHelp": "Series that have a single book will be hidden from the series page and home page shelves.", "LabelSettingsHomePageBookshelfView": "Home page use bookshelf view", + "LabelSettingsJumpBackwardsTime": "Jump backwards time", + "LabelSettingsJumpBackwardsTimeHelp": "Time to jump backwards when using the jump backwards button", + "LabelSettingsJumpForwardsTime": "Jump forwards time", + "LabelSettingsJumpForwardsTimeHelp": "Time to jump forwards when using the jump forwards button", "LabelSettingsLibraryBookshelfView": "Library use bookshelf view", "LabelSettingsOnlyShowLaterBooksInContinueSeries": "Skip earlier books in Continue Series", "LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "The Continue Series home page shelf shows the first book not started in series that have at least one book finished and no books in progress. Enabling this setting will continue series from the furthest completed book instead of the first book not started.", From e5a843076536feade45688e1b67d0a4a99728bb0 Mon Sep 17 00:00:00 2001 From: Greg Lorenzen Date: Wed, 3 Jul 2024 00:59:27 +0000 Subject: [PATCH 02/14] Add playback settings UI for jump forwards and jump backwards --- client/pages/config/index.vue | 41 +++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/client/pages/config/index.vue b/client/pages/config/index.vue index afdb729761..1c6729e419 100644 --- a/client/pages/config/index.vue +++ b/client/pages/config/index.vue @@ -94,6 +94,29 @@

+ +
+

{{ $strings.HeaderSettingsPlayback }}

+
+
+ + +

+ {{ $strings.LabelSettingsJumpBackwardsTime }} + info_outlined +

+
+
+ +
+ + +

+ {{ $strings.LabelSettingsJumpForwardsTime }} + info_outlined +

+
+
@@ -228,6 +251,12 @@ export default { homepageUseBookshelfView: false, useBookshelfView: false, scannerEnableWatcher: false, + jumpForwardsTime: 10, + jumpForwardsIcons: ['forward_10', 'forward_30', 'forward_5'], + currentJumpForwardsIndex: 0, + jumpBackwardsTime: 10, + jumpBackwardsIcons: ['replay_10', 'replay_30', 'replay_5'], + currentJumpBackwardsIndex: 0, isPurgingCache: false, hasPrefixesChanged: false, newServerSettings: {}, @@ -262,6 +291,12 @@ export default { timeExample() { const date = new Date(2014, 2, 25, 17, 30, 0) return this.$formatJsTime(date, this.newServerSettings.timeFormat) + }, + currentJumpForwardsIcon() { + return this.jumpForwardsIcons[this.currentJumpForwardsIndex] + }, + currentJumpBackwardsIcon() { + return this.jumpBackwardsIcons[this.currentJumpBackwardsIndex] } }, methods: { @@ -271,6 +306,12 @@ export default { const serverPrefixes = this.serverSettings.sortingPrefixes || [] this.hasPrefixesChanged = prefixes.some((p) => !serverPrefixes.includes(p)) || serverPrefixes.some((p) => !prefixes.includes(p)) }, + toggleJumpForwards() { + this.currentJumpForwardsIndex = (this.currentJumpForwardsIndex + 1) % this.jumpForwardsIcons.length + }, + toggleJumpBackwards() { + this.currentJumpBackwardsIndex = (this.currentJumpBackwardsIndex + 1) % this.jumpBackwardsIcons.length + }, updateSortingPrefixes() { const prefixes = [...new Set(this.newServerSettings.sortingPrefixes.map((prefix) => prefix.trim().toLowerCase()) || [])] if (!prefixes.length) { From a17859603630b51e14ad9ac0d6b4ecbfc9340f02 Mon Sep 17 00:00:00 2001 From: Greg Lorenzen Date: Sat, 6 Jul 2024 04:59:29 +0000 Subject: [PATCH 03/14] Remove jump forwards and jump backwards settings --- client/pages/config/index.vue | 41 ----------------------------------- 1 file changed, 41 deletions(-) diff --git a/client/pages/config/index.vue b/client/pages/config/index.vue index 1c6729e419..afdb729761 100644 --- a/client/pages/config/index.vue +++ b/client/pages/config/index.vue @@ -94,29 +94,6 @@

- -
-

{{ $strings.HeaderSettingsPlayback }}

-
-
- - -

- {{ $strings.LabelSettingsJumpBackwardsTime }} - info_outlined -

-
-
- -
- - -

- {{ $strings.LabelSettingsJumpForwardsTime }} - info_outlined -

-
-
@@ -251,12 +228,6 @@ export default { homepageUseBookshelfView: false, useBookshelfView: false, scannerEnableWatcher: false, - jumpForwardsTime: 10, - jumpForwardsIcons: ['forward_10', 'forward_30', 'forward_5'], - currentJumpForwardsIndex: 0, - jumpBackwardsTime: 10, - jumpBackwardsIcons: ['replay_10', 'replay_30', 'replay_5'], - currentJumpBackwardsIndex: 0, isPurgingCache: false, hasPrefixesChanged: false, newServerSettings: {}, @@ -291,12 +262,6 @@ export default { timeExample() { const date = new Date(2014, 2, 25, 17, 30, 0) return this.$formatJsTime(date, this.newServerSettings.timeFormat) - }, - currentJumpForwardsIcon() { - return this.jumpForwardsIcons[this.currentJumpForwardsIndex] - }, - currentJumpBackwardsIcon() { - return this.jumpBackwardsIcons[this.currentJumpBackwardsIndex] } }, methods: { @@ -306,12 +271,6 @@ export default { const serverPrefixes = this.serverSettings.sortingPrefixes || [] this.hasPrefixesChanged = prefixes.some((p) => !serverPrefixes.includes(p)) || serverPrefixes.some((p) => !prefixes.includes(p)) }, - toggleJumpForwards() { - this.currentJumpForwardsIndex = (this.currentJumpForwardsIndex + 1) % this.jumpForwardsIcons.length - }, - toggleJumpBackwards() { - this.currentJumpBackwardsIndex = (this.currentJumpBackwardsIndex + 1) % this.jumpBackwardsIcons.length - }, updateSortingPrefixes() { const prefixes = [...new Set(this.newServerSettings.sortingPrefixes.map((prefix) => prefix.trim().toLowerCase()) || [])] if (!prefixes.length) { From 119fe7c2c1697894d54586a2ef24c01f5bc144ed Mon Sep 17 00:00:00 2001 From: Greg Lorenzen Date: Sat, 6 Jul 2024 05:00:40 +0000 Subject: [PATCH 04/14] Remove jump forwards and jump backwards en-us strings --- client/strings/en-us.json | 5 ----- 1 file changed, 5 deletions(-) diff --git a/client/strings/en-us.json b/client/strings/en-us.json index 93f5994101..b28b5e332d 100644 --- a/client/strings/en-us.json +++ b/client/strings/en-us.json @@ -172,7 +172,6 @@ "HeaderSettingsDisplay": "Display", "HeaderSettingsExperimental": "Experimental Features", "HeaderSettingsGeneral": "General", - "HeaderSettingsPlayback": "Playback", "HeaderSettingsScanner": "Scanner", "HeaderSleepTimer": "Sleep Timer", "HeaderStatsLargestItems": "Largest Items", @@ -494,10 +493,6 @@ "LabelSettingsHideSingleBookSeries": "Hide single book series", "LabelSettingsHideSingleBookSeriesHelp": "Series that have a single book will be hidden from the series page and home page shelves.", "LabelSettingsHomePageBookshelfView": "Home page use bookshelf view", - "LabelSettingsJumpBackwardsTime": "Jump backwards time", - "LabelSettingsJumpBackwardsTimeHelp": "Time to jump backwards when using the jump backwards button", - "LabelSettingsJumpForwardsTime": "Jump forwards time", - "LabelSettingsJumpForwardsTimeHelp": "Time to jump forwards when using the jump forwards button", "LabelSettingsLibraryBookshelfView": "Library use bookshelf view", "LabelSettingsOnlyShowLaterBooksInContinueSeries": "Skip earlier books in Continue Series", "LabelSettingsOnlyShowLaterBooksInContinueSeriesHelp": "The Continue Series home page shelf shows the first book not started in series that have at least one book finished and no books in progress. Enabling this setting will continue series from the furthest completed book instead of the first book not started.", From 79cdf5e6f5af0a2f61a4ecd299af3d1a1a749f20 Mon Sep 17 00:00:00 2001 From: Greg Lorenzen Date: Sat, 6 Jul 2024 06:23:46 +0000 Subject: [PATCH 05/14] Update player UI to include player settings button --- client/components/player/PlayerUi.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/components/player/PlayerUi.vue b/client/components/player/PlayerUi.vue index c926934baa..b40f6ef698 100644 --- a/client/components/player/PlayerUi.vue +++ b/client/components/player/PlayerUi.vue @@ -36,9 +36,9 @@ - -
From 58b25574043c2bface278dfab21cd83c2c5c4fd9 Mon Sep 17 00:00:00 2001 From: Greg Lorenzen Date: Sat, 6 Jul 2024 06:24:01 +0000 Subject: [PATCH 06/14] Add label view player settings string --- client/strings/en-us.json | 1 + 1 file changed, 1 insertion(+) diff --git a/client/strings/en-us.json b/client/strings/en-us.json index b28b5e332d..a6eee6f667 100644 --- a/client/strings/en-us.json +++ b/client/strings/en-us.json @@ -591,6 +591,7 @@ "LabelVersion": "Version", "LabelViewBookmarks": "View bookmarks", "LabelViewChapters": "View chapters", + "LabelViewPlayerSettings": "View player settings", "LabelViewQueue": "View player queue", "LabelVolume": "Volume", "LabelWeekdaysToRun": "Weekdays to run", From 46fa36e1fcb25d10a687661a9181b014d5dcd893 Mon Sep 17 00:00:00 2001 From: Greg Lorenzen Date: Sat, 6 Jul 2024 16:53:00 +0000 Subject: [PATCH 07/14] Add PlayerSettingsModal component Includes a toggle switch for enabling/disabling the chapter track feature. --- .../components/modals/PlayerSettingsModal.vue | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 client/components/modals/PlayerSettingsModal.vue diff --git a/client/components/modals/PlayerSettingsModal.vue b/client/components/modals/PlayerSettingsModal.vue new file mode 100644 index 0000000000..5b3ece502f --- /dev/null +++ b/client/components/modals/PlayerSettingsModal.vue @@ -0,0 +1,42 @@ + + + \ No newline at end of file From 18a895570eaf65e134c15bf692adf797b06a1dd9 Mon Sep 17 00:00:00 2001 From: Greg Lorenzen Date: Sat, 6 Jul 2024 16:53:33 +0000 Subject: [PATCH 08/14] Add player settings modal component to MediaPlayerContainer --- client/components/app/MediaPlayerContainer.vue | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/client/components/app/MediaPlayerContainer.vue b/client/components/app/MediaPlayerContainer.vue index 36e3b63e5c..711e3561a0 100644 --- a/client/components/app/MediaPlayerContainer.vue +++ b/client/components/app/MediaPlayerContainer.vue @@ -51,6 +51,7 @@ @showBookmarks="showBookmarks" @showSleepTimer="showSleepTimerModal = true" @showPlayerQueueItems="showPlayerQueueItemsModal = true" + @showPlayerSettings="showPlayerSettingsModal = true" /> @@ -58,6 +59,8 @@ + + @@ -76,6 +79,7 @@ export default { currentTime: 0, showSleepTimerModal: false, showPlayerQueueItemsModal: false, + showPlayerSettingsModal: false, sleepTimerSet: false, sleepTimerTime: 0, sleepTimerRemaining: 0, From 809ab8053042450b940319bdd58e40668089d4fd Mon Sep 17 00:00:00 2001 From: Greg Lorenzen Date: Sat, 6 Jul 2024 16:54:01 +0000 Subject: [PATCH 09/14] Handle useChapterTrack changes in PlayerUI --- client/components/player/PlayerUi.vue | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/client/components/player/PlayerUi.vue b/client/components/player/PlayerUi.vue index b40f6ef698..ebdbf2d8c3 100644 --- a/client/components/player/PlayerUi.vue +++ b/client/components/player/PlayerUi.vue @@ -90,13 +90,16 @@ export default { seekLoading: false, showChaptersModal: false, currentTime: 0, - duration: 0, - useChapterTrack: false + duration: 0 } }, watch: { playbackRate() { this.updateTimestamp() + }, + useChapterTrack() { + if (this.$refs.trackbar) this.$refs.trackbar.setUseChapterTrack(this.useChapterTrack) + this.updateTimestamp() } }, computed: { @@ -162,6 +165,10 @@ export default { }, playerQueueItems() { return this.$store.state.playerQueueItems || [] + }, + useChapterTrack() { + const _useChapterTrack = this.$store.getters['user/getUserSetting']('useChapterTrack') || false + return this.chapters.length ? _useChapterTrack : false } }, methods: { @@ -310,9 +317,6 @@ export default { init() { this.playbackRate = this.$store.getters['user/getUserSetting']('playbackRate') || 1 - const _useChapterTrack = this.$store.getters['user/getUserSetting']('useChapterTrack') || false - this.useChapterTrack = this.chapters.length ? _useChapterTrack : false - if (this.$refs.trackbar) this.$refs.trackbar.setUseChapterTrack(this.useChapterTrack) this.setPlaybackRate(this.playbackRate) }, From bd64b4fe7b031b7888d70480bdaf0f5d3473072a Mon Sep 17 00:00:00 2001 From: Greg Lorenzen Date: Sat, 6 Jul 2024 22:41:47 +0000 Subject: [PATCH 10/14] Add jump forwards and jump backwards settings to user store --- client/store/user.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/client/store/user.js b/client/store/user.js index 70746bc1e0..1279f8ef3b 100644 --- a/client/store/user.js +++ b/client/store/user.js @@ -13,7 +13,9 @@ export const state = () => ({ seriesSortDesc: false, seriesFilterBy: 'all', authorSortBy: 'name', - authorSortDesc: false + authorSortDesc: false, + jumpForwardAmount: 10, + jumpBackwardAmount: 10, } }) From 61ae0a89fce2f441aab948377688b0eb79ec8cf3 Mon Sep 17 00:00:00 2001 From: Greg Lorenzen Date: Sat, 6 Jul 2024 22:42:03 +0000 Subject: [PATCH 11/14] Add jump forwards and jump backwards label strings --- client/strings/en-us.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client/strings/en-us.json b/client/strings/en-us.json index a6eee6f667..4d2ad1a912 100644 --- a/client/strings/en-us.json +++ b/client/strings/en-us.json @@ -339,6 +339,8 @@ "LabelIntervalEveryHour": "Every hour", "LabelInvert": "Invert", "LabelItem": "Item", + "LabelJumpForwardAmount": "Jump forward amount", + "LabelJumpBackwardAmount": "Jump backward amount", "LabelLanguage": "Language", "LabelLanguageDefaultServer": "Default Server Language", "LabelLanguages": "Languages", From e013a14741db9d2a443e38317329589dacd05387 Mon Sep 17 00:00:00 2001 From: Greg Lorenzen Date: Sat, 6 Jul 2024 22:42:23 +0000 Subject: [PATCH 12/14] Add jump forwards and jump backwards settings to PlayerSettingsModal --- .../components/modals/PlayerSettingsModal.vue | 38 ++++++++++++++++--- 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/client/components/modals/PlayerSettingsModal.vue b/client/components/modals/PlayerSettingsModal.vue index 5b3ece502f..56e9d11ed4 100644 --- a/client/components/modals/PlayerSettingsModal.vue +++ b/client/components/modals/PlayerSettingsModal.vue @@ -1,11 +1,17 @@ @@ -17,7 +23,17 @@ export default { }, data() { return { - useChapterTrack: false + useChapterTrack: false, + jumpValues: [ + { text: '10 seconds', value: 10 }, + { text: '15 seconds', value: 15 }, + { text: '30 seconds', value: 30 }, + { text: '1 minute', value: 60 }, + { text: '2 minutes', value: 120 }, + { text: '5 minutes', value: 300 } + ], + jumpForwardAmount: 10, + jumpBackwardAmount: 10 } }, computed: { @@ -31,12 +47,22 @@ export default { } }, methods: { - setUseChapterTrack(val) { + setUseChapterTrack() { this.$store.dispatch('user/updateUserSettings', { useChapterTrack: this.useChapterTrack }) + }, + setJumpForwardAmount(val) { + this.jumpForwardAmount = val + this.$store.dispatch('user/updateUserSettings', { jumpForwardAmount: val }) + }, + setJumpBackwardAmount(val) { + this.jumpBackwardAmount = val + this.$store.dispatch('user/updateUserSettings', { jumpBackwardAmount: val }) } }, mounted() { - this.useChapterTrack = this.$store.state.user.settings.useChapterTrack + this.useChapterTrack = this.$store.getters['user/getUserSetting']('useChapterTrack') + this.jumpForwardAmount = this.$store.getters['user/getUserSetting']('jumpForwardAmount') + this.jumpBackwardAmount = this.$store.getters['user/getUserSetting']('jumpBackwardAmount') } } \ No newline at end of file From 5666d71f0dfb62b6989ffe5c52dccc663a7a7f1f Mon Sep 17 00:00:00 2001 From: Greg Lorenzen Date: Sat, 6 Jul 2024 22:55:36 +0000 Subject: [PATCH 13/14] Update jump forwards and jump backwards to handle user state values in PlayerHandler --- client/players/PlayerHandler.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/client/players/PlayerHandler.js b/client/players/PlayerHandler.js index 660ca2c176..0f806d81d0 100644 --- a/client/players/PlayerHandler.js +++ b/client/players/PlayerHandler.js @@ -51,6 +51,12 @@ export default class PlayerHandler { if (!this.episodeId) return null return this.libraryItem.media.episodes.find(ep => ep.id === this.episodeId) } + get jumpForwardAmount() { + return this.ctx.$store.getters['user/getUserSetting']('jumpForwardAmount') + } + get jumpBackwardAmount() { + return this.ctx.$store.getters['user/getUserSetting']('jumpBackwardAmount') + } setSessionId(sessionId) { this.currentSessionId = sessionId @@ -381,13 +387,15 @@ export default class PlayerHandler { jumpBackward() { if (!this.player) return var currentTime = this.getCurrentTime() - this.seek(Math.max(0, currentTime - 10)) + const jumpAmount = this.jumpBackwardAmount + this.seek(Math.max(0, currentTime - jumpAmount)) } jumpForward() { if (!this.player) return var currentTime = this.getCurrentTime() - this.seek(Math.min(currentTime + 10, this.getDuration())) + const jumpAmount = this.jumpForwardAmount + this.seek(Math.min(currentTime + jumpAmount, this.getDuration())) } setVolume(volume) { From 0b4b5f804b5811a4fca6f8f9f91315fd01199158 Mon Sep 17 00:00:00 2001 From: Greg Lorenzen Date: Sat, 6 Jul 2024 22:55:43 +0000 Subject: [PATCH 14/14] Update jump backwards icon in PlayerPlaybackControls --- client/components/player/PlayerPlaybackControls.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/components/player/PlayerPlaybackControls.vue b/client/components/player/PlayerPlaybackControls.vue index 91b67dade1..4251d7bcad 100644 --- a/client/components/player/PlayerPlaybackControls.vue +++ b/client/components/player/PlayerPlaybackControls.vue @@ -9,7 +9,7 @@