From d8f07eb956bb8ed9fb042b394d1cb0381e77a7aa Mon Sep 17 00:00:00 2001 From: Jason Axley Date: Fri, 15 Aug 2025 09:05:30 -0700 Subject: [PATCH] Fixed a few type issues --- server/Watcher.js | 8 ++-- server/managers/LogManager.js | 22 ++++----- .../utils/migrations/absMetadataMigration.js | 45 +++++++++++-------- 3 files changed, 41 insertions(+), 34 deletions(-) diff --git a/server/Watcher.js b/server/Watcher.js index c5f64917b..ec41659c0 100644 --- a/server/Watcher.js +++ b/server/Watcher.js @@ -18,14 +18,14 @@ class FolderWatcher extends EventEmitter { constructor() { super() - /** @type {{id:string, name:string, libraryFolders:import('./models/Folder')[], paths:string[], watcher:Watcher[]}[]} */ + /** @type {{id:string, name:string, libraryFolders:import('./models/LibraryFolder')[], paths:string[], watcher:Watcher[]}[]} */ this.libraryWatchers = [] /** @type {PendingFileUpdate[]} */ this.pendingFileUpdates = [] this.pendingDelay = 10000 - /** @type {NodeJS.Timeout} */ + /** @type {NodeJS.Timeout | null} */ this.pendingTimeout = null - /** @type {Task} */ + /** @type {Task | null} */ this.pendingTask = null this.filesBeingAdded = new Set() @@ -36,7 +36,7 @@ class FolderWatcher extends EventEmitter { this.ignoreDirs = [] /** @type {string[]} */ this.pendingDirsToRemoveFromIgnore = [] - /** @type {NodeJS.Timeout} */ + /** @type {NodeJS.Timeout | null} */ this.removeFromIgnoreTimer = null this.disabled = false diff --git a/server/managers/LogManager.js b/server/managers/LogManager.js index 731dfe70a..8946e8bf5 100644 --- a/server/managers/LogManager.js +++ b/server/managers/LogManager.js @@ -102,20 +102,20 @@ class LogManager { } /** - * - * @param {string} filename + * + * @param {string} filename */ async removeLogFile(filename) { const fullPath = Path.join(this.DailyLogPath, filename) const exists = await fs.pathExists(fullPath) if (!exists) { Logger.error(TAG, 'Invalid log dne ' + fullPath) - this.dailyLogFiles = this.dailyLogFiles.filter(dlf => dlf !== filename) + this.dailyLogFiles = this.dailyLogFiles.filter((dlf) => dlf !== filename) } else { try { await fs.unlink(fullPath) Logger.info(TAG, 'Removed daily log: ' + filename) - this.dailyLogFiles = this.dailyLogFiles.filter(dlf => dlf !== filename) + this.dailyLogFiles = this.dailyLogFiles.filter((dlf) => dlf !== filename) } catch (error) { Logger.error(TAG, 'Failed to unlink log file ' + fullPath) } @@ -123,8 +123,8 @@ class LogManager { } /** - * - * @param {LogObject} logObj + * + * @param {LogObject} logObj */ async logToFile(logObj) { // Fatal crashes get logged to a separate file @@ -152,8 +152,8 @@ class LogManager { } /** - * - * @param {LogObject} logObj + * + * @param {LogObject} logObj */ async logCrashToFile(logObj) { const line = JSON.stringify(logObj) + '\n' @@ -161,18 +161,18 @@ class LogManager { const logsDir = Path.join(global.MetadataPath, 'logs') await fs.ensureDir(logsDir) const crashLogPath = Path.join(logsDir, 'crash_logs.txt') - return fs.writeFile(crashLogPath, line, { flag: "a+" }).catch((error) => { + return fs.writeFile(crashLogPath, line, { flag: 'a+' }).catch((error) => { console.log('[LogManager] Appended crash log', error) }) } /** * Most recent 5000 daily logs - * + * * @returns {string} */ getMostRecentCurrentDailyLogs() { return this.currentDailyLog?.logs.slice(-5000) || '' } } -module.exports = LogManager \ No newline at end of file +module.exports = LogManager diff --git a/server/utils/migrations/absMetadataMigration.js b/server/utils/migrations/absMetadataMigration.js index 0d9f909a9..910ff77c1 100644 --- a/server/utils/migrations/absMetadataMigration.js +++ b/server/utils/migrations/absMetadataMigration.js @@ -5,17 +5,17 @@ const fileUtils = require('../fileUtils') const LibraryFile = require('../../objects/files/LibraryFile') /** - * - * @param {import('../../models/LibraryItem')} libraryItem + * + * @param {import('../../models/LibraryItem')} libraryItem * @returns {Promise} false if failed */ async function writeMetadataFileForItem(libraryItem) { const storeMetadataWithItem = global.ServerSettings.storeMetadataWithItem && !libraryItem.isFile const metadataPath = storeMetadataWithItem ? libraryItem.path : Path.join(global.MetadataPath, 'items', libraryItem.id) const metadataFilepath = fileUtils.filePathToPOSIX(Path.join(metadataPath, 'metadata.json')) - if ((await fsExtra.pathExists(metadataFilepath))) { + if (await fsExtra.pathExists(metadataFilepath)) { // Metadata file already exists do nothing - return null + return false } Logger.info(`[absMetadataMigration] metadata file not found at "${metadataFilepath}" - creating`) @@ -27,20 +27,24 @@ async function writeMetadataFileForItem(libraryItem) { const metadataJson = libraryItem.media.getAbsMetadataJson() // Save to file - const success = await fsExtra.writeFile(metadataFilepath, JSON.stringify(metadataJson, null, 2)).then(() => true).catch((error) => { - Logger.error(`[absMetadataMigration] failed to save metadata file at "${metadataFilepath}"`, error.message || error) - return false - }) + const success = await fsExtra + .writeFile(metadataFilepath, JSON.stringify(metadataJson, null, 2)) + .then(() => true) + .catch((error) => { + Logger.error(`[absMetadataMigration] failed to save metadata file at "${metadataFilepath}"`, error.message || error) + return false + }) if (!success) return false if (!storeMetadataWithItem) return true // No need to do anything else // Safety check to make sure library file with the same path isnt already there - libraryItem.libraryFiles = libraryItem.libraryFiles.filter(lf => lf.metadata.path !== metadataFilepath) + libraryItem.libraryFiles = libraryItem.libraryFiles.filter((lf) => lf.metadata.path !== metadataFilepath) // Put new library file in library item const newLibraryFile = new LibraryFile() await newLibraryFile.setDataFromPath(metadataFilepath, 'metadata.json') + // TODO: BUGBUG - this shouldn't be JSON and it may not be the right type LibraryFileObject libraryItem.libraryFiles.push(newLibraryFile.toJSON()) // Update library item timestamps and total size @@ -49,20 +53,23 @@ async function writeMetadataFileForItem(libraryItem) { libraryItem.mtime = libraryItemDirTimestamps.mtimeMs libraryItem.ctime = libraryItemDirTimestamps.ctimeMs let size = 0 - libraryItem.libraryFiles.forEach((lf) => size += (!isNaN(lf.metadata.size) ? Number(lf.metadata.size) : 0)) + libraryItem.libraryFiles.forEach((lf) => (size += !isNaN(lf.metadata.size) ? Number(lf.metadata.size) : 0)) libraryItem.size = size } libraryItem.changed('libraryFiles', true) - return libraryItem.save().then(() => true).catch((error) => { - Logger.error(`[absMetadataMigration] failed to save libraryItem "${libraryItem.id}"`, error.message || error) - return false - }) + return libraryItem + .save() + .then(() => true) + .catch((error) => { + Logger.error(`[absMetadataMigration] failed to save libraryItem "${libraryItem.id}"`, error.message || error) + return false + }) } /** - * - * @param {import('../../Database')} Database + * + * @param {import('../../Database')} Database * @param {number} [offset=0] * @param {number} [totalCreated=0] */ @@ -83,11 +90,11 @@ async function runMigration(Database, offset = 0, totalCreated = 0) { } /** - * - * @param {import('../../Database')} Database + * + * @param {import('../../Database')} Database */ module.exports.migrate = async (Database) => { Logger.info(`[absMetadataMigration] Starting metadata.json migration`) const totalCreated = await runMigration(Database) Logger.info(`[absMetadataMigration] Finished metadata.json migration (${totalCreated} files created)`) -} \ No newline at end of file +}