Swiftgram/submodules/Postbox/Sources/PostboxUpgrade_17to18.swift
2019-11-01 17:11:12 +04:00

93 lines
3.9 KiB
Swift

import Foundation
private func convertNamespaces(value: ReadBuffer, buffer: WriteBuffer) {
var count: Int32 = 0
value.read(&count, offset: 0, length: 4)
buffer.write(&count, offset: 0, length: 4)
for _ in 0 ..< count {
var namespaceId: Int32 = 0
value.read(&namespaceId, offset: 0, length: 4)
buffer.write(&namespaceId, offset: 0, length: 4)
var kind: Int8 = 0
value.read(&kind, offset: 0, length: 1)
buffer.write(&kind, offset: 0, length: 1)
if kind == 0 {
var maxIncomingReadId: Int32 = 0
var maxOutgoingReadId: Int32 = 0
var maxKnownId: Int32 = 0
var count: Int32 = 0
value.read(&maxIncomingReadId, offset: 0, length: 4)
buffer.write(&maxIncomingReadId, offset: 0, length: 4)
value.read(&maxOutgoingReadId, offset: 0, length: 4)
buffer.write(&maxOutgoingReadId, offset: 0, length: 4)
value.read(&maxKnownId, offset: 0, length: 4)
buffer.write(&maxKnownId, offset: 0, length: 4)
value.read(&count, offset: 0, length: 4)
buffer.write(&count, offset: 0, length: 4)
var flags: Int32 = 0
buffer.write(&flags, offset: 0, length: 4)
} else {
var maxIncomingReadTimestamp: Int32 = 0
var maxIncomingReadIdPeerId: Int64 = 0
var maxIncomingReadIdNamespace: Int32 = 0
var maxIncomingReadIdId: Int32 = 0
var maxOutgoingReadTimestamp: Int32 = 0
var maxOutgoingReadIdPeerId: Int64 = 0
var maxOutgoingReadIdNamespace: Int32 = 0
var maxOutgoingReadIdId: Int32 = 0
var count: Int32 = 0
value.read(&maxIncomingReadTimestamp, offset: 0, length: 4)
buffer.write(&maxIncomingReadTimestamp, offset: 0, length: 4)
value.read(&maxIncomingReadIdPeerId, offset: 0, length: 8)
buffer.write(&maxIncomingReadIdPeerId, offset: 0, length: 8)
value.read(&maxIncomingReadIdNamespace, offset: 0, length: 4)
buffer.write(&maxIncomingReadIdNamespace, offset: 0, length: 4)
value.read(&maxIncomingReadIdId, offset: 0, length: 4)
buffer.write(&maxIncomingReadIdId, offset: 0, length: 4)
value.read(&maxOutgoingReadTimestamp, offset: 0, length: 4)
buffer.write(&maxOutgoingReadTimestamp, offset: 0, length: 4)
value.read(&maxOutgoingReadIdPeerId, offset: 0, length: 8)
buffer.write(&maxOutgoingReadIdPeerId, offset: 0, length: 8)
value.read(&maxOutgoingReadIdNamespace, offset: 0, length: 4)
buffer.write(&maxOutgoingReadIdNamespace, offset: 0, length: 4)
value.read(&maxOutgoingReadIdId, offset: 0, length: 4)
buffer.write(&maxOutgoingReadIdId, offset: 0, length: 4)
value.read(&count, offset: 0, length: 4)
buffer.write(&count, offset: 0, length: 4)
var flags: Int32 = 0
buffer.write(&flags, offset: 0, length: 4)
}
}
}
func postboxUpgrade_17to18(metadataTable: MetadataTable, valueBox: ValueBox, progress: (Float) -> Void) {
var converted: [Int64: Data] = [:]
let readStateTable = ValueBoxTable(id: 14, keyType: .int64, compactValuesOnCreation: false)
let buffer = WriteBuffer()
valueBox.scanInt64(readStateTable, values: { key, value in
buffer.reset()
convertNamespaces(value: value, buffer: buffer)
converted[key] = buffer.makeData()
return true
})
valueBox.removeAllFromTable(readStateTable)
let key = ValueBoxKey(length: 8)
for (int64key, data) in converted {
key.setInt64(0, value: int64key)
valueBox.set(readStateTable, key: key, value: MemoryBuffer(data: data))
}
metadataTable.setUserVersion(18)
}