Fixed secret message timers

This commit is contained in:
Peter 2018-10-16 20:19:11 +03:00
parent 99e33176df
commit af33eaa65f
10 changed files with 49 additions and 12 deletions

View File

@ -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<Void, NoError>.complete() |> delay(10 * 60, queue: Queue.concurrentDefaultQueue()))) |> restart
let signal = (fetchAndUpdateCachedParticipants(peerId: peerId, network: account.network, postbox: account.postbox)
|> then(Signal<Void, NoError>.complete()
|> suspendAwareDelay(10 * 60, queue: Queue.concurrentDefaultQueue())))
|> restart
context.disposable.set(signal.start())
}
}

View File

@ -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))
}))
}

View File

@ -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")

View File

@ -62,7 +62,7 @@ func managedAutoremoveMessageOperations(postbox: Postbox) -> Signal<Void, NoErro
for (entry, disposable) in beginOperations {
let timestamp = CFAbsoluteTimeGetCurrent() + NSTimeIntervalSince1970
let signal = Signal<Void, NoError>.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 {

View File

@ -77,5 +77,5 @@ func managedConfigurationUpdates(postbox: Postbox, network: Network) -> Signal<V
}).start()
}
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
}

View File

@ -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"))

View File

@ -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)

View File

@ -273,7 +273,7 @@ public func downloadMessage(postbox: Postbox, network: Network, messageId: Messa
}
func fetchRemoteMessage(postbox: Postbox, source: FetchMessageHistoryHoleSource, message: MessageReference) -> Signal<Message?, NoError> {
guard case let .message(peer, id) = message.content else {
guard case let .message(peer, id, _, _) = message.content else {
return .single(nil)
}
let signal: Signal<Api.messages.Messages, MTRpcError>

View File

@ -27,7 +27,7 @@ func manageStickerPacks(network: Network, postbox: Postbox) -> Signal<Void, NoEr
addSynchronizeInstalledStickerPacksOperation(transaction: transaction, namespace: .masks, content: .sync)
addSynchronizeSavedGifsOperation(transaction: transaction, operation: .sync)
addSynchronizeSavedStickersOperation(transaction: transaction, operation: .sync)
} |> 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<Void, NoError> {

View File

@ -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
}