Swiftgram/submodules/TelegramCore/Sources/AccountManager/AccountManagerSharedDataTable.swift
2021-09-23 18:59:10 +03:00

40 lines
1.2 KiB
Swift

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<ValueBoxKey>) {
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)
}
}
}