From e9df238b80b923738bb04268d2fb46e32c31faf1 Mon Sep 17 00:00:00 2001
From: Vito0912 <86927734+Vito0912@users.noreply.github.com>
Date: Mon, 17 Mar 2025 16:30:47 +0100
Subject: [PATCH 1/4] sort randomly
---
server/utils/queries/libraryFilters.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/server/utils/queries/libraryFilters.js b/server/utils/queries/libraryFilters.js
index 7312b9d5..a5646240 100644
--- a/server/utils/queries/libraryFilters.js
+++ b/server/utils/queries/libraryFilters.js
@@ -164,7 +164,7 @@ module.exports = {
*/
async getMediaFinished(library, user, include, limit) {
if (library.isBook) {
- const { libraryItems, count } = await libraryItemsBookFilters.getFilteredLibraryItems(library.id, user, 'progress', 'finished', 'progress', true, false, include, limit, 0)
+ const { libraryItems, count } = await libraryItemsBookFilters.getFilteredLibraryItems(library.id, user, 'progress', 'finished', 'random', true, false, include, limit, 0)
return {
items: libraryItems.map((li) => {
const oldLibraryItem = li.toOldJSONMinified()
@@ -179,7 +179,7 @@ module.exports = {
count
}
} else {
- const { libraryItems, count } = await libraryItemsPodcastFilters.getFilteredPodcastEpisodes(library.id, user, 'progress', 'finished', 'progress', true, limit, 0)
+ const { libraryItems, count } = await libraryItemsPodcastFilters.getFilteredPodcastEpisodes(library.id, user, 'progress', 'finished', 'random', true, limit, 0)
return {
count,
items: libraryItems.map((li) => {
From dbf1f88efa66e9f4622d8e0459dbeb006e698fb6 Mon Sep 17 00:00:00 2001
From: Vito0912 <86927734+Vito0912@users.noreply.github.com>
Date: Tue, 18 Mar 2025 08:52:13 +0100
Subject: [PATCH 2/4] frontend code
---
.../modals/libraries/LibrarySettings.vue | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/client/components/modals/libraries/LibrarySettings.vue b/client/components/modals/libraries/LibrarySettings.vue
index d3b40de9..a0919b42 100644
--- a/client/components/modals/libraries/LibrarySettings.vue
+++ b/client/components/modals/libraries/LibrarySettings.vue
@@ -72,6 +72,17 @@
+
+
+
+
+
+ {{ $strings.LabelSettingsOnlyShowLaterBooksInContinueSeries }}
+ info
+
+
+
+
@@ -115,7 +126,8 @@ export default {
onlyShowLaterBooksInContinueSeries: false,
podcastSearchRegion: 'us',
markAsFinishedWhen: 'timeRemaining',
- markAsFinishedValue: 10
+ markAsFinishedValue: 10,
+ listenAgainOrdered: false
}
},
computed: {
@@ -177,7 +189,8 @@ export default {
onlyShowLaterBooksInContinueSeries: !!this.onlyShowLaterBooksInContinueSeries,
podcastSearchRegion: this.podcastSearchRegion,
markAsFinishedTimeRemaining: markAsFinishedTimeRemaining,
- markAsFinishedPercentComplete: markAsFinishedPercentComplete
+ markAsFinishedPercentComplete: markAsFinishedPercentComplete,
+ listenAgainOrdered: !!this.listenAgainOrdered
}
}
},
@@ -199,6 +212,7 @@ export default {
this.markAsFinishedWhen = 'timeRemaining'
}
this.markAsFinishedValue = this.librarySettings.markAsFinishedTimeRemaining || this.librarySettings.markAsFinishedPercentComplete || 10
+ this.listenAgainOrdered = !!this.librarySettings.listenAgainOrdered
}
},
mounted() {
From dd5da33a81bb247bd852d25fe8b716210c2b687b Mon Sep 17 00:00:00 2001
From: Vito0912 <86927734+Vito0912@users.noreply.github.com>
Date: Tue, 18 Mar 2025 09:01:45 +0100
Subject: [PATCH 3/4] added backend logic
---
server/models/Library.js | 7 +++++--
server/utils/queries/libraryFilters.js | 5 +++--
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/server/models/Library.js b/server/models/Library.js
index 708880aa..a7027da3 100644
--- a/server/models/Library.js
+++ b/server/models/Library.js
@@ -14,6 +14,7 @@ const Logger = require('../Logger')
* @property {string[]} metadataPrecedence
* @property {number} markAsFinishedTimeRemaining Time remaining in seconds to mark as finished. (defaults to 10s)
* @property {number} markAsFinishedPercentComplete Percent complete to mark as finished (0-100). If this is set it will be used over markAsFinishedTimeRemaining.
+ * @property {boolean} listenAgainOrdered Order listen again items by progress or random
*/
class Library extends Model {
@@ -61,7 +62,8 @@ class Library extends Model {
autoScanCronExpression: null,
podcastSearchRegion: 'us',
markAsFinishedPercentComplete: null,
- markAsFinishedTimeRemaining: 10
+ markAsFinishedTimeRemaining: 10,
+ listenAgainOrdered: false
}
} else {
return {
@@ -76,7 +78,8 @@ class Library extends Model {
onlyShowLaterBooksInContinueSeries: false,
metadataPrecedence: this.defaultMetadataPrecedence,
markAsFinishedPercentComplete: null,
- markAsFinishedTimeRemaining: 10
+ markAsFinishedTimeRemaining: 10,
+ listenAgainOrdered: false
}
}
}
diff --git a/server/utils/queries/libraryFilters.js b/server/utils/queries/libraryFilters.js
index a5646240..734204f0 100644
--- a/server/utils/queries/libraryFilters.js
+++ b/server/utils/queries/libraryFilters.js
@@ -163,8 +163,9 @@ module.exports = {
* @returns {Promise<{ items:oldLibraryItem[], count:number }>}
*/
async getMediaFinished(library, user, include, limit) {
+ const sortBy = library.settings.listenAgainOrdered ? 'progress' : 'random'
if (library.isBook) {
- const { libraryItems, count } = await libraryItemsBookFilters.getFilteredLibraryItems(library.id, user, 'progress', 'finished', 'random', true, false, include, limit, 0)
+ const { libraryItems, count } = await libraryItemsBookFilters.getFilteredLibraryItems(library.id, user, 'progress', 'finished', sortBy, true, false, include, limit, 0)
return {
items: libraryItems.map((li) => {
const oldLibraryItem = li.toOldJSONMinified()
@@ -179,7 +180,7 @@ module.exports = {
count
}
} else {
- const { libraryItems, count } = await libraryItemsPodcastFilters.getFilteredPodcastEpisodes(library.id, user, 'progress', 'finished', 'random', true, limit, 0)
+ const { libraryItems, count } = await libraryItemsPodcastFilters.getFilteredPodcastEpisodes(library.id, user, 'progress', 'finished', sortBy, true, limit, 0)
return {
count,
items: libraryItems.map((li) => {
From 25eefa93d63c208cee51d30e97e8a0376fa059ad Mon Sep 17 00:00:00 2001
From: Vito0912 <86927734+Vito0912@users.noreply.github.com>
Date: Tue, 18 Mar 2025 09:08:35 +0100
Subject: [PATCH 4/4] added setting
---
client/components/modals/libraries/LibrarySettings.vue | 4 ++--
client/strings/en-us.json | 2 ++
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/client/components/modals/libraries/LibrarySettings.vue b/client/components/modals/libraries/LibrarySettings.vue
index a0919b42..67a52c9e 100644
--- a/client/components/modals/libraries/LibrarySettings.vue
+++ b/client/components/modals/libraries/LibrarySettings.vue
@@ -75,9 +75,9 @@
-
+
- {{ $strings.LabelSettingsOnlyShowLaterBooksInContinueSeries }}
+ {{ $strings.LabelListenAgainOrdered }}
info
diff --git a/client/strings/en-us.json b/client/strings/en-us.json
index cdc65228..5c83cb50 100644
--- a/client/strings/en-us.json
+++ b/client/strings/en-us.json
@@ -418,6 +418,8 @@
"LabelLimit": "Limit",
"LabelLineSpacing": "Line spacing",
"LabelListenAgain": "Listen Again",
+ "LabelListenAgainOrdered": "Sort listen again by finish date",
+ "LabelListenAgainOrderedHelp": "If enabled, the listen again section in the shelf view will be sorted by the finish date instead of random order.",
"LabelLogLevelDebug": "Debug",
"LabelLogLevelInfo": "Info",
"LabelLogLevelWarn": "Warn",