[WIP] Quotes

This commit is contained in:
Ali 2023-10-13 15:58:10 +04:00
parent 7812c11601
commit 3872d21298
4 changed files with 45 additions and 48 deletions

View File

@ -202,6 +202,7 @@ private var declaredEncodables: Void = {
declareEncodable(SynchronizePeerStoriesOperation.self, f: { SynchronizePeerStoriesOperation(decoder: $0) })
declareEncodable(MapVenue.self, f: { MapVenue(decoder: $0) })
declareEncodable(TelegramMediaGiveaway.self, f: { TelegramMediaGiveaway(decoder: $0) })
declareEncodable(WebpagePreviewMessageAttribute.self, f: { WebpagePreviewMessageAttribute(decoder: $0) })
return
}()

View File

@ -60,3 +60,21 @@ func telegramMediaWebpageFromApiWebpage(_ webpage: Api.WebPage, url: String?) ->
return nil
}
}
public class WebpagePreviewMessageAttribute: MessageAttribute, Equatable {
public let associatedPeerIds: [PeerId] = []
public let associatedMediaIds: [MediaId] = []
public init() {
}
required public init(decoder: PostboxDecoder) {
}
public func encode(_ encoder: PostboxEncoder) {
}
public static func ==(lhs: WebpagePreviewMessageAttribute, rhs: WebpagePreviewMessageAttribute) -> Bool {
return true
}
}

View File

@ -27,9 +27,11 @@ private func presentChatInputOptions(selfController: ChatControllerImpl, sourceN
let replySelectionState = Promise<ChatControllerSubject.MessageOptionsInfo.SelectionState>(ChatControllerSubject.MessageOptionsInfo.SelectionState(quote: nil))
if let source = chatForwardOptions(selfController: selfController, sourceNode: sourceNode, getContextController: {
var forwardDismissedForCancel: (() -> Void)?
if let (source, dismissedForCancel) = chatForwardOptions(selfController: selfController, sourceNode: sourceNode, getContextController: {
return getContextController?()
}) {
forwardDismissedForCancel = dismissedForCancel
sources.append(source)
}
if let source = chatReplyOptions(selfController: selfController, sourceNode: sourceNode, getContextController: {
@ -67,13 +69,20 @@ private func presentChatInputOptions(selfController: ChatControllerImpl, sourceN
return contextController
}
contextController.dismissedForCancel = {
forwardDismissedForCancel?()
}
selfController.presentInGlobalOverlay(contextController)
}
private func chatForwardOptions(selfController: ChatControllerImpl, sourceNode: ASDisplayNode, getContextController: @escaping () -> ContextController?) -> ContextController.Source? {
private func chatForwardOptions(selfController: ChatControllerImpl, sourceNode: ASDisplayNode, getContextController: @escaping () -> ContextController?) -> (ContextController.Source, () -> Void)? {
guard let peerId = selfController.chatLocation.peerId else {
return nil
}
guard let initialForwardMessageIds = selfController.presentationInterfaceState.interfaceState.forwardMessageIds, !initialForwardMessageIds.isEmpty else {
return nil
}
let presentationData = selfController.presentationData
let forwardOptions = selfController.presentationInterfaceStatePromise.get()
@ -258,49 +267,7 @@ private func chatForwardOptions(selfController: ChatControllerImpl, sourceNode:
return items
}
//TODO:localize
return ContextController.Source(
id: AnyHashable(OptionsId.forward),
title: "Forward",
source: .controller(ChatContextControllerContentSourceImpl(controller: chatController, sourceNode: sourceNode, passthroughTouches: true)),
items: items |> map { ContextController.Items(content: .list($0)) }
)
}
func presentChatForwardOptions(selfController: ChatControllerImpl, sourceNode: ASDisplayNode) {
if "".isEmpty {
presentChatInputOptions(selfController: selfController, sourceNode: sourceNode, initialId: .forward)
return
}
var getContextController: (() -> ContextController?)?
guard let source = chatForwardOptions(selfController: selfController, sourceNode: sourceNode, getContextController: {
return getContextController?()
}) else {
return
}
selfController.chatDisplayNode.messageTransitionNode.dismissMessageReactionContexts()
selfController.canReadHistory.set(false)
let contextController = ContextController(
presentationData: selfController.presentationData,
configuration: ContextController.Configuration(
sources: [source],
initialId: source.id
)
)
contextController.dismissed = { [weak selfController] in
selfController?.canReadHistory.set(true)
}
getContextController = { [weak contextController] in
return contextController
}
//TODO:loc
/*contextController.dismissedForCancel = { [weak selfController, weak chatController] in
let dismissedForCancel: () -> Void = { [weak selfController, weak chatController] in
guard let selfController else {
return
}
@ -309,8 +276,19 @@ func presentChatForwardOptions(selfController: ChatControllerImpl, sourceNode: A
forwardMessageIds = forwardMessageIds.filter { selectedMessageIds.contains($0) }
selfController.updateChatPresentationInterfaceState(interactive: false, { $0.updatedInterfaceState({ $0.withUpdatedForwardMessageIds(forwardMessageIds) }) })
}
}*/
selfController.presentInGlobalOverlay(contextController)
}
//TODO:localize
return (ContextController.Source(
id: AnyHashable(OptionsId.forward),
title: "Forward",
source: .controller(ChatContextControllerContentSourceImpl(controller: chatController, sourceNode: sourceNode, passthroughTouches: true)),
items: items |> map { ContextController.Items(content: .list($0)) }
), dismissedForCancel)
}
func presentChatForwardOptions(selfController: ChatControllerImpl, sourceNode: ASDisplayNode) {
presentChatInputOptions(selfController: selfController, sourceNode: sourceNode, initialId: .forward)
}
private func generateChatReplyOptionItems(selfController: ChatControllerImpl, chatController: ChatControllerImpl) -> Signal<ContextController.Items, NoError> {

View File

@ -402,7 +402,7 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate {
var messages = messages
let forwardedMessageIds = Set(messages.map { $0.id })
messages.sort(by: { lhsMessage, rhsMessage in
return lhsMessage.timestamp > rhsMessage.timestamp
return lhsMessage.index > rhsMessage.index
})
messages = messages.map { message in
var flags = message.flags