Library scanner saves last scan info including metadata precedence. Remove force re-scan

This commit is contained in:
advplyr 2023-10-09 17:48:21 -05:00
parent f84634e978
commit c9a2fdcb29
4 changed files with 35 additions and 10 deletions

View File

@ -74,11 +74,6 @@ export default {
} }
] ]
if (this.isBookLibrary) { if (this.isBookLibrary) {
items.push({
text: this.$strings.ButtonForceReScan,
action: 'force-rescan',
value: 'force-rescan'
})
items.push({ items.push({
text: this.$strings.ButtonMatchBooks, text: this.$strings.ButtonMatchBooks,
action: 'match-books', action: 'match-books',

View File

@ -80,6 +80,9 @@ class Library extends Model {
mediaType: libraryExpanded.mediaType, mediaType: libraryExpanded.mediaType,
provider: libraryExpanded.provider, provider: libraryExpanded.provider,
settings: libraryExpanded.settings, settings: libraryExpanded.settings,
lastScan: libraryExpanded.lastScan?.valueOf() || null,
lastScanVersion: libraryExpanded.lastScanVersion || null,
lastScanMetadataPrecedence: libraryExpanded.extraData?.lastScanMetadataPrecedence || null,
createdAt: libraryExpanded.createdAt.valueOf(), createdAt: libraryExpanded.createdAt.valueOf(),
lastUpdate: libraryExpanded.updatedAt.valueOf() lastUpdate: libraryExpanded.updatedAt.valueOf()
}) })
@ -152,6 +155,9 @@ class Library extends Model {
if (oldLibrary.oldLibraryId) { if (oldLibrary.oldLibraryId) {
extraData.oldLibraryId = oldLibrary.oldLibraryId extraData.oldLibraryId = oldLibrary.oldLibraryId
} }
if (oldLibrary.lastScanMetadataPrecedence) {
extraData.lastScanMetadataPrecedence = oldLibrary.lastScanMetadataPrecedence
}
return { return {
id: oldLibrary.id, id: oldLibrary.id,
name: oldLibrary.name, name: oldLibrary.name,
@ -160,6 +166,8 @@ class Library extends Model {
mediaType: oldLibrary.mediaType || null, mediaType: oldLibrary.mediaType || null,
provider: oldLibrary.provider, provider: oldLibrary.provider,
settings: oldLibrary.settings?.toJSON() || {}, settings: oldLibrary.settings?.toJSON() || {},
lastScan: oldLibrary.lastScan || null,
lastScanVersion: oldLibrary.lastScanVersion || null,
createdAt: oldLibrary.createdAt, createdAt: oldLibrary.createdAt,
updatedAt: oldLibrary.lastUpdate, updatedAt: oldLibrary.lastUpdate,
extraData extraData

View File

@ -15,6 +15,9 @@ class Library {
this.provider = 'google' this.provider = 'google'
this.lastScan = 0 this.lastScan = 0
this.lastScanVersion = null
this.lastScanMetadataPrecedence = null
this.settings = null this.settings = null
this.createdAt = null this.createdAt = null
@ -53,6 +56,10 @@ class Library {
this.settings.disableWatcher = !!library.disableWatcher this.settings.disableWatcher = !!library.disableWatcher
} }
this.lastScan = library.lastScan
this.lastScanVersion = library.lastScanVersion
this.lastScanMetadataPrecedence = library.lastScanMetadataPrecedence
this.createdAt = library.createdAt this.createdAt = library.createdAt
this.lastUpdate = library.lastUpdate this.lastUpdate = library.lastUpdate
this.cleanOldValues() // mediaType changed for v2 and icon change for v2.2.2 this.cleanOldValues() // mediaType changed for v2 and icon change for v2.2.2
@ -84,6 +91,8 @@ class Library {
mediaType: this.mediaType, mediaType: this.mediaType,
provider: this.provider, provider: this.provider,
settings: this.settings.toJSON(), settings: this.settings.toJSON(),
lastScan: this.lastScan,
lastScanVersion: this.lastScanVersion,
createdAt: this.createdAt, createdAt: this.createdAt,
lastUpdate: this.lastUpdate lastUpdate: this.lastUpdate
} }

View File

@ -48,15 +48,21 @@ class LibraryScanner {
*/ */
async scan(library, forceRescan = false) { async scan(library, forceRescan = false) {
if (this.isLibraryScanning(library.id)) { if (this.isLibraryScanning(library.id)) {
Logger.error(`[Scanner] Already scanning ${library.id}`) Logger.error(`[LibraryScanner] Already scanning ${library.id}`)
return return
} }
if (!library.folders.length) { if (!library.folders.length) {
Logger.warn(`[Scanner] Library has no folders to scan "${library.name}"`) Logger.warn(`[LibraryScanner] Library has no folders to scan "${library.name}"`)
return return
} }
if (library.isBook && library.settings.metadataPrecedence.join() !== library.lastScanMetadataPrecedence?.join()) {
const lastScanMetadataPrecedence = library.lastScanMetadataPrecedence?.join() || 'Unset'
Logger.info(`[LibraryScanner] Library metadata precedence changed since last scan. From [${lastScanMetadataPrecedence}] to [${library.settings.metadataPrecedence.join()}]`)
forceRescan = true
}
const libraryScan = new LibraryScan() const libraryScan = new LibraryScan()
libraryScan.setData(library) libraryScan.setData(library)
libraryScan.verbose = true libraryScan.verbose = true
@ -64,18 +70,18 @@ class LibraryScanner {
SocketAuthority.emitter('scan_start', libraryScan.getScanEmitData) SocketAuthority.emitter('scan_start', libraryScan.getScanEmitData)
Logger.info(`[Scanner] Starting${forceRescan ? ' (forced)' : ''} library scan ${libraryScan.id} for ${libraryScan.libraryName}`) Logger.info(`[LibraryScanner] Starting${forceRescan ? ' (forced)' : ''} library scan ${libraryScan.id} for ${libraryScan.libraryName}`)
const canceled = await this.scanLibrary(libraryScan, forceRescan) const canceled = await this.scanLibrary(libraryScan, forceRescan)
if (canceled) { if (canceled) {
Logger.info(`[Scanner] Library scan canceled for "${libraryScan.libraryName}"`) Logger.info(`[LibraryScanner] Library scan canceled for "${libraryScan.libraryName}"`)
delete this.cancelLibraryScan[libraryScan.libraryId] delete this.cancelLibraryScan[libraryScan.libraryId]
} }
libraryScan.setComplete() libraryScan.setComplete()
Logger.info(`[Scanner] Library scan ${libraryScan.id} completed in ${libraryScan.elapsedTimestamp} | ${libraryScan.resultStats}`) Logger.info(`[LibraryScanner] Library scan ${libraryScan.id} completed in ${libraryScan.elapsedTimestamp} | ${libraryScan.resultStats}`)
this.librariesScanning = this.librariesScanning.filter(ls => ls.id !== library.id) this.librariesScanning = this.librariesScanning.filter(ls => ls.id !== library.id)
if (canceled && !libraryScan.totalResults) { if (canceled && !libraryScan.totalResults) {
@ -85,6 +91,13 @@ class LibraryScanner {
return return
} }
library.lastScan = Date.now()
library.lastScanVersion = packageJson.version
if (library.isBook) {
library.lastScanMetadataPrecedence = library.settings.metadataPrecedence
}
await Database.libraryModel.updateFromOld(library)
SocketAuthority.emitter('scan_complete', libraryScan.getScanEmitData) SocketAuthority.emitter('scan_complete', libraryScan.getScanEmitData)
if (libraryScan.totalResults) { if (libraryScan.totalResults) {