mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-10-09 03:20:48 +00:00
Don't open scheduled messages screen after sending when online if a message has been sent immediately
This commit is contained in:
parent
9666c1d593
commit
4eb003d816
@ -215,7 +215,7 @@ func applyUpdateGroupMessages(postbox: Postbox, stateManager: AccountStateManage
|
||||
let updatedRawMessageIds = result.updatedRawMessageIds
|
||||
|
||||
var namespace = Namespaces.Message.Cloud
|
||||
if let message = messages.first, Namespaces.Message.allScheduled.contains(message.id.namespace) {
|
||||
if let message = messages.first, let apiMessage = result.messages.first, message.scheduleTime != nil && message.scheduleTime == apiMessage.timestamp {
|
||||
namespace = Namespaces.Message.ScheduledCloud
|
||||
}
|
||||
|
||||
@ -225,7 +225,7 @@ func applyUpdateGroupMessages(postbox: Postbox, stateManager: AccountStateManage
|
||||
resultMessages[id] = resultMessage
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
var mapping: [(Message, MessageIndex, StoreMessage)] = []
|
||||
|
||||
for message in messages {
|
||||
|
@ -75,7 +75,7 @@ private func reasonForError(_ error: String) -> PendingMessageFailureReason? {
|
||||
}
|
||||
|
||||
private final class PeerPendingMessagesSummaryContext {
|
||||
var messageDeliveredSubscribers = Bag<() -> Void>()
|
||||
var messageDeliveredSubscribers = Bag<(MessageId.Namespace) -> Void>()
|
||||
var messageFailedSubscribers = Bag<(PendingMessageFailureReason) -> Void>()
|
||||
}
|
||||
|
||||
@ -239,7 +239,7 @@ public final class PendingMessageManager {
|
||||
for peerId in peerIdsWithDeliveredMessages {
|
||||
if let context = strongSelf.peerSummaryContexts[peerId] {
|
||||
for subscriber in context.messageDeliveredSubscribers.copyItems() {
|
||||
subscriber()
|
||||
subscriber(Namespaces.Message.Cloud)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1044,13 +1044,28 @@ public final class PendingMessageManager {
|
||||
}
|
||||
|
||||
private func applySentMessage(postbox: Postbox, stateManager: AccountStateManager, message: Message, result: Api.Updates) -> Signal<Void, NoError> {
|
||||
var apiMessage: Api.Message?
|
||||
for resultMessage in result.messages {
|
||||
if let id = resultMessage.id(namespace: Namespaces.Message.allScheduled.contains(message.id.namespace) ? Namespaces.Message.ScheduledCloud : Namespaces.Message.Cloud) {
|
||||
if id.peerId == message.id.peerId {
|
||||
apiMessage = resultMessage
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
return applyUpdateMessage(postbox: postbox, stateManager: stateManager, message: message, result: result)
|
||||
|> afterDisposed { [weak self] in
|
||||
if let strongSelf = self {
|
||||
strongSelf.queue.async {
|
||||
if let context = strongSelf.peerSummaryContexts[message.id.peerId] {
|
||||
for subscriber in context.messageDeliveredSubscribers.copyItems() {
|
||||
subscriber()
|
||||
subscriber(namespace)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1059,13 +1074,18 @@ public final class PendingMessageManager {
|
||||
}
|
||||
|
||||
private func applySentGroupMessages(postbox: Postbox, stateManager: AccountStateManager, messages: [Message], result: Api.Updates) -> Signal<Void, NoError> {
|
||||
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
|
||||
}
|
||||
|
||||
return applyUpdateGroupMessages(postbox: postbox, stateManager: stateManager, messages: messages, result: result)
|
||||
|> afterDisposed { [weak self] in
|
||||
if let strongSelf = self {
|
||||
strongSelf.queue.async {
|
||||
if let peerId = messages.first?.id.peerId, let context = strongSelf.peerSummaryContexts[peerId] {
|
||||
if let message = messages.first, let context = strongSelf.peerSummaryContexts[message.id.peerId] {
|
||||
for subscriber in context.messageDeliveredSubscribers.copyItems() {
|
||||
subscriber()
|
||||
subscriber(namespace)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1073,7 +1093,7 @@ public final class PendingMessageManager {
|
||||
}
|
||||
}
|
||||
|
||||
public func deliveredMessageEvents(peerId: PeerId) -> Signal<Bool, NoError> {
|
||||
public func deliveredMessageEvents(peerId: PeerId) -> Signal<MessageId.Namespace, NoError> {
|
||||
return Signal { subscriber in
|
||||
let disposable = MetaDisposable()
|
||||
|
||||
@ -1086,8 +1106,8 @@ public final class PendingMessageManager {
|
||||
self.peerSummaryContexts[peerId] = summaryContext
|
||||
}
|
||||
|
||||
let index = summaryContext.messageDeliveredSubscribers.add({
|
||||
subscriber.putNext(true)
|
||||
let index = summaryContext.messageDeliveredSubscribers.add({ namespace in
|
||||
subscriber.putNext(namespace)
|
||||
})
|
||||
|
||||
disposable.set(ActionDisposable {
|
||||
|
@ -1615,7 +1615,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
strongSelf.presentScheduleTimePicker(completion: { [weak self] time in
|
||||
if let strongSelf = self {
|
||||
strongSelf.chatDisplayNode.sendCurrentMessage(scheduleTime: time, completion: { [weak self] in
|
||||
if let strongSelf = self, !strongSelf.presentationInterfaceState.isScheduledMessages {
|
||||
if let strongSelf = self, !strongSelf.presentationInterfaceState.isScheduledMessages && time != scheduleWhenOnlineTimestamp {
|
||||
strongSelf.openScheduledMessages()
|
||||
}
|
||||
})
|
||||
@ -4243,13 +4243,16 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
})
|
||||
}
|
||||
|
||||
self.sentMessageEventsDisposable.set(self.context.account.pendingMessageManager.deliveredMessageEvents(peerId: peerId).start(next: { [weak self] _ in
|
||||
self.sentMessageEventsDisposable.set((self.context.account.pendingMessageManager.deliveredMessageEvents(peerId: peerId)
|
||||
|> deliverOnMainQueue).start(next: { [weak self] namespace in
|
||||
if let strongSelf = self {
|
||||
let inAppNotificationSettings: InAppNotificationSettings = strongSelf.context.sharedContext.currentInAppNotificationSettings.with { $0 }
|
||||
|
||||
let inAppNotificationSettings = strongSelf.context.sharedContext.currentInAppNotificationSettings.with { $0 }
|
||||
if inAppNotificationSettings.playSounds {
|
||||
serviceSoundManager.playMessageDeliveredSound()
|
||||
}
|
||||
if !strongSelf.presentationInterfaceState.isScheduledMessages && namespace == Namespaces.Message.ScheduledCloud {
|
||||
strongSelf.openScheduledMessages()
|
||||
}
|
||||
}
|
||||
}))
|
||||
|
||||
@ -4526,11 +4529,6 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*if let subject = self.subject, case .scheduledMessages = subject {
|
||||
self.chatDisplayNode.animateIn()
|
||||
self.updateTransitionWhenPresentedAsModal?(1.0, .animated(duration: 0.5, curve: .spring))
|
||||
}*/
|
||||
}
|
||||
|
||||
override public func viewWillDisappear(_ animated: Bool) {
|
||||
@ -5514,7 +5512,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
strongSelf.presentScheduleTimePicker(completion: { [weak self] time in
|
||||
if let strongSelf = self {
|
||||
done(time)
|
||||
if !strongSelf.presentationInterfaceState.isScheduledMessages {
|
||||
if !strongSelf.presentationInterfaceState.isScheduledMessages && time != scheduleWhenOnlineTimestamp {
|
||||
strongSelf.openScheduledMessages()
|
||||
}
|
||||
}
|
||||
@ -5553,7 +5551,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
strongSelf.presentScheduleTimePicker(completion: { [weak self] time in
|
||||
if let strongSelf = self {
|
||||
done(time)
|
||||
if !strongSelf.presentationInterfaceState.isScheduledMessages {
|
||||
if !strongSelf.presentationInterfaceState.isScheduledMessages && time != scheduleWhenOnlineTimestamp {
|
||||
strongSelf.openScheduledMessages()
|
||||
}
|
||||
}
|
||||
@ -5745,7 +5743,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
strongSelf.presentScheduleTimePicker(completion: { [weak self] time in
|
||||
if let strongSelf = self {
|
||||
done(time)
|
||||
if !strongSelf.presentationInterfaceState.isScheduledMessages {
|
||||
if !strongSelf.presentationInterfaceState.isScheduledMessages && time != scheduleWhenOnlineTimestamp {
|
||||
strongSelf.openScheduledMessages()
|
||||
}
|
||||
}
|
||||
@ -7887,7 +7885,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
}
|
||||
|
||||
private func displaySendingOptionsTooltip() {
|
||||
guard let rect = self.chatDisplayNode.frameForInputActionButton() else {
|
||||
guard let rect = self.chatDisplayNode.frameForInputActionButton(), self.effectiveNavigationController?.topViewController === self else {
|
||||
return
|
||||
}
|
||||
self.sendingOptionsTooltipController?.dismiss()
|
||||
@ -8165,9 +8163,12 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
}
|
||||
|
||||
private func openScheduledMessages() {
|
||||
guard let navigationController = self.effectiveNavigationController, navigationController.topViewController == self else {
|
||||
return
|
||||
}
|
||||
let controller = ChatControllerImpl(context: self.context, chatLocation: self.chatLocation, subject: .scheduledMessages)
|
||||
controller.navigationPresentation = .modal
|
||||
self.effectiveNavigationController?.pushViewController(controller)
|
||||
navigationController.pushViewController(controller)
|
||||
}
|
||||
|
||||
private func presentScheduleTimePicker(selectedTime: Int32? = nil, dismissByTapOutside: Bool = true, completion: @escaping (Int32) -> Void) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user