From 8e9a0da24d1310d9b62a4bbfbfe60da0c6f866c7 Mon Sep 17 00:00:00 2001 From: overtake Date: Thu, 3 Sep 2020 11:22:55 +0300 Subject: [PATCH] - fix groups forward. --- .../TelegramCore/Sources/AccountViewTracker.swift | 2 +- .../TelegramCore/Sources/ApplyUpdateMessage.swift | 15 ++++++++------- .../Sources/PendingMessageManager.swift | 2 +- .../TelegramCore/Sources/SearchMessages.swift | 4 ++-- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/submodules/TelegramCore/Sources/AccountViewTracker.swift b/submodules/TelegramCore/Sources/AccountViewTracker.swift index 806788f325..6aeb2c821f 100644 --- a/submodules/TelegramCore/Sources/AccountViewTracker.swift +++ b/submodules/TelegramCore/Sources/AccountViewTracker.swift @@ -601,7 +601,7 @@ public final class AccountViewTracker { return .single(nil) } |> mapToSignal { result -> Signal in - guard case let .messageViews(viewCounts, _) = result else { + guard case let .messageViews(viewCounts, _)? = result else { return .complete() } diff --git a/submodules/TelegramCore/Sources/ApplyUpdateMessage.swift b/submodules/TelegramCore/Sources/ApplyUpdateMessage.swift index 22f7080114..be58039f8e 100644 --- a/submodules/TelegramCore/Sources/ApplyUpdateMessage.swift +++ b/submodules/TelegramCore/Sources/ApplyUpdateMessage.swift @@ -301,20 +301,21 @@ func applyUpdateGroupMessages(postbox: Postbox, stateManager: AccountStateManage var sentStickers: [TelegramMediaFile] = [] var sentGifs: [TelegramMediaFile] = [] - var updatedGroupingKey: Int64? - for (_, _, updatedMessage) in mapping { - if let updatedGroupingKey = updatedGroupingKey { - assert(updatedGroupingKey == updatedMessage.groupingKey) + var updatedGroupingKey: [Int64 : [MessageId]] = [:] + for (message, _, updatedMessage) in mapping { + if let groupingKey = updatedMessage.groupingKey { + var ids = updatedGroupingKey[groupingKey] ?? [] + ids.append(message.id) + updatedGroupingKey[groupingKey] = ids } - updatedGroupingKey = updatedMessage.groupingKey } if let latestPreviousId = latestPreviousId, let latestIndex = mapping.last?.1 { transaction.offsetPendingMessagesTimestamps(lowerBound: latestPreviousId, excludeIds: Set(mapping.map { $0.0.id }), timestamp: latestIndex.timestamp) } - if let updatedGroupingKey = updatedGroupingKey { - transaction.updateMessageGroupingKeysAtomically(mapping.map { $0.0.id }, groupingKey: updatedGroupingKey) + for (key, ids) in updatedGroupingKey { + transaction.updateMessageGroupingKeysAtomically(ids, groupingKey: key) } for (message, _, updatedMessage) in mapping { diff --git a/submodules/TelegramCore/Sources/PendingMessageManager.swift b/submodules/TelegramCore/Sources/PendingMessageManager.swift index e31f52c341..500e9f32e8 100644 --- a/submodules/TelegramCore/Sources/PendingMessageManager.swift +++ b/submodules/TelegramCore/Sources/PendingMessageManager.swift @@ -704,7 +704,7 @@ public final class PendingMessageManager { let sendMessageRequest: Signal if isForward { - if !messages.contains(where: { $0.0.groupingKey == nil }) { + if messages.contains(where: { $0.0.groupingKey != nil }) { flags |= (1 << 9) } diff --git a/submodules/TelegramCore/Sources/SearchMessages.swift b/submodules/TelegramCore/Sources/SearchMessages.swift index 04dd095a19..09e0635727 100644 --- a/submodules/TelegramCore/Sources/SearchMessages.swift +++ b/submodules/TelegramCore/Sources/SearchMessages.swift @@ -9,7 +9,7 @@ import SyncCore public enum SearchMessagesLocation: Equatable { case general(tags: MessageTags?) case group(PeerGroupId) - case peer(peerId: PeerId, fromId: PeerId?, tags: MessageTags?) + case peer(peerId: PeerId, fromId: PeerId?, tags: MessageTags?, topMsgId: MessageId?) case publicForwards(messageId: MessageId, datacenterId: Int?) } @@ -180,7 +180,7 @@ private func mergedResult(_ state: SearchMessagesState) -> SearchMessagesResult public func searchMessages(account: Account, location: SearchMessagesLocation, query: String, state: SearchMessagesState?, limit: Int32 = 100) -> Signal<(SearchMessagesResult, SearchMessagesState), NoError> { let remoteSearchResult: Signal<(Api.messages.Messages?, Api.messages.Messages?), NoError> switch location { - case let .peer(peerId, fromId, tags): + case let .peer(peerId, fromId, tags, topMsgId): if peerId.namespace == Namespaces.Peer.SecretChat { return account.postbox.transaction { transaction -> (SearchMessagesResult, SearchMessagesState) in var readStates: [PeerId: CombinedPeerReadState] = [:]