From 3cafa87edacd0ff4d4b0edafd79ae8802b58232c Mon Sep 17 00:00:00 2001 From: advplyr Date: Sun, 28 Aug 2022 14:47:31 -0500 Subject: [PATCH] Add:Podcast episode table batch mark as finished #941 --- client/components/app/Appbar.vue | 2 +- client/components/app/BookShelfToolbar.vue | 2 +- .../tables/podcast/EpisodesTable.vue | 41 +++++++++++++++++-- server/controllers/MeController.js | 4 +- 4 files changed, 42 insertions(+), 7 deletions(-) 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

@@ -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}`)