mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 14:20:20 +00:00
Update API
This commit is contained in:
@@ -10,16 +10,38 @@ private class AdMessagesHistoryContextImpl {
|
||||
case text
|
||||
case textEntities
|
||||
case media
|
||||
case authorId
|
||||
case target
|
||||
case messageId
|
||||
case startParam
|
||||
}
|
||||
|
||||
enum Target: Equatable, Codable {
|
||||
enum DecodingError: Error {
|
||||
case generic
|
||||
}
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case peer
|
||||
}
|
||||
|
||||
case peer(PeerId)
|
||||
|
||||
init(from decoder: Decoder) throws {
|
||||
let container = try decoder.container(keyedBy: CodingKeys.self)
|
||||
|
||||
if let peer = try container.decodeIfPresent(Int64.self, forKey: .peer) {
|
||||
self = .peer(PeerId(peer))
|
||||
} else {
|
||||
throw DecodingError.generic
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public let opaqueId: Data
|
||||
public let text: String
|
||||
public let textEntities: [MessageTextEntity]
|
||||
public let media: [Media]
|
||||
public let authorId: PeerId
|
||||
public let target: Target
|
||||
public let messageId: MessageId?
|
||||
public let startParam: String?
|
||||
|
||||
@@ -28,7 +50,7 @@ private class AdMessagesHistoryContextImpl {
|
||||
text: String,
|
||||
textEntities: [MessageTextEntity],
|
||||
media: [Media],
|
||||
authorId: PeerId,
|
||||
target: Target,
|
||||
messageId: MessageId?,
|
||||
startParam: String?
|
||||
) {
|
||||
@@ -36,7 +58,7 @@ private class AdMessagesHistoryContextImpl {
|
||||
self.text = text
|
||||
self.textEntities = textEntities
|
||||
self.media = media
|
||||
self.authorId = authorId
|
||||
self.target = target
|
||||
self.messageId = messageId
|
||||
self.startParam = startParam
|
||||
}
|
||||
@@ -54,7 +76,7 @@ private class AdMessagesHistoryContextImpl {
|
||||
return PostboxDecoder(buffer: MemoryBuffer(data: data)).decodeRootObject() as? Media
|
||||
}
|
||||
|
||||
self.authorId = try container.decode(PeerId.self, forKey: .authorId)
|
||||
self.target = try container.decode(Target.self, forKey: .target)
|
||||
self.messageId = try container.decodeIfPresent(MessageId.self, forKey: .messageId)
|
||||
self.startParam = try container.decodeIfPresent(String.self, forKey: .startParam)
|
||||
}
|
||||
@@ -73,7 +95,7 @@ private class AdMessagesHistoryContextImpl {
|
||||
}
|
||||
try container.encode(mediaData, forKey: .media)
|
||||
|
||||
try container.encode(self.authorId, forKey: .authorId)
|
||||
try container.encode(self.target, forKey: .target)
|
||||
try container.encodeIfPresent(self.messageId, forKey: .messageId)
|
||||
try container.encodeIfPresent(self.startParam, forKey: .startParam)
|
||||
}
|
||||
@@ -96,7 +118,7 @@ private class AdMessagesHistoryContextImpl {
|
||||
return false
|
||||
}
|
||||
}
|
||||
if lhs.authorId != rhs.authorId {
|
||||
if lhs.target != rhs.target {
|
||||
return false
|
||||
}
|
||||
if lhs.messageId != rhs.messageId {
|
||||
@@ -108,7 +130,7 @@ private class AdMessagesHistoryContextImpl {
|
||||
return true
|
||||
}
|
||||
|
||||
func toMessage(peerId: PeerId, transaction: Transaction) -> Message {
|
||||
func toMessage(peerId: PeerId, transaction: Transaction) -> Message? {
|
||||
var attributes: [MessageAttribute] = []
|
||||
|
||||
attributes.append(AdMessageAttribute(opaqueId: self.opaqueId, startParam: self.startParam, messageId: self.messageId))
|
||||
@@ -122,9 +144,18 @@ private class AdMessagesHistoryContextImpl {
|
||||
if let peer = transaction.getPeer(peerId) {
|
||||
messagePeers[peer.id] = peer
|
||||
}
|
||||
if let peer = transaction.getPeer(self.authorId) {
|
||||
messagePeers[peer.id] = peer
|
||||
|
||||
let author: Peer
|
||||
switch self.target {
|
||||
case let .peer(peerId):
|
||||
if let peer = transaction.getPeer(peerId) {
|
||||
author = peer
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
messagePeers[author.id] = author
|
||||
|
||||
return Message(
|
||||
stableId: 0,
|
||||
@@ -140,7 +171,7 @@ private class AdMessagesHistoryContextImpl {
|
||||
globalTags: [],
|
||||
localTags: [],
|
||||
forwardInfo: nil,
|
||||
author: transaction.getPeer(self.authorId),
|
||||
author: author,
|
||||
text: self.text,
|
||||
attributes: attributes,
|
||||
media: self.media,
|
||||
@@ -270,7 +301,7 @@ private class AdMessagesHistoryContextImpl {
|
||||
|> mapToSignal { cachedState -> Signal<State, NoError> in
|
||||
if let cachedState = cachedState, cachedState.timestamp >= Int32(Date().timeIntervalSince1970) - 5 * 60 {
|
||||
return account.postbox.transaction { transaction -> State in
|
||||
return State(messages: cachedState.messages.map { message in
|
||||
return State(messages: cachedState.messages.compactMap { message -> Message? in
|
||||
return message.toMessage(peerId: peerId, transaction: transaction)
|
||||
})
|
||||
}
|
||||
@@ -325,35 +356,42 @@ private class AdMessagesHistoryContextImpl {
|
||||
|
||||
for message in messages {
|
||||
switch message {
|
||||
case let .sponsoredMessage(_, randomId, fromId, channelPost, startParam, message, entities):
|
||||
case let .sponsoredMessage(_, randomId, fromId, chatInvite, chatInviteHash, channelPost, startParam, message, entities):
|
||||
var parsedEntities: [MessageTextEntity] = []
|
||||
if let entities = entities {
|
||||
parsedEntities = messageTextEntitiesFromApiEntities(entities)
|
||||
}
|
||||
|
||||
let _ = chatInvite
|
||||
let _ = chatInviteHash
|
||||
|
||||
var target: CachedMessage.Target?
|
||||
if let fromId = fromId {
|
||||
target = .peer(fromId.peerId)
|
||||
}
|
||||
|
||||
var messageId: MessageId?
|
||||
if let fromId = fromId, let channelPost = channelPost {
|
||||
messageId = MessageId(peerId: fromId.peerId, namespace: Namespaces.Message.Cloud, id: channelPost)
|
||||
}
|
||||
|
||||
let parsedMedia: [Media] = []
|
||||
/*if let media = media {
|
||||
let (mediaValue, _) = textMediaAndExpirationTimerFromApiMedia(media, peerId)
|
||||
if let mediaValue = mediaValue {
|
||||
parsedMedia.append(mediaValue)
|
||||
}
|
||||
}*/
|
||||
|
||||
parsedMessages.append(CachedMessage(
|
||||
opaqueId: randomId.makeData(),
|
||||
text: message,
|
||||
textEntities: parsedEntities,
|
||||
media: parsedMedia,
|
||||
authorId: fromId.peerId,
|
||||
messageId: channelPost.flatMap { MessageId(peerId: fromId.peerId, namespace: Namespaces.Message.Cloud, id: $0) },
|
||||
startParam: startParam
|
||||
))
|
||||
if let target = target {
|
||||
parsedMessages.append(CachedMessage(
|
||||
opaqueId: randomId.makeData(),
|
||||
text: message,
|
||||
textEntities: parsedEntities,
|
||||
media: [],
|
||||
target: target,
|
||||
messageId: messageId,
|
||||
startParam: startParam
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CachedState.setCached(transaction: transaction, peerId: peerId, state: CachedState(timestamp: Int32(Date().timeIntervalSince1970), messages: parsedMessages))
|
||||
|
||||
return parsedMessages.map { message in
|
||||
return parsedMessages.compactMap { message -> Message? in
|
||||
return message.toMessage(peerId: peerId, transaction: transaction)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user