From 2ebdb4482673371db2adb94c9e828ed209cc9a37 Mon Sep 17 00:00:00 2001 From: mikiher Date: Thu, 1 Feb 2024 12:03:12 +0200 Subject: [PATCH] Merge cover and media update in Match.vue into a single /media API call --- client/components/modals/item/tabs/Match.vue | 21 ++++-------------- server/controllers/LibraryItemController.js | 23 +++++++++++++------- 2 files changed, 19 insertions(+), 25 deletions(-) diff --git a/client/components/modals/item/tabs/Match.vue b/client/components/modals/item/tabs/Match.vue index b57e96122c..ef4a7753bf 100644 --- a/client/components/modals/item/tabs/Match.vue +++ b/client/components/modals/item/tabs/Match.vue @@ -533,24 +533,11 @@ export default { // Persist in local storage localStorage.setItem('selectedMatchUsage', JSON.stringify(this.selectedMatchUsage)) - if (updatePayload.metadata.cover) { - const coverPayload = { - url: updatePayload.metadata.cover - } - const success = await this.$axios.$post(`/api/items/${this.libraryItemId}/cover`, coverPayload).catch((error) => { - console.error('Failed to update', error) - return false - }) - if (success) { - this.$toast.success(this.$strings.ToastItemCoverUpdateSuccess) - } else { - this.$toast.error(this.$strings.ToastItemCoverUpdateFailed) - } - console.log('Updated cover') - delete updatePayload.metadata.cover - } - if (Object.keys(updatePayload).length) { + if (updatePayload.metadata.cover) { + updatePayload.url = updatePayload.metadata.cover + delete updatePayload.metadata.cover + } const mediaUpdatePayload = updatePayload const updateResult = await this.$axios.$patch(`/api/items/${this.libraryItemId}/media`, mediaUpdatePayload).catch((error) => { console.error('Failed to update', error) diff --git a/server/controllers/LibraryItemController.js b/server/controllers/LibraryItemController.js index 26b375a0fe..dfa1daeac8 100644 --- a/server/controllers/LibraryItemController.js +++ b/server/controllers/LibraryItemController.js @@ -124,6 +124,11 @@ class LibraryItemController { const libraryItem = req.libraryItem const mediaPayload = req.body + if (mediaPayload.url) { + await LibraryItemController.prototype.uploadCover.bind(this)(req, res, false) + if (res.writableEnded) return + } + // Book specific if (libraryItem.isBook) { await this.createAuthorsAndSeriesForItemUpdate(mediaPayload, libraryItem.libraryId) @@ -146,7 +151,7 @@ class LibraryItemController { seriesRemoved = libraryItem.media.metadata.series.filter(se => !seriesIdsInUpdate.includes(se.id)) } - const hasUpdates = libraryItem.media.update(mediaPayload) + const hasUpdates = libraryItem.media.update(mediaPayload) || mediaPayload.url if (hasUpdates) { libraryItem.updatedAt = Date.now() @@ -171,7 +176,7 @@ class LibraryItemController { } // POST: api/items/:id/cover - async uploadCover(req, res) { + async uploadCover(req, res, updateAndReturnJson = true) { if (!req.user.canUpload) { Logger.warn('User attempted to upload a cover without permission', req.user) return res.sendStatus(403) @@ -196,12 +201,14 @@ class LibraryItemController { return res.status(500).send('Unknown error occurred') } - await Database.updateLibraryItem(libraryItem) - SocketAuthority.emitter('item_updated', libraryItem.toJSONExpanded()) - res.json({ - success: true, - cover: result.cover - }) + if (updateAndReturnJson) { + await Database.updateLibraryItem(libraryItem) + SocketAuthority.emitter('item_updated', libraryItem.toJSONExpanded()) + res.json({ + success: true, + cover: result.cover + }) + } } // PATCH: api/items/:id/cover