Swiftgram/submodules/TelegramCore/Sources/ApiUtils/TextEntitiesMessageAttribute.swift
2022-07-08 19:53:20 +02:00

64 lines
3.0 KiB
Swift

import Foundation
import Postbox
import TelegramApi
func apiEntitiesFromMessageTextEntities(_ entities: [MessageTextEntity], associatedPeers: SimpleDictionary<PeerId, Peer>) -> [Api.MessageEntity] {
var apiEntities: [Api.MessageEntity] = []
for entity in entities {
let offset: Int32 = Int32(entity.range.lowerBound)
let length: Int32 = Int32(entity.range.upperBound - entity.range.lowerBound)
switch entity.type {
case .Unknown:
break
case .Mention:
apiEntities.append(.messageEntityMention(offset: offset, length: length))
case .Hashtag:
apiEntities.append(.messageEntityHashtag(offset: offset, length: length))
case .BotCommand:
apiEntities.append(.messageEntityBotCommand(offset: offset, length: length))
case .Url:
apiEntities.append(.messageEntityUrl(offset: offset, length: length))
case .Email:
apiEntities.append(.messageEntityEmail(offset: offset, length: length))
case .Bold:
apiEntities.append(.messageEntityBold(offset: offset, length: length))
case .Italic:
apiEntities.append(.messageEntityItalic(offset: offset, length: length))
case .Code:
apiEntities.append(.messageEntityCode(offset: offset, length: length))
case .Pre:
apiEntities.append(.messageEntityPre(offset: offset, length: length, language: ""))
case let .TextUrl(url):
apiEntities.append(.messageEntityTextUrl(offset: offset, length: length, url: url))
case let .TextMention(peerId):
if let peer = associatedPeers[peerId], let inputUser = apiInputUser(peer) {
apiEntities.append(.inputMessageEntityMentionName(offset: offset, length: length, userId: inputUser))
}
case .PhoneNumber:
break
case .Strikethrough:
apiEntities.append(.messageEntityStrike(offset: offset, length: length))
case .BlockQuote:
apiEntities.append(.messageEntityBlockquote(offset: offset, length: length))
case .Underline:
apiEntities.append(.messageEntityUnderline(offset: offset, length: length))
case .BankCard:
apiEntities.append(.messageEntityBankCard(offset: offset, length: length))
case .Spoiler:
apiEntities.append(.messageEntitySpoiler(offset: offset, length: length))
case let .CustomEmoji(_, fileId):
apiEntities.append(.messageEntityCustomEmoji(offset: offset, length: length, documentId: fileId))
case .Custom:
break
}
}
return apiEntities
}
func apiTextAttributeEntities(_ attribute: TextEntitiesMessageAttribute, associatedPeers: SimpleDictionary<PeerId, Peer>) -> [Api.MessageEntity] {
return apiEntitiesFromMessageTextEntities(attribute.entities, associatedPeers: associatedPeers)
}