Add: Force re-scan library

This commit is contained in:
Igor Kaldowski 2021-12-04 23:57:47 +00:00
parent f6d43ea60f
commit b68c181631
3 changed files with 9 additions and 5 deletions

View File

@ -10,6 +10,7 @@
<p class="text-xl font-book pl-4 hover:underline cursor-pointer" @click.stop="$emit('click', library)">{{ library.name }}</p> <p class="text-xl font-book pl-4 hover:underline cursor-pointer" @click.stop="$emit('click', library)">{{ library.name }}</p>
<div class="flex-grow" /> <div class="flex-grow" />
<ui-btn v-show="isHovering && !libraryScan && canScan" small color="bg" @click.stop="scan">Scan</ui-btn> <ui-btn v-show="isHovering && !libraryScan && canScan" small color="bg" @click.stop="scan">Scan</ui-btn>
<ui-btn v-show="isHovering && !libraryScan && canScan" small color="bg" class="ml-2" @click.stop="forceScan">Force Re-Scan</ui-btn>
<span v-show="isHovering && !libraryScan && showEdit && canEdit" class="material-icons text-xl text-gray-300 hover:text-gray-50 ml-4 cursor-pointer" @click.stop="editClick">edit</span> <span v-show="isHovering && !libraryScan && showEdit && canEdit" class="material-icons text-xl text-gray-300 hover:text-gray-50 ml-4 cursor-pointer" @click.stop="editClick">edit</span>
<span v-show="!libraryScan && isHovering && showEdit && canDelete && !isDeleting" class="material-icons text-xl text-gray-300 ml-3" :class="isMain ? 'text-opacity-5 cursor-not-allowed' : 'hover:text-gray-50 cursor-pointer'" @click.stop="deleteClick">delete</span> <span v-show="!libraryScan && isHovering && showEdit && canDelete && !isDeleting" class="material-icons text-xl text-gray-300 ml-3" :class="isMain ? 'text-opacity-5 cursor-not-allowed' : 'hover:text-gray-50 cursor-pointer'" @click.stop="deleteClick">delete</span>
<div v-show="isDeleting" class="text-xl text-gray-300 ml-3 animate-spin"> <div v-show="isDeleting" class="text-xl text-gray-300 ml-3 animate-spin">
@ -67,6 +68,9 @@ export default {
scan() { scan() {
this.$root.socket.emit('scan', this.library.id) this.$root.socket.emit('scan', this.library.id)
}, },
forceScan() {
this.$root.socket.emit('scan', this.library.id, {forceRescan: true})
},
deleteClick() { deleteClick() {
if (this.isMain) return if (this.isMain) return
if (confirm(`Are you sure you want to permanently delete library "${this.library.name}"?`)) { if (confirm(`Are you sure you want to permanently delete library "${this.library.name}"?`)) {

View File

@ -316,9 +316,9 @@ class Server {
await this.scanner2.scanFilesChanged(fileUpdates) await this.scanner2.scanFilesChanged(fileUpdates)
} }
async scan(libraryId) { async scan(libraryId, options = {}) {
Logger.info('[Server] Starting Scan') Logger.info('[Server] Starting Scan')
await this.scanner2.scan(libraryId) await this.scanner2.scan(libraryId, options)
// await this.scanner.scan(libraryId) // await this.scanner.scan(libraryId)
Logger.info('[Server] Scan complete') Logger.info('[Server] Scan complete')
} }

View File

@ -221,7 +221,7 @@ class Scanner {
} }
} else { } else {
var checkRes = audiobook.checkScanData(dataFound, version) var checkRes = audiobook.checkScanData(dataFound, version)
if (checkRes.newAudioFileData.length || checkRes.newOtherFileData.length) { // Audiobook has new files if (checkRes.newAudioFileData.length || checkRes.newOtherFileData.length || libraryScan.scanOptions.forceRescan) { // Audiobook has new files
checkRes.audiobook = audiobook checkRes.audiobook = audiobook
checkRes.bookScanData = dataFound checkRes.bookScanData = dataFound
audiobookDataToRescan.push(checkRes) audiobookDataToRescan.push(checkRes)
@ -325,13 +325,13 @@ class Scanner {
libraryScan.addLog(LogLevel.DEBUG, `Library "${libraryScan.libraryName}" Re-scanning "${audiobook.path}"`) libraryScan.addLog(LogLevel.DEBUG, `Library "${libraryScan.libraryName}" Re-scanning "${audiobook.path}"`)
// Sync other files first to use local images as cover before extracting audio file cover // Sync other files first to use local images as cover before extracting audio file cover
if (newOtherFileData.length) { if (newOtherFileData.length || libraryScan.scanOptions.forceRescan) {
// TODO: Cleanup other file sync // TODO: Cleanup other file sync
var allOtherFiles = newOtherFileData.concat(audiobook._otherFiles) var allOtherFiles = newOtherFileData.concat(audiobook._otherFiles)
await audiobook.syncOtherFiles(allOtherFiles, this.MetadataPath, libraryScan.preferOpfMetadata) await audiobook.syncOtherFiles(allOtherFiles, this.MetadataPath, libraryScan.preferOpfMetadata)
} }
if (newAudioFileData.length) { if (newAudioFileData.length || libraryScan.scanOptions.forceRescan) {
await AudioFileScanner.scanAudioFiles(newAudioFileData, bookScanData, audiobook, libraryScan.preferAudioMetadata, libraryScan) await AudioFileScanner.scanAudioFiles(newAudioFileData, bookScanData, audiobook, libraryScan.preferAudioMetadata, libraryScan)
// Extract embedded cover art if cover is not already in directory // Extract embedded cover art if cover is not already in directory