mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-10-09 03:20:48 +00:00
[WIP] Quotes
This commit is contained in:
parent
7812c11601
commit
3872d21298
@ -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
|
||||
}()
|
||||
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
@ -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> {
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user