[WIP] Entity input panel

This commit is contained in:
Ali
2022-07-13 01:21:54 +02:00
parent ed59ead31e
commit c51b58ca72
101 changed files with 3374 additions and 491 deletions

View File

@@ -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