Bot previews

This commit is contained in:
Isaac
2024-07-24 01:56:34 +08:00
parent f604bc114f
commit 42a6f6e8bc
52 changed files with 3806 additions and 523 deletions

View File

@@ -199,16 +199,7 @@ func _internal_fetchAndUpdateCachedPeerData(accountPeerId: PeerId, peerId rawPee
let botPreview: Signal<CachedUserData.BotPreview?, NoError>
if let user = maybePeer as? TelegramUser, let _ = user.botInfo {
botPreview = network.request(Api.functions.bots.getPreviewMedias(bot: inputUser))
|> `catch` { _ -> Signal<[Api.MessageMedia], NoError> in
return .single([])
}
|> map { result -> CachedUserData.BotPreview? in
return CachedUserData.BotPreview(media: result.compactMap { item -> Media? in
let value = textMediaAndExpirationTimerFromApiMedia(item, user.id)
return value.media
})
}
botPreview = _internal_requestBotPreview(network: network, peerId: user.id, inputUser: inputUser, language: nil)
} else {
botPreview = .single(nil)
}
@@ -843,3 +834,33 @@ extension CachedPeerAutoremoveTimeout.Value {
}
}
}
func _internal_requestBotPreview(network: Network, peerId: PeerId, inputUser: Api.InputUser, language: String?) -> Signal<CachedUserData.BotPreview?, NoError> {
return network.request(Api.functions.bots.getPreviewInfo(bot: inputUser, langCode: language ?? ""))
|> map(Optional.init)
|> `catch` { _ -> Signal<Api.bots.PreviewInfo?, NoError> in
return .single(nil)
}
|> map { result -> CachedUserData.BotPreview? in
guard let result else {
return nil
}
switch result {
case let .previewInfo(media, langCodes):
return CachedUserData.BotPreview(
items: media.compactMap { item -> CachedUserData.BotPreview.Item? in
switch item {
case let .botPreviewMedia(date, media):
let value = textMediaAndExpirationTimerFromApiMedia(media, peerId)
if let media = value.media {
return CachedUserData.BotPreview.Item(media: media, timestamp: date)
} else {
return nil
}
}
},
alternativeLanguageCodes: langCodes
)
}
}
}