import Foundation import Postbox final class AccountManagerSharedDataTable: Table { private var values:[ValueBoxKey : PreferencesEntry] = [:] static func tableSpec(_ id: Int32) -> ValueBoxTable { return ValueBoxTable(id: id, keyType: .binary, compactValuesOnCreation: false) } func get(key: ValueBoxKey) -> PreferencesEntry? { if let object = self.values[key] { return object } else if let value = self.valueBox.get(self.table, key: key) { return PreferencesEntry(data: value.makeData()) } else { return nil } } func set(key: ValueBoxKey, value: PreferencesEntry?, updatedKeys: inout Set) { if let value = value { if let current = self.get(key: key), current == value { return } self.valueBox.set(self.table, key: key, value: ReadBuffer(data: value.data)) updatedKeys.insert(key) self.values[key] = value } else if self.get(key: key) != nil { self.valueBox.remove(self.table, key: key, secure: false) updatedKeys.insert(key) self.values.removeValue(forKey: key) } } }