scanning system Bug fix

This commit is contained in:
Chris Li 2017-01-17 15:50:32 -05:00
parent 89c7feefc0
commit 4f314eef8f
3 changed files with 14 additions and 12 deletions

View File

@ -135,7 +135,7 @@ class SearchScopeAndHistoryController: SearchBaseTableController, UITableViewDel
let titleDescriptor = NSSortDescriptor(key: "title", ascending: true) let titleDescriptor = NSSortDescriptor(key: "title", ascending: true)
fetchRequest.sortDescriptors = [langDescriptor, titleDescriptor] fetchRequest.sortDescriptors = [langDescriptor, titleDescriptor]
fetchRequest.predicate = NSPredicate(format: "stateRaw == 2") fetchRequest.predicate = NSPredicate(format: "stateRaw == 2")
let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext, sectionNameKeyPath: nil, cacheName: "ScopeFRC" + Bundle.buildVersion) let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
fetchedResultsController.delegate = self fetchedResultsController.delegate = self
try? fetchedResultsController.performFetch() try? fetchedResultsController.performFetch()
return fetchedResultsController as! NSFetchedResultsController<Book> return fetchedResultsController as! NSFetchedResultsController<Book>

View File

@ -14,11 +14,13 @@ class ScanLocalBookOperation: Procedure {
private(set) var firstBookAdded = false private(set) var firstBookAdded = false
private(set) var shouldMigrateBookmarks = false private(set) var shouldMigrateBookmarks = false
private(set) var snapshot: URLSnapShot private(set) var oldSnapshot: URLSnapShot
private(set) var newSnapshot: URLSnapShot
private let time = Date() private let time = Date()
init(urlSnapshot: URLSnapShot) { init(snapshot: URLSnapShot) {
self.snapshot = urlSnapshot self.oldSnapshot = snapshot
self.newSnapshot = snapshot
self.context = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType) self.context = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
context.parent = AppDelegate.persistentContainer.viewContext context.parent = AppDelegate.persistentContainer.viewContext
context.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy context.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
@ -31,16 +33,16 @@ class ScanLocalBookOperation: Procedure {
override func execute() { override func execute() {
defer { finish() } defer { finish() }
newSnapshot = URLSnapShot()
if ZimMultiReader.shared.readers.count == 0 { if ZimMultiReader.shared.readers.count == 0 {
// when ZimMultiReader has not reader, only perform addition // when ZimMultiReader has not reader, only perform addition
// i.e., when app is launched initialize all zim readers // i.e., when app is launched initialize all zim readers, or when first book is added
updateReaders(addition: snapshot.zimFile) updateReaders(addition: newSnapshot.zimFile)
context.performAndWait {self.updateCoreData()} context.performAndWait {self.updateCoreData()}
} else { } else {
let newSnapshot = URLSnapShot()
var addition = newSnapshot - snapshot var addition = newSnapshot - oldSnapshot
let deletion = snapshot - newSnapshot let deletion = oldSnapshot - newSnapshot
snapshot = newSnapshot
if deletion.indexFolders.count > 0 { addition.zimFiles = newSnapshot.zimFile } if deletion.indexFolders.count > 0 { addition.zimFiles = newSnapshot.zimFile }

View File

@ -32,11 +32,11 @@ class ZimMultiReader: NSObject, DirectoryMonitorDelegate {
} }
func startScan() { func startScan() {
let operation = ScanLocalBookOperation(urlSnapshot: urlSnapShot) let operation = ScanLocalBookOperation(snapshot: urlSnapShot)
operation.add(observer: DidFinishObserver{ (operation, errors) in operation.add(observer: DidFinishObserver{ (operation, errors) in
guard let operation = operation as? ScanLocalBookOperation else {return} guard let operation = operation as? ScanLocalBookOperation else {return}
OperationQueue.main.addOperation({ OperationQueue.main.addOperation({
self.urlSnapShot = operation.snapshot self.urlSnapShot = operation.newSnapshot
guard operation.firstBookAdded else {return} guard operation.firstBookAdded else {return}
self.delegate?.firstBookAdded() self.delegate?.firstBookAdded()
}) })