diff --git a/client/components/app/Appbar.vue b/client/components/app/Appbar.vue
index 4b0d923c..cc417739 100644
--- a/client/components/app/Appbar.vue
+++ b/client/components/app/Appbar.vue
@@ -158,7 +158,7 @@ export default {
var newIsFinished = !this.selectedIsFinished
var updateProgressPayloads = this.selectedLibraryItems.map((lid) => {
return {
- id: lid,
+ libraryItemId: lid,
isFinished: newIsFinished
}
})
diff --git a/client/components/app/BookShelfToolbar.vue b/client/components/app/BookShelfToolbar.vue
index e6e49e92..24435459 100644
--- a/client/components/app/BookShelfToolbar.vue
+++ b/client/components/app/BookShelfToolbar.vue
@@ -228,7 +228,7 @@ export default {
this.processingSeries = true
var updateProgressPayloads = this.seriesLibraryItemIds.map((lid) => {
return {
- id: lid,
+ libraryItemId: lid,
isFinished: newIsFinished
}
})
diff --git a/client/components/tables/podcast/EpisodesTable.vue b/client/components/tables/podcast/EpisodesTable.vue
index 26452313..20864cdd 100644
--- a/client/components/tables/podcast/EpisodesTable.vue
+++ b/client/components/tables/podcast/EpisodesTable.vue
@@ -4,8 +4,11 @@
Episodes
- Remove {{ selectedEpisodes.length }} episode{{ selectedEpisodes.length > 1 ? 's' : '' }}
- Cancel
+
+
+
+ Remove {{ selectedEpisodes.length }} episode{{ selectedEpisodes.length > 1 ? 's' : '' }}
+ Cancel
@@ -34,7 +37,8 @@ export default {
selectedEpisode: null,
showPodcastRemoveModal: false,
selectedEpisodes: [],
- episodesToRemove: []
+ episodesToRemove: [],
+ processing: false
}
},
watch: {
@@ -65,9 +69,40 @@ export default {
}
return String(a[this.sortKey]).localeCompare(String(b[this.sortKey]), undefined, { numeric: true, sensitivity: 'base' })
})
+ },
+ selectedIsFinished() {
+ // Find an item that is not finished, if none then all items finished
+ return !this.selectedEpisodes.find((episode) => {
+ var itemProgress = this.$store.getters['user/getUserMediaProgress'](this.libraryItem.id, episode.id)
+ return !itemProgress || !itemProgress.isFinished
+ })
}
},
methods: {
+ toggleBatchFinished() {
+ this.processing = true
+ var newIsFinished = !this.selectedIsFinished
+ var updateProgressPayloads = this.selectedEpisodes.map((episode) => {
+ return {
+ libraryItemId: this.libraryItem.id,
+ episodeId: episode.id,
+ isFinished: newIsFinished
+ }
+ })
+
+ this.$axios
+ .patch(`/api/me/progress/batch/update`, updateProgressPayloads)
+ .then(() => {
+ this.$toast.success('Batch update success!')
+ this.processing = false
+ this.clearSelected()
+ })
+ .catch((error) => {
+ this.$toast.error('Batch update failed')
+ console.error('Failed to batch update read/not read', error)
+ this.processing = false
+ })
+ },
removeEpisodeModalToggled(val) {
if (!val) this.episodesToRemove = []
},
diff --git a/server/controllers/MeController.js b/server/controllers/MeController.js
index 8e48dc11..d9aca2e9 100644
--- a/server/controllers/MeController.js
+++ b/server/controllers/MeController.js
@@ -96,9 +96,9 @@ class MeController {
var shouldUpdate = false
itemProgressPayloads.forEach((itemProgress) => {
- var libraryItem = this.db.libraryItems.find(li => li.id === itemProgress.id) // Make sure this library item exists
+ var libraryItem = this.db.libraryItems.find(li => li.id === itemProgress.libraryItemId) // Make sure this library item exists
if (libraryItem) {
- var wasUpdated = req.user.createUpdateMediaProgress(libraryItem, itemProgress)
+ var wasUpdated = req.user.createUpdateMediaProgress(libraryItem, itemProgress, itemProgress.episodeId)
if (wasUpdated) shouldUpdate = true
} else {
Logger.error(`[MeController] batchUpdateMediaProgress: Library Item does not exist ${itemProgress.id}`)