     
     var books:[ZSShelfModel] = []
     
+    var aikanBooks:[String:ZSAikanParserModel] = [:]
+    
     var localBooks:[ZSShelfModel] = []
     
     let helper = MonitorFileChangeHelp()
     
     var isScanning:Bool = false
+    
+    var queue:DispatchQueue = DispatchQueue(label: "com.shelf.update")
     
     private init(){
         createPath()

        let aikanFileName = bookUrl.md5()
        let aikanFilePath = booksPath.appending(aikanFileName)
        if let aikanModel = NSKeyedUnarchiver.unarchiveObject(withFile: aikanFilePath) as? ZSAikanParserModel {
            self.saveAikan(aikanModel)
            return aikanModel
        } else {
            let aikanURL = URL(fileURLWithPath: aikanFilePath)
            if let data = try? Data(contentsOf: aikanURL) {
                let json = try? JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.allowFragments) as? [String:Any]
                let aikanModel = ZSAikanParserModel.deserialize(from: json)
                return aikanModel
            }
        }
        return nil

        shelfModel.update = book.update
        shelfModel.latestChapterName = book.latestChapterName
        if modify(shelfModel) {
            queue.async {
                self.saveAikan(book)
            }
        }
    }
    
