Update:Added string localization for tasks #3303 #3352

This commit is contained in:
advplyr 2024-09-21 14:02:57 -05:00
parent 8512d5e693
commit 1dec8ae122
13 changed files with 213 additions and 83 deletions

View file

@ -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) {

View file

@ -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

View file

@ -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)
}
}