From 934c0b9093c3d7c07257b20a02ec788837601213 Mon Sep 17 00:00:00 2001 From: advplyr Date: Wed, 6 Sep 2023 15:43:59 -0500 Subject: [PATCH] Fix watcher scanner detecting existing items --- server/scanner/LibraryScanner.js | 5 +++-- server/utils/scandir.js | 18 ++++++++++++++++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/server/scanner/LibraryScanner.js b/server/scanner/LibraryScanner.js index bbff5198..e53560f5 100644 --- a/server/scanner/LibraryScanner.js +++ b/server/scanner/LibraryScanner.js @@ -448,10 +448,10 @@ class LibraryScanner { const itemGroupingResults = {} for (const itemDir in fileUpdateGroup) { const fullPath = Path.posix.join(fileUtils.filePathToPOSIX(folder.path), itemDir) - const dirIno = await fileUtils.getIno(fullPath) const itemDirParts = itemDir.split('/').slice(0, -1) - const potentialChildDirs = [] + + const potentialChildDirs = [fullPath] for (let i = 0; i < itemDirParts.length; i++) { potentialChildDirs.push(Path.posix.join(fileUtils.filePathToPOSIX(folder.path), itemDir.split('/').slice(0, -1 - i).join('/'))) } @@ -462,6 +462,7 @@ class LibraryScanner { }) if (!existingLibraryItem) { + const dirIno = await fileUtils.getIno(fullPath) existingLibraryItem = await Database.libraryItemModel.findOneOld({ ino: dirIno }) diff --git a/server/utils/scandir.js b/server/utils/scandir.js index acf7ed60..42d157c5 100644 --- a/server/utils/scandir.js +++ b/server/utils/scandir.js @@ -86,10 +86,24 @@ function groupFilesIntoLibraryItemPaths(mediaType, paths) { // Step 4: Add in non-media files if they fit into item group if (nonMediaFilePaths.length) { + for (const nonMediaFilePath of nonMediaFilePaths) { const pathDir = Path.dirname(nonMediaFilePath) - if (itemGroup[pathDir]) { - itemGroup[pathDir].push(nonMediaFilePath) + const filename = Path.basename(nonMediaFilePath) + const dirparts = pathDir.split('/') + const numparts = dirparts.length + let _path = '' + + // Iterate over directories in path + for (let i = 0; i < numparts; i++) { + const dirpart = dirparts.shift() + _path = Path.posix.join(_path, dirpart) + if (itemGroup[_path]) { // Directory is a group + const relpath = Path.posix.join(dirparts.join('/'), filename) + itemGroup[_path].push(relpath) + } else if (!dirparts.length) { + itemGroup[_path] = [filename] + } } } }