mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2024-12-20 19:06:06 +01:00
72 lines
2.2 KiB
JavaScript
72 lines
2.2 KiB
JavaScript
const Path = require('path')
|
|
const dir = require('node-dir')
|
|
const Logger = require('../Logger')
|
|
|
|
const AUDIOBOOK_PARTS_FORMATS = ['m4b', 'mp3']
|
|
const INFO_FORMATS = ['nfo']
|
|
const IMAGE_FORMATS = ['png', 'jpg', 'jpeg', 'webp']
|
|
const EBOOK_FORMATS = ['epub', 'pdf']
|
|
|
|
function getPaths(path) {
|
|
return new Promise((resolve) => {
|
|
dir.paths(path, function (err, res) {
|
|
if (err) {
|
|
console.error(err)
|
|
resolve(false)
|
|
}
|
|
resolve(res)
|
|
})
|
|
})
|
|
}
|
|
|
|
function getFileType(ext) {
|
|
var ext_cleaned = ext.toLowerCase()
|
|
if (ext_cleaned.startsWith('.')) ext_cleaned = ext_cleaned.slice(1)
|
|
if (AUDIOBOOK_PARTS_FORMATS.includes(ext_cleaned)) return 'abpart'
|
|
if (INFO_FORMATS.includes(ext_cleaned)) return 'info'
|
|
if (IMAGE_FORMATS.includes(ext_cleaned)) return 'image'
|
|
if (EBOOK_FORMATS.includes(ext_cleaned)) return 'ebook'
|
|
return null
|
|
}
|
|
|
|
async function getAllAudiobookFiles(path) {
|
|
console.log('getAllAudiobooks', path)
|
|
var paths = await getPaths(path)
|
|
var books = {}
|
|
|
|
paths.files.forEach((filepath) => {
|
|
var relpath = filepath.replace(path, '').slice(1)
|
|
var pathformat = Path.parse(relpath)
|
|
var authordir = Path.dirname(pathformat.dir)
|
|
var bookdir = Path.basename(pathformat.dir)
|
|
if (!books[bookdir]) {
|
|
books[bookdir] = {
|
|
author: authordir,
|
|
title: bookdir,
|
|
path: pathformat.dir,
|
|
fullPath: Path.join(path, pathformat.dir),
|
|
parts: [],
|
|
infos: [],
|
|
images: [],
|
|
ebooks: [],
|
|
otherFiles: []
|
|
}
|
|
}
|
|
|
|
var filetype = getFileType(pathformat.ext)
|
|
if (filetype === 'abpart') {
|
|
books[bookdir].parts.push(`${pathformat.name}${pathformat.ext}`)
|
|
} else if (filetype === 'info') {
|
|
books[bookdir].infos.push(`${pathformat.name}${pathformat.ext}`)
|
|
} else if (filetype === 'image') {
|
|
books[bookdir].images.push(`${pathformat.name}${pathformat.ext}`)
|
|
} else if (filetype === 'ebook') {
|
|
books[bookdir].ebooks.push(`${pathformat.name}${pathformat.ext}`)
|
|
} else {
|
|
Logger.warn('Invalid file type', pathformat.name, pathformat.ext)
|
|
books[bookdir].otherFiles.push(`${pathformat.name}${pathformat.ext}`)
|
|
}
|
|
})
|
|
return Object.values(books)
|
|
}
|
|
module.exports.getAllAudiobookFiles = getAllAudiobookFiles |