From a5ebd89817cf1e22306252ea613190fcf0315a08 Mon Sep 17 00:00:00 2001 From: advplyr Date: Thu, 7 Nov 2024 16:32:05 -0600 Subject: [PATCH] Update FolderWatcher to singleton --- server/Server.js | 9 ++++----- server/Watcher.js | 2 +- server/controllers/LibraryController.js | 7 ++++--- server/controllers/MiscController.js | 7 ++++--- server/managers/PodcastManager.js | 9 ++++----- server/routers/ApiRouter.js | 2 -- 6 files changed, 17 insertions(+), 19 deletions(-) diff --git a/server/Server.js b/server/Server.js index 58a2079e..be129464 100644 --- a/server/Server.js +++ b/server/Server.js @@ -62,7 +62,6 @@ class Server { fs.mkdirSync(global.MetadataPath) } - this.watcher = new Watcher() this.auth = new Auth() // Managers @@ -70,7 +69,7 @@ class Server { this.backupManager = new BackupManager() this.abMergeManager = new AbMergeManager() this.playbackSessionManager = new PlaybackSessionManager() - this.podcastManager = new PodcastManager(this.watcher) + this.podcastManager = new PodcastManager() this.audioMetadataManager = new AudioMetadataMangaer() this.rssFeedManager = new RssFeedManager() this.cronManager = new CronManager(this.podcastManager, this.playbackSessionManager) @@ -147,9 +146,9 @@ class Server { if (Database.serverSettings.scannerDisableWatcher) { Logger.info(`[Server] Watcher is disabled`) - this.watcher.disabled = true + Watcher.disabled = true } else { - this.watcher.initWatcher(libraries) + Watcher.initWatcher(libraries) } } @@ -435,7 +434,7 @@ class Server { */ async stop() { Logger.info('=== Stopping Server ===') - await this.watcher.close() + Watcher.close() Logger.info('Watcher Closed') return new Promise((resolve) => { diff --git a/server/Watcher.js b/server/Watcher.js index 0e34fc66..8c2d652e 100644 --- a/server/Watcher.js +++ b/server/Watcher.js @@ -409,4 +409,4 @@ class FolderWatcher extends EventEmitter { }, 5000) } } -module.exports = FolderWatcher +module.exports = new FolderWatcher() diff --git a/server/controllers/LibraryController.js b/server/controllers/LibraryController.js index 61ffb5bd..0bd499f1 100644 --- a/server/controllers/LibraryController.js +++ b/server/controllers/LibraryController.js @@ -17,6 +17,7 @@ const naturalSort = createNewSortInstance({ const LibraryScanner = require('../scanner/LibraryScanner') const Scanner = require('../scanner/Scanner') const Database = require('../Database') +const Watcher = require('../Watcher') const libraryFilters = require('../utils/queries/libraryFilters') const libraryItemsPodcastFilters = require('../utils/queries/libraryItemsPodcastFilters') const authorFilters = require('../utils/queries/authorFilters') @@ -158,7 +159,7 @@ class LibraryController { SocketAuthority.emitter('library_added', library.toOldJSON(), userFilter) // Add library watcher - this.watcher.addLibrary(library) + Watcher.addLibrary(library) res.json(library.toOldJSON()) } @@ -440,7 +441,7 @@ class LibraryController { req.library.libraryFolders = await req.library.getLibraryFolders() // Update watcher - this.watcher.updateLibrary(req.library) + Watcher.updateLibrary(req.library) hasUpdates = true } @@ -466,7 +467,7 @@ class LibraryController { */ async delete(req, res) { // Remove library watcher - this.watcher.removeLibrary(req.library) + Watcher.removeLibrary(req.library) // Remove collections for library const numCollectionsRemoved = await Database.collectionModel.removeAllForLibrary(req.library.id) diff --git a/server/controllers/MiscController.js b/server/controllers/MiscController.js index f3dd0c6d..cf901bea 100644 --- a/server/controllers/MiscController.js +++ b/server/controllers/MiscController.js @@ -5,6 +5,7 @@ const fs = require('../libs/fsExtra') const Logger = require('../Logger') const SocketAuthority = require('../SocketAuthority') const Database = require('../Database') +const Watcher = require('../Watcher') const libraryItemFilters = require('../utils/queries/libraryItemFilters') const patternValidation = require('../libs/nodeCron/pattern-validation') @@ -557,10 +558,10 @@ class MiscController { switch (type) { case 'add': - this.watcher.onFileAdded(libraryId, path) + Watcher.onFileAdded(libraryId, path) break case 'unlink': - this.watcher.onFileRemoved(libraryId, path) + Watcher.onFileRemoved(libraryId, path) break case 'rename': const oldPath = req.body.oldPath @@ -568,7 +569,7 @@ class MiscController { Logger.error(`[MiscController] Invalid request body for updateWatchedPath. oldPath is required for rename.`) return res.sendStatus(400) } - this.watcher.onFileRename(libraryId, oldPath, path) + Watcher.onFileRename(libraryId, oldPath, path) break default: Logger.error(`[MiscController] Invalid type for updateWatchedPath. type: "${type}"`) diff --git a/server/managers/PodcastManager.js b/server/managers/PodcastManager.js index 503f47c0..f9eb72e4 100644 --- a/server/managers/PodcastManager.js +++ b/server/managers/PodcastManager.js @@ -1,6 +1,7 @@ const Logger = require('../Logger') const SocketAuthority = require('../SocketAuthority') const Database = require('../Database') +const Watcher = require('../Watcher') const fs = require('../libs/fsExtra') @@ -23,9 +24,7 @@ const AudioFile = require('../objects/files/AudioFile') const LibraryItem = require('../objects/LibraryItem') class PodcastManager { - constructor(watcher) { - this.watcher = watcher - + constructor() { this.downloadQueue = [] this.currentDownload = null @@ -97,7 +96,7 @@ class PodcastManager { } // Ignores all added files to this dir - this.watcher.addIgnoreDir(this.currentDownload.libraryItem.path) + Watcher.addIgnoreDir(this.currentDownload.libraryItem.path) // Make sure podcast library item folder exists if (!(await fs.pathExists(this.currentDownload.libraryItem.path))) { @@ -151,7 +150,7 @@ class PodcastManager { SocketAuthority.emitter('episode_download_finished', this.currentDownload.toJSONForClient()) SocketAuthority.emitter('episode_download_queue_updated', this.getDownloadQueueDetails()) - this.watcher.removeIgnoreDir(this.currentDownload.libraryItem.path) + Watcher.removeIgnoreDir(this.currentDownload.libraryItem.path) this.currentDownload = null if (this.downloadQueue.length) { this.startPodcastEpisodeDownload(this.downloadQueue.shift()) diff --git a/server/routers/ApiRouter.js b/server/routers/ApiRouter.js index c9399d79..7f21c3ac 100644 --- a/server/routers/ApiRouter.js +++ b/server/routers/ApiRouter.js @@ -45,8 +45,6 @@ class ApiRouter { this.abMergeManager = Server.abMergeManager /** @type {import('../managers/BackupManager')} */ this.backupManager = Server.backupManager - /** @type {import('../Watcher')} */ - this.watcher = Server.watcher /** @type {import('../managers/PodcastManager')} */ this.podcastManager = Server.podcastManager /** @type {import('../managers/AudioMetadataManager')} */