diff --git a/submodules/TelegramCore/Sources/State/PendingMessageManager.swift b/submodules/TelegramCore/Sources/State/PendingMessageManager.swift index 5450e5743b..620c47927a 100644 --- a/submodules/TelegramCore/Sources/State/PendingMessageManager.swift +++ b/submodules/TelegramCore/Sources/State/PendingMessageManager.swift @@ -75,7 +75,7 @@ private func reasonForError(_ error: String) -> PendingMessageFailureReason? { } private final class PeerPendingMessagesSummaryContext { - var messageDeliveredSubscribers = Bag<(MessageId.Namespace) -> Void>() + var messageDeliveredSubscribers = Bag<((MessageId.Namespace, Bool)) -> Void>() var messageFailedSubscribers = Bag<(PendingMessageFailureReason) -> Void>() } @@ -231,25 +231,29 @@ public final class PendingMessageManager { } if !removedSecretMessageIds.isEmpty { - let _ = (self.postbox.transaction { transaction -> Set in + let _ = (self.postbox.transaction { transaction -> (Set, Bool) in + var silent = false var peerIdsWithDeliveredMessages = Set() for id in removedSecretMessageIds { if let message = transaction.getMessage(id) { if message.isSentOrAcknowledged { peerIdsWithDeliveredMessages.insert(id.peerId) + if message.muted { + silent = true + } } } } - return peerIdsWithDeliveredMessages + return (peerIdsWithDeliveredMessages, silent) } - |> deliverOn(self.queue)).start(next: { [weak self] peerIdsWithDeliveredMessages in + |> deliverOn(self.queue)).start(next: { [weak self] peerIdsWithDeliveredMessages, silent in guard let strongSelf = self else { return } for peerId in peerIdsWithDeliveredMessages { if let context = strongSelf.peerSummaryContexts[peerId] { for subscriber in context.messageDeliveredSubscribers.copyItems() { - subscriber(Namespaces.Message.Cloud) + subscriber((Namespaces.Message.Cloud, silent)) } } } @@ -1179,6 +1183,7 @@ public final class PendingMessageManager { } } + let silent = message.muted var namespace = Namespaces.Message.Cloud if let apiMessage = apiMessage, let id = apiMessage.id(namespace: message.scheduleTime != nil && message.scheduleTime == apiMessage.timestamp ? Namespaces.Message.ScheduledCloud : Namespaces.Message.Cloud) { namespace = id.namespace @@ -1190,7 +1195,7 @@ public final class PendingMessageManager { strongSelf.queue.async { if let context = strongSelf.peerSummaryContexts[message.id.peerId] { for subscriber in context.messageDeliveredSubscribers.copyItems() { - subscriber(namespace) + subscriber((namespace, silent)) } } } @@ -1199,9 +1204,13 @@ public final class PendingMessageManager { } private func applySentGroupMessages(postbox: Postbox, stateManager: AccountStateManager, messages: [Message], result: Api.Updates) -> Signal { + var silent = false var namespace = Namespaces.Message.Cloud if let message = messages.first, let apiMessage = result.messages.first, message.scheduleTime != nil && message.scheduleTime == apiMessage.timestamp { namespace = Namespaces.Message.ScheduledCloud + if message.muted { + silent = true + } } return applyUpdateGroupMessages(postbox: postbox, stateManager: stateManager, messages: messages, result: result) @@ -1210,7 +1219,7 @@ public final class PendingMessageManager { strongSelf.queue.async { if let message = messages.first, let context = strongSelf.peerSummaryContexts[message.id.peerId] { for subscriber in context.messageDeliveredSubscribers.copyItems() { - subscriber(namespace) + subscriber((namespace, silent)) } } } @@ -1218,7 +1227,7 @@ public final class PendingMessageManager { } } - public func deliveredMessageEvents(peerId: PeerId) -> Signal { + public func deliveredMessageEvents(peerId: PeerId) -> Signal<(namespace: MessageId.Namespace, silent: Bool), NoError> { return Signal { subscriber in let disposable = MetaDisposable() @@ -1231,8 +1240,8 @@ public final class PendingMessageManager { self.peerSummaryContexts[peerId] = summaryContext } - let index = summaryContext.messageDeliveredSubscribers.add({ namespace in - subscriber.putNext(namespace) + let index = summaryContext.messageDeliveredSubscribers.add({ namespace, silent in + subscriber.putNext((namespace, silent)) }) disposable.set(ActionDisposable { diff --git a/submodules/TelegramUI/Sources/ChatController.swift b/submodules/TelegramUI/Sources/ChatController.swift index fdc2e9e21d..c6b41acba6 100644 --- a/submodules/TelegramUI/Sources/ChatController.swift +++ b/submodules/TelegramUI/Sources/ChatController.swift @@ -7910,10 +7910,10 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G } self.sentMessageEventsDisposable.set((self.context.account.pendingMessageManager.deliveredMessageEvents(peerId: peerId) - |> deliverOnMainQueue).start(next: { [weak self] namespace in + |> deliverOnMainQueue).start(next: { [weak self] namespace, silent in if let strongSelf = self { let inAppNotificationSettings = strongSelf.context.sharedContext.currentInAppNotificationSettings.with { $0 } - if inAppNotificationSettings.playSounds { + if inAppNotificationSettings.playSounds && !silent { serviceSoundManager.playMessageDeliveredSound() } if strongSelf.presentationInterfaceState.subject != .scheduledMessages && namespace == Namespaces.Message.ScheduledCloud {