From 80aea0c82d55dde7f3ab198f5b5544393acd057d Mon Sep 17 00:00:00 2001 From: advplyr Date: Sat, 22 Jul 2023 07:50:47 -0500 Subject: [PATCH] Fix:Save metadata files when updating library items #1952 --- server/Database.js | 10 ++++++++-- server/Server.js | 31 ------------------------------- server/objects/LibraryItem.js | 6 +++++- 3 files changed, 13 insertions(+), 34 deletions(-) diff --git a/server/Database.js b/server/Database.js index 5e230161..7a8f9fa0 100644 --- a/server/Database.js +++ b/server/Database.js @@ -405,12 +405,14 @@ class Database { async createLibraryItem(oldLibraryItem) { if (!this.sequelize) return false + await oldLibraryItem.saveMetadata() await this.models.libraryItem.fullCreateFromOld(oldLibraryItem) this.libraryItems.push(oldLibraryItem) } - updateLibraryItem(oldLibraryItem) { + async updateLibraryItem(oldLibraryItem) { if (!this.sequelize) return false + await oldLibraryItem.saveMetadata() return this.models.libraryItem.fullUpdateFromOld(oldLibraryItem) } @@ -418,8 +420,11 @@ class Database { if (!this.sequelize) return false let updatesMade = 0 for (const oldLibraryItem of oldLibraryItems) { + await oldLibraryItem.saveMetadata() const hasUpdates = await this.models.libraryItem.fullUpdateFromOld(oldLibraryItem) - if (hasUpdates) updatesMade++ + if (hasUpdates) { + updatesMade++ + } } return updatesMade } @@ -427,6 +432,7 @@ class Database { async createBulkLibraryItems(oldLibraryItems) { if (!this.sequelize) return false for (const oldLibraryItem of oldLibraryItems) { + await oldLibraryItem.saveMetadata() await this.models.libraryItem.fullCreateFromOld(oldLibraryItem) this.libraryItems.push(oldLibraryItem) } diff --git a/server/Server.js b/server/Server.js index 38a01022..a1fbdd2a 100644 --- a/server/Server.js +++ b/server/Server.js @@ -105,7 +105,6 @@ class Server { } await this.cleanUserData() // Remove invalid user item progress - await this.purgeMetadata() // Remove metadata folders without library item await this.cacheManager.ensureCachePaths() await this.backupManager.init() @@ -243,36 +242,6 @@ class Server { await this.scanner.scanFilesChanged(fileUpdates) } - // Remove unused /metadata/items/{id} folders - async purgeMetadata() { - const itemsMetadata = Path.join(global.MetadataPath, 'items') - if (!(await fs.pathExists(itemsMetadata))) return - const foldersInItemsMetadata = await fs.readdir(itemsMetadata) - - let purged = 0 - await Promise.all(foldersInItemsMetadata.map(async foldername => { - const itemFullPath = fileUtils.filePathToPOSIX(Path.join(itemsMetadata, foldername)) - - const hasMatchingItem = Database.libraryItems.find(li => { - if (!li.media.coverPath) return false - return itemFullPath === fileUtils.filePathToPOSIX(Path.dirname(li.media.coverPath)) - }) - if (!hasMatchingItem) { - Logger.debug(`[Server] Purging unused metadata ${itemFullPath}`) - - await fs.remove(itemFullPath).then(() => { - purged++ - }).catch((err) => { - Logger.error(`[Server] Failed to delete folder path ${itemFullPath}`, err) - }) - } - })) - if (purged > 0) { - Logger.info(`[Server] Purged ${purged} unused library item metadata`) - } - return purged - } - // Remove user media progress with items that no longer exist & remove seriesHideFrom that no longer exist async cleanUserData() { for (const _user of Database.users) { diff --git a/server/objects/LibraryItem.js b/server/objects/LibraryItem.js index 25eed681..d7b2acaa 100644 --- a/server/objects/LibraryItem.js +++ b/server/objects/LibraryItem.js @@ -523,7 +523,10 @@ class LibraryItem { return this.media.getDirectPlayTracklist(episodeId) } - // Saves metadata.abs file + /** + * Save metadata.json/metadata.abs file + * @returns {boolean} true if saved + */ async saveMetadata() { if (this.mediaType === 'video' || this.mediaType === 'music') return @@ -556,6 +559,7 @@ class LibraryItem { await newLibraryFile.setDataFromPath(metadataFilePath, `metadata.json`) this.libraryFiles.push(newLibraryFile) } + Logger.debug(`[LibraryItem] Success saving abmetadata to "${metadataFilePath}"`) return true }).catch((error) => {