mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
301 lines
9.4 KiB
Swift
301 lines
9.4 KiB
Swift
import Foundation
|
|
|
|
struct Table_Meta {
|
|
static let id: Int32 = 0
|
|
|
|
static func emptyKey() -> ValueBoxKey {
|
|
return ValueBoxKey(length: 4)
|
|
}
|
|
|
|
static func key(key: ValueBoxKey = Table_Meta.emptyKey()) -> ValueBoxKey {
|
|
key.setInt32(0, value: 0)
|
|
return key
|
|
}
|
|
}
|
|
|
|
struct Table_State {
|
|
static let id: Int32 = 1
|
|
|
|
static func emptyKey() -> ValueBoxKey {
|
|
return ValueBoxKey(length: 4)
|
|
}
|
|
|
|
static func key(key: ValueBoxKey = Table_State.emptyKey()) -> ValueBoxKey {
|
|
key.setInt32(0, value: 0)
|
|
return key
|
|
}
|
|
}
|
|
|
|
struct Table_Keychain {
|
|
static let id: Int32 = 2
|
|
|
|
static func key(string: String) -> ValueBoxKey {
|
|
let data = string.dataUsingEncoding(NSUTF8StringEncoding) ?? NSData()
|
|
let key = ValueBoxKey(length: data.length)
|
|
memcpy(key.memory, data.bytes, data.length)
|
|
return key
|
|
}
|
|
}
|
|
|
|
struct Table_Message {
|
|
static let id: Int32 = 4
|
|
|
|
static func emptyKey() -> ValueBoxKey {
|
|
return ValueBoxKey(length: 8 + 4 + 4 + 4)
|
|
}
|
|
|
|
static func lowerBoundKey(peerId: PeerId) -> ValueBoxKey {
|
|
let key = ValueBoxKey(length: 8)
|
|
key.setInt64(0, value: peerId.toInt64())
|
|
return key
|
|
}
|
|
|
|
static func upperBoundKey(peerId: PeerId) -> ValueBoxKey {
|
|
let key = ValueBoxKey(length: 8)
|
|
key.setInt64(0, value: peerId.toInt64())
|
|
return key.successor
|
|
}
|
|
|
|
static func key(index: MessageIndex, key: ValueBoxKey = Table_Message.emptyKey()) -> ValueBoxKey {
|
|
key.setInt64(0, value: index.id.peerId.toInt64())
|
|
key.setInt32(8, value: index.timestamp)
|
|
key.setInt32(8 + 4, value: index.id.namespace)
|
|
key.setInt32(8 + 4 + 4, value: index.id.id)
|
|
return key
|
|
}
|
|
|
|
static func set(message: Message, encoder: Encoder = Encoder()) -> MemoryBuffer {
|
|
encoder.reset()
|
|
return encoder.memoryBuffer()
|
|
}
|
|
|
|
static func get(value: ReadBuffer) -> Message? {
|
|
if let message = Decoder(buffer: value).decodeRootObject() as? Message {
|
|
return message
|
|
}
|
|
return nil
|
|
}
|
|
}
|
|
|
|
struct Table_GlobalMessageId {
|
|
static let id: Int32 = 5
|
|
|
|
static func emptyKey() -> ValueBoxKey {
|
|
return ValueBoxKey(length: 4)
|
|
}
|
|
|
|
static func key(id: Int32, key: ValueBoxKey = Table_GlobalMessageId.emptyKey()) -> ValueBoxKey {
|
|
key.setInt32(0, value: id)
|
|
return key
|
|
}
|
|
|
|
static func set(messageId: MessageId) -> MemoryBuffer {
|
|
let buffer = WriteBuffer()
|
|
|
|
var peerId: Int64 = messageId.peerId.toInt64()
|
|
buffer.write(&peerId, offset: 0, length: 8)
|
|
var id_namespace: Int32 = messageId.namespace
|
|
buffer.write(&id_namespace, offset: 0, length: 4)
|
|
|
|
return buffer
|
|
}
|
|
|
|
static func get(id: Int32, value: ReadBuffer) -> MessageId {
|
|
let offset = value.offset
|
|
|
|
var peerId: Int64 = 0
|
|
var id_namespace: Int32 = 0
|
|
value.read(&peerId, offset: 0, length: 8)
|
|
value.read(&id_namespace, offset: 0, length: 4)
|
|
value.offset = offset
|
|
|
|
return MessageId(peerId: PeerId(peerId), namespace: id_namespace, id: id)
|
|
}
|
|
}
|
|
|
|
struct Table_Media {
|
|
static let id: Int32 = 6
|
|
|
|
static func emptyKey() -> ValueBoxKey {
|
|
return ValueBoxKey(length: 4 + 8)
|
|
}
|
|
|
|
static func key(id: MediaId, key: ValueBoxKey = Table_Media.emptyKey()) -> ValueBoxKey {
|
|
key.setInt32(0, value: id.namespace)
|
|
key.setInt64(4, value: id.id)
|
|
return key
|
|
}
|
|
|
|
static func set(media: Media, encoder: Encoder = Encoder()) -> MemoryBuffer {
|
|
encoder.reset()
|
|
encoder.encodeRootObject(media)
|
|
return encoder.memoryBuffer()
|
|
}
|
|
|
|
static func get(value: ReadBuffer) -> Media? {
|
|
let decoder = Decoder(buffer: value)
|
|
if let media = decoder.decodeRootObject() as? Media {
|
|
return media
|
|
}
|
|
|
|
return nil
|
|
}
|
|
}
|
|
|
|
struct Table_Media_MessageIds {
|
|
static let id: Int32 = 3
|
|
|
|
static func emptyKey() -> ValueBoxKey {
|
|
return ValueBoxKey(length: 4 + 8 + 8 + 4 + 4)
|
|
}
|
|
|
|
static func key(id: MediaId, messageId: MessageId, key: ValueBoxKey = Table_Media_MessageIds.emptyKey()) -> ValueBoxKey {
|
|
key.setInt32(0, value: id.namespace)
|
|
key.setInt64(4, value: id.id)
|
|
key.setInt64(4 + 8, value: messageId.peerId.toInt64())
|
|
key.setInt32(4 + 8 + 8, value: messageId.namespace)
|
|
key.setInt32(4 + 8 + 8 + 4, value: messageId.id)
|
|
return key
|
|
}
|
|
|
|
static func lowerBoundKey(id: MediaId) -> ValueBoxKey {
|
|
let key = ValueBoxKey(length: 4 + 8)
|
|
key.setInt32(0, value: id.namespace)
|
|
key.setInt64(4, value: id.id)
|
|
return key
|
|
}
|
|
|
|
static func upperBoundKey(id: MediaId) -> ValueBoxKey {
|
|
let key = ValueBoxKey(length: 4 + 8)
|
|
key.setInt32(0, value: id.namespace)
|
|
key.setInt64(4, value: id.id)
|
|
return key.successor
|
|
}
|
|
|
|
static func getMessageId(key: ValueBoxKey) -> MessageId {
|
|
let peerId = key.getInt64(4 + 8)
|
|
let messageId_namespace: Int32 = key.getInt32(4 + 8 + 8)
|
|
let messageId_id: Int32 = key.getInt32(4 + 8 + 8 + 4)
|
|
return MessageId(peerId: PeerId(peerId), namespace: messageId_namespace, id: messageId_id)
|
|
}
|
|
}
|
|
|
|
struct Table_Peer {
|
|
static let id: Int32 = 7
|
|
|
|
static func emptyKey() -> ValueBoxKey {
|
|
return ValueBoxKey(length: 4 + 4)
|
|
}
|
|
|
|
static func key(id: PeerId, key: ValueBoxKey = Table_Peer.emptyKey()) -> ValueBoxKey {
|
|
key.setInt32(0, value: id.namespace)
|
|
key.setInt32(4, value: id.id)
|
|
return key
|
|
}
|
|
}
|
|
|
|
struct Table_PeerEntry_Sorted {
|
|
static let id: Int32 = 8
|
|
|
|
static func emptyKey() -> ValueBoxKey {
|
|
return ValueBoxKey(length: 4 + 4 + 4 + 8)
|
|
}
|
|
|
|
static func lowerBoundKey() -> ValueBoxKey {
|
|
let key = ValueBoxKey(length: 4)
|
|
key.setInt32(0, value: 0)
|
|
return key
|
|
}
|
|
|
|
static func upperBoundKey() -> ValueBoxKey {
|
|
let key = ValueBoxKey(length: 4)
|
|
key.setInt32(0, value: Int32.max)
|
|
return key
|
|
}
|
|
|
|
static func key(index: PeerViewEntryIndex, key: ValueBoxKey = Table_PeerEntry_Sorted.emptyKey()) -> ValueBoxKey {
|
|
key.setInt32(0, value: index.messageIndex.timestamp)
|
|
key.setInt32(4, value: index.messageIndex.id.namespace)
|
|
key.setInt32(4 + 4, value: index.messageIndex.id.id)
|
|
key.setInt64(4 + 4 + 4, value: index.peerId.toInt64())
|
|
return key
|
|
}
|
|
|
|
static func get(key: ValueBoxKey) -> PeerViewEntryIndex {
|
|
let messageIndex_timestamp = key.getInt32(0)
|
|
let messageIndex_id_namespace = key.getInt32(4)
|
|
let messageIndex_id_id = key.getInt32(4 + 4)
|
|
let messageIndex_peerId = key.getInt64(4 + 4 + 4)
|
|
return PeerViewEntryIndex(peerId: PeerId(messageIndex_peerId), messageIndex: MessageIndex(id: MessageId(peerId: PeerId(messageIndex_peerId), namespace: messageIndex_id_namespace, id: messageIndex_id_id), timestamp: messageIndex_timestamp))
|
|
}
|
|
}
|
|
|
|
struct Table_PeerEntry {
|
|
static let id: Int32 = 9
|
|
|
|
static func emptyKey() -> ValueBoxKey {
|
|
return ValueBoxKey(length: 8)
|
|
}
|
|
|
|
static func key(peerId: PeerId, key: ValueBoxKey = Table_PeerEntry.emptyKey()) -> ValueBoxKey {
|
|
key.setInt64(0, value: peerId.toInt64())
|
|
return key
|
|
}
|
|
|
|
static func set(index: PeerViewEntryIndex) -> MemoryBuffer {
|
|
let buffer = WriteBuffer()
|
|
|
|
var messageId_namespace: Int32 = index.messageIndex.id.namespace
|
|
var messageId_id: Int32 = index.messageIndex.id.id
|
|
var timestamp: Int32 = index.messageIndex.timestamp
|
|
buffer.write(&messageId_namespace, offset: 0, length: 4)
|
|
buffer.write(&messageId_id, offset: 0, length: 4)
|
|
buffer.write(×tamp, offset: 0, length: 4)
|
|
|
|
return buffer
|
|
}
|
|
|
|
static func get(peerId: PeerId, value: ReadBuffer) -> PeerViewEntryIndex {
|
|
let offset = value.offset
|
|
|
|
var messageId_namespace: Int32 = 0
|
|
var messageId_id: Int32 = 0
|
|
var timestamp: Int32 = 0
|
|
value.read(&messageId_namespace, offset: 0, length: 4)
|
|
value.read(&messageId_id, offset: 0, length: 4)
|
|
value.read(×tamp, offset: 0, length: 4)
|
|
let index = PeerViewEntryIndex(peerId: peerId, messageIndex: MessageIndex(id: MessageId(peerId: peerId, namespace: messageId_namespace, id: messageId_id), timestamp: timestamp))
|
|
value.offset = offset
|
|
|
|
return index
|
|
}
|
|
}
|
|
|
|
struct Table_MessageIndex {
|
|
static let id: Int32 = 11
|
|
|
|
static func emptyKey() -> ValueBoxKey {
|
|
return ValueBoxKey(length: 8 + 4 + 4)
|
|
}
|
|
|
|
static func key(id: MessageId, key: ValueBoxKey = Table_MessageIndex.emptyKey()) -> ValueBoxKey {
|
|
key.setInt64(0, value: id.peerId.toInt64())
|
|
key.setInt32(8, value: id.namespace)
|
|
key.setInt32(8 + 4, value: id.id)
|
|
return key
|
|
}
|
|
|
|
static func set(index: MessageIndex) -> MemoryBuffer {
|
|
let buffer = WriteBuffer()
|
|
var timestamp = index.timestamp
|
|
buffer.write(×tamp, offset: 0, length: 4)
|
|
return buffer.readBufferNoCopy()
|
|
}
|
|
|
|
static func get(id: MessageId, value: ReadBuffer) -> MessageIndex {
|
|
var timestamp: Int32 = 0
|
|
value.read(×tamp, offset: 0, length: 4)
|
|
return MessageIndex(id: MessageId(peerId: id.peerId, namespace: id.namespace, id: id.id), timestamp: timestamp)
|
|
}
|
|
}
|