mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-01-08 00:08:14 +01:00
Fix:Watcher scanner to ignore non-media files that are not inside library item folders #834
This commit is contained in:
parent
372101592c
commit
9916a1e8f6
@ -512,6 +512,7 @@ class Scanner {
|
|||||||
}
|
}
|
||||||
var relFilePaths = folderGroups[folderId].fileUpdates.map(fileUpdate => fileUpdate.relPath)
|
var relFilePaths = folderGroups[folderId].fileUpdates.map(fileUpdate => fileUpdate.relPath)
|
||||||
var fileUpdateGroup = groupFilesIntoLibraryItemPaths(library.mediaType, relFilePaths)
|
var fileUpdateGroup = groupFilesIntoLibraryItemPaths(library.mediaType, relFilePaths)
|
||||||
|
|
||||||
if (!Object.keys(fileUpdateGroup).length) {
|
if (!Object.keys(fileUpdateGroup).length) {
|
||||||
Logger.info(`[Scanner] No important changes to scan for in folder "${folderId}"`)
|
Logger.info(`[Scanner] No important changes to scan for in folder "${folderId}"`)
|
||||||
continue;
|
continue;
|
||||||
|
@ -20,11 +20,22 @@ function isMediaFile(mediaType, ext) {
|
|||||||
// Output: map of files grouped into potential item dirs
|
// Output: map of files grouped into potential item dirs
|
||||||
function groupFilesIntoLibraryItemPaths(mediaType, paths) {
|
function groupFilesIntoLibraryItemPaths(mediaType, paths) {
|
||||||
// Step 1: Clean path, Remove leading "/", Filter out non-media files in root dir
|
// Step 1: Clean path, Remove leading "/", Filter out non-media files in root dir
|
||||||
|
var nonMediaFilePaths = []
|
||||||
var pathsFiltered = paths.map(path => {
|
var pathsFiltered = paths.map(path => {
|
||||||
return path.startsWith('/') ? path.slice(1) : path
|
return path.startsWith('/') ? path.slice(1) : path
|
||||||
}).filter(path => {
|
}).filter(path => {
|
||||||
let parsedPath = Path.parse(path)
|
let parsedPath = Path.parse(path)
|
||||||
return parsedPath.dir || (mediaType === 'book' && isMediaFile(mediaType, parsedPath.ext))
|
// Is not in root dir OR is a book media file
|
||||||
|
if (parsedPath.dir) {
|
||||||
|
if (!isMediaFile(mediaType, parsedPath.ext)) { // Seperate out non-media files
|
||||||
|
nonMediaFilePaths.push(path)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
} else if (mediaType === 'book' && isMediaFile(mediaType, parsedPath.ext)) { // (book media type supports single file audiobooks/ebooks in root dir)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
})
|
})
|
||||||
|
|
||||||
// Step 2: Sort by least number of directories
|
// Step 2: Sort by least number of directories
|
||||||
@ -64,6 +75,17 @@ 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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return itemGroup
|
return itemGroup
|
||||||
}
|
}
|
||||||
module.exports.groupFilesIntoLibraryItemPaths = groupFilesIntoLibraryItemPaths
|
module.exports.groupFilesIntoLibraryItemPaths = groupFilesIntoLibraryItemPaths
|
||||||
|
Loading…
Reference in New Issue
Block a user