mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-08-04 18:24:46 +02:00
parent
8512d5e693
commit
1dec8ae122
13 changed files with 213 additions and 83 deletions
|
@ -18,7 +18,6 @@ class LibraryScan {
|
|||
this.startedAt = null
|
||||
this.finishedAt = null
|
||||
this.elapsed = null
|
||||
this.error = null
|
||||
|
||||
this.resultsMissing = 0
|
||||
this.resultsAdded = 0
|
||||
|
@ -55,22 +54,6 @@ class LibraryScan {
|
|||
get elapsedTimestamp() {
|
||||
return secondsToTimestamp(this.elapsed / 1000)
|
||||
}
|
||||
get getScanEmitData() {
|
||||
return {
|
||||
id: this.libraryId,
|
||||
type: this.type,
|
||||
name: this.libraryName,
|
||||
error: this.error,
|
||||
results: {
|
||||
added: this.resultsAdded,
|
||||
updated: this.resultsUpdated,
|
||||
missing: this.resultsMissing
|
||||
}
|
||||
}
|
||||
}
|
||||
get totalResults() {
|
||||
return this.resultsAdded + this.resultsUpdated + this.resultsMissing
|
||||
}
|
||||
get logFilename() {
|
||||
return date.format(new Date(), 'YYYY-MM-DD') + '_' + this.id + '.txt'
|
||||
}
|
||||
|
@ -79,10 +62,19 @@ class LibraryScan {
|
|||
if (this.resultsAdded) strs.push(`${this.resultsAdded} added`)
|
||||
if (this.resultsUpdated) strs.push(`${this.resultsUpdated} updated`)
|
||||
if (this.resultsMissing) strs.push(`${this.resultsMissing} missing`)
|
||||
const changesDetected = strs.length > 0 ? strs.join(', ') : 'No changes detected'
|
||||
const changesDetected = strs.length > 0 ? strs.join(', ') : 'No changes needed'
|
||||
const timeElapsed = `(${elapsedPretty(this.elapsed / 1000)})`
|
||||
const error = this.error ? `${this.error}. ` : ''
|
||||
return `${error}${changesDetected} ${timeElapsed}`
|
||||
return `${changesDetected} ${timeElapsed}`
|
||||
}
|
||||
|
||||
get scanResults() {
|
||||
return {
|
||||
added: this.resultsAdded,
|
||||
updated: this.resultsUpdated,
|
||||
missing: this.resultsMissing,
|
||||
elapsed: this.elapsed,
|
||||
text: this.scanResultsString
|
||||
}
|
||||
}
|
||||
|
||||
toJSON() {
|
||||
|
@ -93,7 +85,6 @@ class LibraryScan {
|
|||
startedAt: this.startedAt,
|
||||
finishedAt: this.finishedAt,
|
||||
elapsed: this.elapsed,
|
||||
error: this.error,
|
||||
resultsAdded: this.resultsAdded,
|
||||
resultsUpdated: this.resultsUpdated,
|
||||
resultsMissing: this.resultsMissing
|
||||
|
@ -113,14 +104,9 @@ class LibraryScan {
|
|||
this.startedAt = Date.now()
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {string} error
|
||||
*/
|
||||
setComplete(error = null) {
|
||||
setComplete() {
|
||||
this.finishedAt = Date.now()
|
||||
this.elapsed = this.finishedAt - this.startedAt
|
||||
this.error = error
|
||||
}
|
||||
|
||||
getLogLevelString(level) {
|
||||
|
|
|
@ -18,6 +18,7 @@ const Task = require('../objects/Task')
|
|||
class LibraryScanner {
|
||||
constructor() {
|
||||
this.cancelLibraryScan = {}
|
||||
/** @type {string[]} - library ids */
|
||||
this.librariesScanning = []
|
||||
|
||||
this.scanningFilesChanged = false
|
||||
|
@ -30,7 +31,7 @@ class LibraryScanner {
|
|||
* @returns {boolean}
|
||||
*/
|
||||
isLibraryScanning(libraryId) {
|
||||
return this.librariesScanning.some((ls) => ls.id === libraryId)
|
||||
return this.librariesScanning.some((lid) => lid === libraryId)
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -38,8 +39,7 @@ class LibraryScanner {
|
|||
* @param {string} libraryId
|
||||
*/
|
||||
setCancelLibraryScan(libraryId) {
|
||||
const libraryScanning = this.librariesScanning.find((ls) => ls.id === libraryId)
|
||||
if (!libraryScanning) return
|
||||
if (!this.isLibraryScanning(libraryId)) return
|
||||
this.cancelLibraryScan[libraryId] = true
|
||||
}
|
||||
|
||||
|
@ -69,7 +69,7 @@ class LibraryScanner {
|
|||
const libraryScan = new LibraryScan()
|
||||
libraryScan.setData(library)
|
||||
libraryScan.verbose = true
|
||||
this.librariesScanning.push(libraryScan.getScanEmitData)
|
||||
this.librariesScanning.push(libraryScan.libraryId)
|
||||
|
||||
const taskData = {
|
||||
libraryId: library.id,
|
||||
|
@ -103,17 +103,31 @@ class LibraryScanner {
|
|||
await library.save()
|
||||
}
|
||||
|
||||
task.setFinished(`${canceled ? 'Canceled' : 'Completed'}. ${libraryScan.scanResultsString}`)
|
||||
task.data.scanResults = libraryScan.scanResults
|
||||
if (canceled) {
|
||||
const taskFinishedString = {
|
||||
text: 'Task canceled by user',
|
||||
key: 'MessageTaskCanceledByUser'
|
||||
}
|
||||
task.setFinished(taskFinishedString)
|
||||
} else {
|
||||
task.setFinished(null, true)
|
||||
}
|
||||
} catch (err) {
|
||||
libraryScan.setComplete(err)
|
||||
libraryScan.setComplete()
|
||||
|
||||
Logger.error(`[LibraryScanner] Library scan ${libraryScan.id} failed after ${libraryScan.elapsedTimestamp} | ${libraryScan.resultStats}.`, err)
|
||||
|
||||
task.setFailedText(`Failed. ${libraryScan.scanResultsString}`)
|
||||
task.data.scanResults = libraryScan.scanResults
|
||||
const taskFailedString = {
|
||||
text: 'Failed',
|
||||
key: 'MessageTaskFailed'
|
||||
}
|
||||
task.setFailed(taskFailedString)
|
||||
}
|
||||
|
||||
if (this.cancelLibraryScan[libraryScan.libraryId]) delete this.cancelLibraryScan[libraryScan.libraryId]
|
||||
this.librariesScanning = this.librariesScanning.filter((ls) => ls.id !== library.id)
|
||||
this.librariesScanning = this.librariesScanning.filter((lid) => lid !== library.id)
|
||||
|
||||
TaskManager.taskFinished(task)
|
||||
|
||||
|
@ -446,9 +460,15 @@ class LibraryScanner {
|
|||
if (results.added) resultStrs.push(`${results.added} added`)
|
||||
if (results.updated) resultStrs.push(`${results.updated} updated`)
|
||||
if (results.removed) resultStrs.push(`${results.removed} missing`)
|
||||
let scanResultStr = 'Scan finished with no changes'
|
||||
let scanResultStr = 'No changes needed'
|
||||
if (resultStrs.length) scanResultStr = resultStrs.join(', ')
|
||||
pendingTask.setFinished(scanResultStr)
|
||||
|
||||
pendingTask.data.scanResults = {
|
||||
...results,
|
||||
text: scanResultStr,
|
||||
elapsed: Date.now() - pendingTask.startedAt
|
||||
}
|
||||
pendingTask.setFinished(null, true)
|
||||
TaskManager.taskFinished(pendingTask)
|
||||
|
||||
this.scanningFilesChanged = false
|
||||
|
|
|
@ -364,7 +364,7 @@ class Scanner {
|
|||
|
||||
const libraryScan = new LibraryScan()
|
||||
libraryScan.setData(library, 'match')
|
||||
LibraryScanner.librariesScanning.push(libraryScan.getScanEmitData)
|
||||
LibraryScanner.librariesScanning.push(libraryScan.libraryId)
|
||||
const taskData = {
|
||||
libraryId: library.id
|
||||
}
|
||||
|
@ -397,15 +397,29 @@ class Scanner {
|
|||
|
||||
if (offset === 0) {
|
||||
Logger.error(`[Scanner] matchLibraryItems: Library has no items ${library.id}`)
|
||||
libraryScan.setComplete('Library has no items')
|
||||
task.setFailedText(libraryScan.error)
|
||||
libraryScan.setComplete()
|
||||
const taskFailedString = {
|
||||
text: 'No items found',
|
||||
key: 'MessageNoItemsFound'
|
||||
}
|
||||
task.setFailed(taskFailedString)
|
||||
} else {
|
||||
libraryScan.setComplete()
|
||||
task.setFinished(isCanceled ? 'Canceled' : libraryScan.scanResultsString)
|
||||
|
||||
task.data.scanResults = libraryScan.scanResults
|
||||
if (isCanceled) {
|
||||
const taskFinishedString = {
|
||||
text: 'Task canceled by user',
|
||||
key: 'MessageTaskCanceledByUser'
|
||||
}
|
||||
task.setFinished(taskFinishedString)
|
||||
} else {
|
||||
task.setFinished(null, true)
|
||||
}
|
||||
}
|
||||
|
||||
delete LibraryScanner.cancelLibraryScan[libraryScan.libraryId]
|
||||
LibraryScanner.librariesScanning = LibraryScanner.librariesScanning.filter((ls) => ls.id !== library.id)
|
||||
LibraryScanner.librariesScanning = LibraryScanner.librariesScanning.filter((lid) => lid !== library.id)
|
||||
TaskManager.taskFinished(task)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue