mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2024-12-20 19:06:06 +01:00
Merge pull request #3672 from Techwolfy/disc-folder-support
Support additional disc folder names
This commit is contained in:
commit
95c80a5b18
@ -133,8 +133,8 @@ class AudioFileScanner {
|
||||
|
||||
// Look for disc number in folder path e.g. /Book Title/CD01/audiofile.mp3
|
||||
const pathdir = Path.dirname(path).split('/').pop()
|
||||
if (pathdir && /^cd\d{1,3}$/i.test(pathdir)) {
|
||||
const discFromFolder = Number(pathdir.replace(/cd/i, ''))
|
||||
if (pathdir && /^(cd|dis[ck])\s*\d{1,3}$/i.test(pathdir)) {
|
||||
const discFromFolder = Number(pathdir.replace(/^(cd|dis[ck])\s*/i, ''))
|
||||
if (!isNaN(discFromFolder) && discFromFolder !== null) discNumber = discFromFolder
|
||||
}
|
||||
|
||||
|
@ -96,7 +96,7 @@ function groupFilesIntoLibraryItemPaths(mediaType, paths) {
|
||||
// This is the last directory, create group
|
||||
itemGroup[_path] = [Path.basename(path)]
|
||||
return
|
||||
} else if (dirparts.length === 1 && /^cd\d{1,3}$/i.test(dirparts[0])) {
|
||||
} else if (dirparts.length === 1 && /^(cd|dis[ck])\s*\d{1,3}$/i.test(dirparts[0])) {
|
||||
// Next directory is the last and is a CD dir, create group
|
||||
itemGroup[_path] = [Path.posix.join(dirparts[0], Path.basename(path))]
|
||||
return
|
||||
@ -179,7 +179,7 @@ function groupFileItemsIntoLibraryItemDirs(mediaType, fileItems, audiobooksOnly
|
||||
// This is the last directory, create group
|
||||
libraryItemGroup[_path] = [item.name]
|
||||
return
|
||||
} else if (dirparts.length === 1 && /^cd\d{1,3}$/i.test(dirparts[0])) {
|
||||
} else if (dirparts.length === 1 && /^(cd|dis[ck])\s*\d{1,3}$/i.test(dirparts[0])) {
|
||||
// Next directory is the last and is a CD dir, create group
|
||||
libraryItemGroup[_path] = [Path.posix.join(dirparts[0], item.name)]
|
||||
return
|
||||
|
52
test/server/utils/scandir.test.js
Normal file
52
test/server/utils/scandir.test.js
Normal file
@ -0,0 +1,52 @@
|
||||
const Path = require('path')
|
||||
const chai = require('chai')
|
||||
const expect = chai.expect
|
||||
const scanUtils = require('../../../server/utils/scandir')
|
||||
|
||||
describe('scanUtils', async () => {
|
||||
it('should properly group files into potential book library items', async () => {
|
||||
global.isWin = process.platform === 'win32'
|
||||
global.ServerSettings = {
|
||||
scannerParseSubtitle: true
|
||||
}
|
||||
|
||||
const filePaths = [
|
||||
'randomfile.txt', // Should be ignored because it's not a book media file
|
||||
'Book1.m4b', // Root single file audiobook
|
||||
'Book2/audiofile.m4b',
|
||||
'Book2/disk 001/audiofile.m4b',
|
||||
'Book2/disk 002/audiofile.m4b',
|
||||
'Author/Book3/audiofile.mp3',
|
||||
'Author/Book3/Disc 1/audiofile.mp3',
|
||||
'Author/Book3/Disc 2/audiofile.mp3',
|
||||
'Author/Series/Book4/cover.jpg',
|
||||
'Author/Series/Book4/CD1/audiofile.mp3',
|
||||
'Author/Series/Book4/CD2/audiofile.mp3',
|
||||
'Author/Series2/Book5/deeply/nested/cd 01/audiofile.mp3',
|
||||
'Author/Series2/Book5/deeply/nested/cd 02/audiofile.mp3',
|
||||
'Author/Series2/Book5/randomfile.js' // Should be ignored because it's not a book media file
|
||||
]
|
||||
|
||||
// Create fileItems to match the format of fileUtils.recurseFiles
|
||||
const fileItems = []
|
||||
for (const filePath of filePaths) {
|
||||
const dirname = Path.dirname(filePath)
|
||||
fileItems.push({
|
||||
name: Path.basename(filePath),
|
||||
reldirpath: dirname === '.' ? '' : dirname,
|
||||
extension: Path.extname(filePath),
|
||||
deep: filePath.split('/').length - 1
|
||||
})
|
||||
}
|
||||
|
||||
const libraryItemGrouping = scanUtils.groupFileItemsIntoLibraryItemDirs('book', fileItems, false)
|
||||
|
||||
expect(libraryItemGrouping).to.deep.equal({
|
||||
'Book1.m4b': 'Book1.m4b',
|
||||
Book2: ['audiofile.m4b', 'disk 001/audiofile.m4b', 'disk 002/audiofile.m4b'],
|
||||
'Author/Book3': ['audiofile.mp3', 'Disc 1/audiofile.mp3', 'Disc 2/audiofile.mp3'],
|
||||
'Author/Series/Book4': ['CD1/audiofile.mp3', 'CD2/audiofile.mp3', 'cover.jpg'],
|
||||
'Author/Series2/Book5/deeply/nested': ['cd 01/audiofile.mp3', 'cd 02/audiofile.mp3']
|
||||
})
|
||||
})
|
||||
})
|
Loading…
Reference in New Issue
Block a user