mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 22:25:57 +00:00
[WIP] Entity input panel
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import Foundation
|
||||
import Postbox
|
||||
import SwiftSignalKit
|
||||
|
||||
import TelegramApi
|
||||
|
||||
extension MediaResourceReference {
|
||||
var apiFileReference: Data? {
|
||||
@@ -227,6 +227,7 @@ private enum MediaReferenceRevalidationKey: Hashable {
|
||||
case peerAvatars(peer: PeerReference)
|
||||
case attachBot(peer: PeerReference)
|
||||
case notificationSoundList
|
||||
case customEmoji(fileId: Int64)
|
||||
}
|
||||
|
||||
private final class MediaReferenceRevalidationItemContext {
|
||||
@@ -391,6 +392,26 @@ final class MediaReferenceRevalidationContext {
|
||||
}
|
||||
}
|
||||
|
||||
func customEmoji(postbox: Postbox, network: Network, background: Bool, fileId: Int64) -> Signal<TelegramMediaFile, RevalidateMediaReferenceError> {
|
||||
return network.request(Api.functions.messages.getCustomEmojiDocuments(documentId: [fileId]))
|
||||
|> map(Optional.init)
|
||||
|> `catch` { _ -> Signal<[Api.Document]?, NoError> in
|
||||
return .single(nil)
|
||||
}
|
||||
|> castError(RevalidateMediaReferenceError.self)
|
||||
|> mapToSignal { result -> Signal<TelegramMediaFile, RevalidateMediaReferenceError> in
|
||||
guard let result = result else {
|
||||
return .fail(.generic)
|
||||
}
|
||||
for document in result {
|
||||
if let file = telegramMediaFileFromApiDocument(document) {
|
||||
return .single(file)
|
||||
}
|
||||
}
|
||||
return .fail(.generic)
|
||||
}
|
||||
}
|
||||
|
||||
func webPage(postbox: Postbox, network: Network, background: Bool, webPage: WebpageReference) -> Signal<TelegramMediaWebpage, RevalidateMediaReferenceError> {
|
||||
return self.genericItem(key: .webPage(webPage: webPage), background: background, request: { next, error in
|
||||
return (updatedRemoteWebpage(postbox: postbox, network: network, webPage: webPage)
|
||||
@@ -726,7 +747,37 @@ func revalidateMediaResourceReference(postbox: Postbox, network: Network, revali
|
||||
}
|
||||
}
|
||||
return .fail(.generic)
|
||||
}
|
||||
case let .customEmoji(media):
|
||||
if let file = media as? TelegramMediaFile {
|
||||
return revalidationContext.customEmoji(postbox: postbox, network: network, background: info.preferBackgroundReferenceRevalidation, fileId: file.fileId.id)
|
||||
|> mapToSignal { result -> Signal<RevalidatedMediaResource, RevalidateMediaReferenceError> in
|
||||
if let updatedResource = findUpdatedMediaResource(media: result, previousMedia: media, resource: resource) {
|
||||
return postbox.transaction { transaction -> RevalidatedMediaResource in
|
||||
if let id = media.id {
|
||||
var attributes = result.attributes
|
||||
if !attributes.contains(where: { attribute in
|
||||
if case .hintIsValidated = attribute {
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}) {
|
||||
attributes.append(.hintIsValidated)
|
||||
}
|
||||
let file = result.withUpdatedAttributes(attributes)
|
||||
updateMessageMedia(transaction: transaction, id: id, media: file)
|
||||
}
|
||||
return RevalidatedMediaResource(updatedResource: updatedResource, updatedReference: nil)
|
||||
}
|
||||
|> castError(RevalidateMediaReferenceError.self)
|
||||
} else {
|
||||
return .fail(.generic)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return .fail(.generic)
|
||||
}
|
||||
}
|
||||
case let .avatar(peer, _):
|
||||
return revalidationContext.peer(postbox: postbox, network: network, background: info.preferBackgroundReferenceRevalidation, peer: peer)
|
||||
|> mapToSignal { updatedPeer -> Signal<RevalidatedMediaResource, RevalidateMediaReferenceError> in
|
||||
|
||||
Reference in New Issue
Block a user