From af33eaa65fdaf3d0987d7cc4fc69c71865d289bf Mon Sep 17 00:00:00 2001 From: Peter <> Date: Tue, 16 Oct 2018 20:19:11 +0300 Subject: [PATCH] Fixed secret message timers --- TelegramCore/AccountViewTracker.swift | 5 ++- TelegramCore/ContactSyncManager.swift | 2 +- TelegramCore/FetchedMediaResource.swift | 35 ++++++++++++++++--- .../ManagedAutoremoveMessageOperations.swift | 2 +- .../ManagedConfigurationUpdates.swift | 2 +- TelegramCore/PendingMessageManager.swift | 3 ++ .../PendingMessageUploadedContent.swift | 6 +++- TelegramCore/SearchMessages.swift | 2 +- TelegramCore/StickerManagement.swift | 2 +- TelegramCore/TermsOfService.swift | 2 +- 10 files changed, 49 insertions(+), 12 deletions(-) diff --git a/TelegramCore/AccountViewTracker.swift b/TelegramCore/AccountViewTracker.swift index 21919ca44c..d9f20644fd 100644 --- a/TelegramCore/AccountViewTracker.swift +++ b/TelegramCore/AccountViewTracker.swift @@ -748,7 +748,10 @@ public final class AccountViewTracker { if begin { if let account = strongSelf.account { - let signal = (fetchAndUpdateCachedParticipants(peerId: peerId, network: account.network, postbox: account.postbox) |> then(Signal.complete() |> delay(10 * 60, queue: Queue.concurrentDefaultQueue()))) |> restart + let signal = (fetchAndUpdateCachedParticipants(peerId: peerId, network: account.network, postbox: account.postbox) + |> then(Signal.complete() + |> suspendAwareDelay(10 * 60, queue: Queue.concurrentDefaultQueue()))) + |> restart context.disposable.set(signal.start()) } } diff --git a/TelegramCore/ContactSyncManager.swift b/TelegramCore/ContactSyncManager.swift index 20e534de08..17384f1c84 100644 --- a/TelegramCore/ContactSyncManager.swift +++ b/TelegramCore/ContactSyncManager.swift @@ -56,8 +56,8 @@ private final class ContactSyncManagerImpl { return } strongSelf.addOperation(.waitForUpdatedState) - strongSelf.addOperation(.sync(importableContacts: importableContacts)) strongSelf.addOperation(.updatePresences) + strongSelf.addOperation(.sync(importableContacts: importableContacts)) })) } diff --git a/TelegramCore/FetchedMediaResource.swift b/TelegramCore/FetchedMediaResource.swift index 5bf16f3fb6..ad0b5e50d2 100644 --- a/TelegramCore/FetchedMediaResource.swift +++ b/TelegramCore/FetchedMediaResource.swift @@ -10,9 +10,36 @@ import SwiftSignalKit public struct MessageReference: PostboxCoding, Hashable, Equatable { let content: MessageReferenceContent + public var peer: PeerReference? { + switch content { + case .none: + return nil + case let .message(peer, _, _, _): + return peer + } + } + + public var timestamp: Int32? { + switch content { + case .none: + return nil + case let .message(_, _, timestamp, _): + return timestamp + } + } + + public var isIncoming: Bool? { + switch content { + case .none: + return nil + case let .message(_, _, _, incoming): + return incoming + } + } + public init(_ message: Message) { if let peer = message.peers[message.id.peerId], let inputPeer = PeerReference(peer) { - self.content = .message(peer: inputPeer, id: message.id) + self.content = .message(peer: inputPeer, id: message.id, timestamp: message.timestamp, incoming: message.flags.contains(.Incoming)) } else { self.content = .none } @@ -29,14 +56,14 @@ public struct MessageReference: PostboxCoding, Hashable, Equatable { enum MessageReferenceContent: PostboxCoding, Hashable, Equatable { case none - case message(peer: PeerReference, id: MessageId) + case message(peer: PeerReference, id: MessageId, timestamp: Int32, incoming: Bool) init(decoder: PostboxDecoder) { switch decoder.decodeInt32ForKey("_r", orElse: 0) { case 0: self = .none case 1: - self = .message(peer: decoder.decodeObjectForKey("p", decoder: { PeerReference(decoder: $0) }) as! PeerReference, id: MessageId(peerId: PeerId(decoder.decodeInt64ForKey("i.p", orElse: 0)), namespace: decoder.decodeInt32ForKey("i.n", orElse: 0), id: decoder.decodeInt32ForKey("i.i", orElse: 0))) + self = .message(peer: decoder.decodeObjectForKey("p", decoder: { PeerReference(decoder: $0) }) as! PeerReference, id: MessageId(peerId: PeerId(decoder.decodeInt64ForKey("i.p", orElse: 0)), namespace: decoder.decodeInt32ForKey("i.n", orElse: 0), id: decoder.decodeInt32ForKey("i.i", orElse: 0)), timestamp: 0, incoming: false) default: assertionFailure() self = .none @@ -47,7 +74,7 @@ enum MessageReferenceContent: PostboxCoding, Hashable, Equatable { switch self { case .none: encoder.encodeInt32(0, forKey: "_r") - case let .message(peer, id): + case let .message(peer, id, _, _): encoder.encodeInt32(1, forKey: "_r") encoder.encodeObject(peer, forKey: "p") encoder.encodeInt64(id.peerId.toInt64(), forKey: "i.p") diff --git a/TelegramCore/ManagedAutoremoveMessageOperations.swift b/TelegramCore/ManagedAutoremoveMessageOperations.swift index 35e9e4f9d7..36db665947 100644 --- a/TelegramCore/ManagedAutoremoveMessageOperations.swift +++ b/TelegramCore/ManagedAutoremoveMessageOperations.swift @@ -62,7 +62,7 @@ func managedAutoremoveMessageOperations(postbox: Postbox) -> Signal.complete() - |> delay(max(0.0, Double(entry.timestamp) - timestamp), queue: Queue.concurrentDefaultQueue()) + |> suspendAwareDelay(max(0.0, Double(entry.timestamp) - timestamp), queue: Queue.concurrentDefaultQueue()) |> then(postbox.transaction { transaction -> Void in if let message = transaction.getMessage(entry.messageId) { if message.id.peerId.namespace == Namespaces.Peer.SecretChat { diff --git a/TelegramCore/ManagedConfigurationUpdates.swift b/TelegramCore/ManagedConfigurationUpdates.swift index d321aca575..c72f831139 100644 --- a/TelegramCore/ManagedConfigurationUpdates.swift +++ b/TelegramCore/ManagedConfigurationUpdates.swift @@ -77,5 +77,5 @@ func managedConfigurationUpdates(postbox: Postbox, network: Network) -> Signal then(.complete() |> delay(1.0 * 60.0 * 60.0, queue: Queue.concurrentDefaultQueue()))) |> restart + return (poll |> then(.complete() |> suspendAwareDelay(1.0 * 60.0 * 60.0, queue: Queue.concurrentDefaultQueue()))) |> restart } diff --git a/TelegramCore/PendingMessageManager.swift b/TelegramCore/PendingMessageManager.swift index 59ad2c3848..974ff3fe27 100644 --- a/TelegramCore/PendingMessageManager.swift +++ b/TelegramCore/PendingMessageManager.swift @@ -899,6 +899,9 @@ public final class PendingMessageManager { case let .chatContextResult(chatContextResult): sendMessageRequest = network.request(Api.functions.messages.sendInlineBotResult(flags: flags, peer: inputPeer, replyToMsgId: replyMessageId, randomId: uniqueId, queryId: chatContextResult.queryId, id: chatContextResult.id)) |> map(NetworkRequestResult.result) + case .messageScreenshot: + sendMessageRequest = network.request(Api.functions.messages.sendScreenshotNotification(peer: inputPeer, replyToMsgId: replyMessageId ?? 0, randomId: uniqueId)) + |> map(NetworkRequestResult.result) case .secretMedia: assertionFailure() sendMessageRequest = .fail(MTRpcError(errorCode: 400, errorDescription: "internal")) diff --git a/TelegramCore/PendingMessageUploadedContent.swift b/TelegramCore/PendingMessageUploadedContent.swift index 84840b3774..af07ce1907 100644 --- a/TelegramCore/PendingMessageUploadedContent.swift +++ b/TelegramCore/PendingMessageUploadedContent.swift @@ -15,6 +15,7 @@ enum PendingMessageUploadedContent { case forward(ForwardSourceInfoAttribute) case chatContextResult(OutgoingChatContextResultMessageAttribute) case secretMedia(Api.InputEncryptedFile, Int32, SecretFileEncryptionKey) + case messageScreenshot } enum PendingMessageReuploadInfo { @@ -32,6 +33,7 @@ enum PendingMessageUploadedContentResult { } enum PendingMessageUploadedContentType { + case none case text case media } @@ -66,7 +68,9 @@ func messageContentToUpload(network: Network, postbox: Postbox, auxiliaryMethods } } - if let forwardInfo = forwardInfo { + if let media = media.first as? TelegramMediaAction, media.action == .historyScreenshot { + return (.single(.content(PendingMessageUploadedContentAndReuploadInfo(content: .messageScreenshot, reuploadInfo: nil))), .none) + } else if let forwardInfo = forwardInfo { return (.single(.content(PendingMessageUploadedContentAndReuploadInfo(content: .forward(forwardInfo), reuploadInfo: nil))), .text) } else if let contextResult = contextResult { return (.single(.content(PendingMessageUploadedContentAndReuploadInfo(content: .chatContextResult(contextResult), reuploadInfo: nil))), .text) diff --git a/TelegramCore/SearchMessages.swift b/TelegramCore/SearchMessages.swift index 0c958d6969..0f88ab59aa 100644 --- a/TelegramCore/SearchMessages.swift +++ b/TelegramCore/SearchMessages.swift @@ -273,7 +273,7 @@ public func downloadMessage(postbox: Postbox, network: Network, messageId: Messa } func fetchRemoteMessage(postbox: Postbox, source: FetchMessageHistoryHoleSource, message: MessageReference) -> Signal { - guard case let .message(peer, id) = message.content else { + guard case let .message(peer, id, _, _) = message.content else { return .single(nil) } let signal: Signal diff --git a/TelegramCore/StickerManagement.swift b/TelegramCore/StickerManagement.swift index da1c903a4b..48e2a8b96d 100644 --- a/TelegramCore/StickerManagement.swift +++ b/TelegramCore/StickerManagement.swift @@ -27,7 +27,7 @@ func manageStickerPacks(network: Network, postbox: Postbox) -> Signal then(.complete() |> delay(1.0 * 60.0 * 60.0, queue: Queue.concurrentDefaultQueue()))) |> restart + } |> then(.complete() |> suspendAwareDelay(1.0 * 60.0 * 60.0, queue: Queue.concurrentDefaultQueue()))) |> restart } func updatedFeaturedStickerPacks(network: Network, postbox: Postbox) -> Signal { diff --git a/TelegramCore/TermsOfService.swift b/TelegramCore/TermsOfService.swift index cb214afb6e..2988c23169 100644 --- a/TelegramCore/TermsOfService.swift +++ b/TelegramCore/TermsOfService.swift @@ -71,6 +71,6 @@ func managedTermsOfServiceUpdates(postbox: Postbox, network: Network, stateManag return .complete() } - return (poll |> then(.complete() |> delay(1.0 * 60.0 * 60.0, queue: Queue.concurrentDefaultQueue()))) |> restart + return (poll |> then(.complete() |> suspendAwareDelay(1.0 * 60.0 * 60.0, queue: Queue.concurrentDefaultQueue()))) |> restart }