mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 22:25:57 +00:00
[WIP] Animated emoji
This commit is contained in:
@@ -63,7 +63,7 @@ final class MessageMediaTable: Table {
|
||||
return nil
|
||||
}
|
||||
|
||||
func set(_ media: Media, index: MessageIndex, messageHistoryTable: MessageHistoryTable, sharedWriteBuffer: WriteBuffer = WriteBuffer(), sharedEncoder: PostboxEncoder = PostboxEncoder()) -> InsertMediaResult {
|
||||
func set(_ media: Media, index: MessageIndex?, messageHistoryTable: MessageHistoryTable, sharedWriteBuffer: WriteBuffer = WriteBuffer(), sharedEncoder: PostboxEncoder = PostboxEncoder()) -> InsertMediaResult {
|
||||
if let id = media.id {
|
||||
if let value = self.valueBox.get(self.table, key: self.key(id)) {
|
||||
var type: Int8 = 0
|
||||
@@ -126,23 +126,45 @@ final class MessageMediaTable: Table {
|
||||
return .Embed(media)
|
||||
}
|
||||
} else {
|
||||
sharedWriteBuffer.reset()
|
||||
var type: Int8 = MediaEntryType.MessageReference.rawValue
|
||||
sharedWriteBuffer.write(&type, offset: 0, length: 1)
|
||||
var idPeerId: Int64 = index.id.peerId.toInt64()
|
||||
var idNamespace: Int32 = index.id.namespace
|
||||
var idId: Int32 = index.id.id
|
||||
var idTimestamp: Int32 = index.timestamp
|
||||
sharedWriteBuffer.write(&idPeerId, offset: 0, length: 8)
|
||||
sharedWriteBuffer.write(&idNamespace, offset: 0, length: 4)
|
||||
sharedWriteBuffer.write(&idId, offset: 0, length: 4)
|
||||
sharedWriteBuffer.write(&idTimestamp, offset: 0, length: 4)
|
||||
|
||||
withExtendedLifetime(sharedWriteBuffer, {
|
||||
self.valueBox.set(self.table, key: self.key(id), value: sharedWriteBuffer.readBufferNoCopy())
|
||||
})
|
||||
|
||||
return .Embed(media)
|
||||
if let index = index {
|
||||
sharedWriteBuffer.reset()
|
||||
var type: Int8 = MediaEntryType.MessageReference.rawValue
|
||||
sharedWriteBuffer.write(&type, offset: 0, length: 1)
|
||||
var idPeerId: Int64 = index.id.peerId.toInt64()
|
||||
var idNamespace: Int32 = index.id.namespace
|
||||
var idId: Int32 = index.id.id
|
||||
var idTimestamp: Int32 = index.timestamp
|
||||
sharedWriteBuffer.write(&idPeerId, offset: 0, length: 8)
|
||||
sharedWriteBuffer.write(&idNamespace, offset: 0, length: 4)
|
||||
sharedWriteBuffer.write(&idId, offset: 0, length: 4)
|
||||
sharedWriteBuffer.write(&idTimestamp, offset: 0, length: 4)
|
||||
|
||||
withExtendedLifetime(sharedWriteBuffer, {
|
||||
self.valueBox.set(self.table, key: self.key(id), value: sharedWriteBuffer.readBufferNoCopy())
|
||||
})
|
||||
|
||||
return .Embed(media)
|
||||
} else {
|
||||
sharedWriteBuffer.reset()
|
||||
var directType: Int8 = MediaEntryType.Direct.rawValue
|
||||
sharedWriteBuffer.write(&directType, offset: 0, length: 1)
|
||||
|
||||
sharedEncoder.reset()
|
||||
sharedEncoder.encodeRootObject(media)
|
||||
let mediaBuffer = sharedEncoder.memoryBuffer()
|
||||
var mediaBufferLength = Int32(mediaBuffer.length)
|
||||
sharedWriteBuffer.write(&mediaBufferLength, offset: 0, length: 4)
|
||||
sharedWriteBuffer.write(mediaBuffer.memory, offset: 0, length: mediaBuffer.length)
|
||||
|
||||
var messageReferenceCount: Int32 = 2
|
||||
sharedWriteBuffer.write(&messageReferenceCount, offset: 0, length: 4)
|
||||
|
||||
withExtendedLifetime(sharedWriteBuffer, {
|
||||
self.valueBox.set(self.table, key: self.key(id), value: sharedWriteBuffer.readBufferNoCopy())
|
||||
})
|
||||
|
||||
return .Reference
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return .Embed(media)
|
||||
|
||||
Reference in New Issue
Block a user