mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Fix multimessage forwarding from search
This commit is contained in:
parent
6f599be864
commit
045cd2cda0
@ -756,7 +756,16 @@ public final class ChatListSearchContainerNode: SearchDisplayControllerContentNo
|
|||||||
|
|
||||||
func deleteMessages(messageIds: Set<MessageId>?) {
|
func deleteMessages(messageIds: Set<MessageId>?) {
|
||||||
if let messageIds = messageIds ?? self.stateValue.selectedMessageIds, !messageIds.isEmpty {
|
if let messageIds = messageIds ?? self.stateValue.selectedMessageIds, !messageIds.isEmpty {
|
||||||
self.activeActionDisposable.set((self.context.sharedContext.chatAvailableMessageActions(postbox: self.context.account.postbox, accountPeerId: self.context.account.peerId, messageIds: messageIds)
|
let (peers, messages) = self.currentMessages
|
||||||
|
let _ = (self.context.account.postbox.transaction { transaction -> Void in
|
||||||
|
for id in messageIds {
|
||||||
|
if transaction.getMessage(id) == nil, let message = messages[id] {
|
||||||
|
storeMessageFromSearch(transaction: transaction, message: message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).start()
|
||||||
|
|
||||||
|
self.activeActionDisposable.set((self.context.sharedContext.chatAvailableMessageActions(postbox: self.context.account.postbox, accountPeerId: self.context.account.peerId, messageIds: messageIds, messages: messages, peers: peers)
|
||||||
|> deliverOnMainQueue).start(next: { [weak self] actions in
|
|> deliverOnMainQueue).start(next: { [weak self] actions in
|
||||||
if let strongSelf = self, !actions.options.isEmpty {
|
if let strongSelf = self, !actions.options.isEmpty {
|
||||||
let actionSheet = ActionSheetController(presentationData: strongSelf.presentationData)
|
let actionSheet = ActionSheetController(presentationData: strongSelf.presentationData)
|
||||||
@ -818,6 +827,15 @@ public final class ChatListSearchContainerNode: SearchDisplayControllerContentNo
|
|||||||
func forwardMessages(messageIds: Set<MessageId>?) {
|
func forwardMessages(messageIds: Set<MessageId>?) {
|
||||||
let messageIds = messageIds ?? self.stateValue.selectedMessageIds
|
let messageIds = messageIds ?? self.stateValue.selectedMessageIds
|
||||||
if let messageIds = messageIds, !messageIds.isEmpty {
|
if let messageIds = messageIds, !messageIds.isEmpty {
|
||||||
|
let messages = self.paneContainerNode.allCurrentMessages()
|
||||||
|
let _ = (self.context.account.postbox.transaction { transaction -> Void in
|
||||||
|
for id in messageIds {
|
||||||
|
if transaction.getMessage(id) == nil, let message = messages[id] {
|
||||||
|
storeMessageFromSearch(transaction: transaction, message: message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).start()
|
||||||
|
|
||||||
let peerSelectionController = self.context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: self.context, filter: [.onlyWriteable, .excludeDisabled]))
|
let peerSelectionController = self.context.sharedContext.makePeerSelectionController(PeerSelectionControllerParams(context: self.context, filter: [.onlyWriteable, .excludeDisabled]))
|
||||||
peerSelectionController.peerSelected = { [weak self, weak peerSelectionController] peerId in
|
peerSelectionController.peerSelected = { [weak self, weak peerSelectionController] peerId in
|
||||||
if let strongSelf = self, let _ = peerSelectionController {
|
if let strongSelf = self, let _ = peerSelectionController {
|
||||||
|
@ -3654,7 +3654,44 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
transformedMessages = strongSelf.transformEnqueueMessages(messages)
|
transformedMessages = strongSelf.transformEnqueueMessages(messages)
|
||||||
}
|
}
|
||||||
|
|
||||||
let _ = (enqueueMessages(account: strongSelf.context.account, peerId: peerId, messages: transformedMessages)
|
var forwardedMessages: [[EnqueueMessage]] = []
|
||||||
|
var forwardSourcePeerIds = Set<PeerId>()
|
||||||
|
for message in transformedMessages {
|
||||||
|
if case let .forward(source, _, _) = message {
|
||||||
|
forwardSourcePeerIds.insert(source.peerId)
|
||||||
|
|
||||||
|
var added = false
|
||||||
|
if var last = forwardedMessages.last {
|
||||||
|
if let currentMessage = last.first, case let .forward(currentSource, _, _) = currentMessage, currentSource.peerId == source.peerId {
|
||||||
|
last.append(message)
|
||||||
|
added = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !added {
|
||||||
|
forwardedMessages.append([message])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let signal: Signal<[MessageId?], NoError>
|
||||||
|
if forwardSourcePeerIds.count > 1 {
|
||||||
|
var signals: [Signal<[MessageId?], NoError>] = []
|
||||||
|
for messagesGroup in forwardedMessages {
|
||||||
|
signals.append(enqueueMessages(account: strongSelf.context.account, peerId: peerId, messages: messagesGroup))
|
||||||
|
}
|
||||||
|
signal = combineLatest(signals)
|
||||||
|
|> map { results in
|
||||||
|
var ids: [MessageId?] = []
|
||||||
|
for result in results {
|
||||||
|
ids.append(contentsOf: result)
|
||||||
|
}
|
||||||
|
return ids
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
signal = enqueueMessages(account: strongSelf.context.account, peerId: peerId, messages: transformedMessages)
|
||||||
|
}
|
||||||
|
|
||||||
|
let _ = (signal
|
||||||
|> deliverOnMainQueue).start(next: { messageIds in
|
|> deliverOnMainQueue).start(next: { messageIds in
|
||||||
if let strongSelf = self {
|
if let strongSelf = self {
|
||||||
if strongSelf.presentationInterfaceState.isScheduledMessages {
|
if strongSelf.presentationInterfaceState.isScheduledMessages {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user