diff --git a/client/components/modals/libraries/LibrarySettings.vue b/client/components/modals/libraries/LibrarySettings.vue
index d3b40de9..67a52c9e 100644
--- a/client/components/modals/libraries/LibrarySettings.vue
+++ b/client/components/modals/libraries/LibrarySettings.vue
@@ -72,6 +72,17 @@
+
+
+
+
+
+ {{ $strings.LabelListenAgainOrdered }}
+ 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() {
diff --git a/client/strings/en-us.json b/client/strings/en-us.json
index 2bf70b53..f0ffe533 100644
--- a/client/strings/en-us.json
+++ b/client/strings/en-us.json
@@ -419,6 +419,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",
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 7312b9d5..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', 'progress', 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', 'progress', true, limit, 0)
+ const { libraryItems, count } = await libraryItemsPodcastFilters.getFilteredPodcastEpisodes(library.id, user, 'progress', 'finished', sortBy, true, limit, 0)
return {
count,
items: libraryItems.map((li) => {