mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-08-17 19:09:56 +00:00
Fixed secret message timers
This commit is contained in:
parent
99e33176df
commit
af33eaa65f
@ -748,7 +748,10 @@ public final class AccountViewTracker {
|
|||||||
|
|
||||||
if begin {
|
if begin {
|
||||||
if let account = strongSelf.account {
|
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())
|
context.disposable.set(signal.start())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -56,8 +56,8 @@ private final class ContactSyncManagerImpl {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
strongSelf.addOperation(.waitForUpdatedState)
|
strongSelf.addOperation(.waitForUpdatedState)
|
||||||
strongSelf.addOperation(.sync(importableContacts: importableContacts))
|
|
||||||
strongSelf.addOperation(.updatePresences)
|
strongSelf.addOperation(.updatePresences)
|
||||||
|
strongSelf.addOperation(.sync(importableContacts: importableContacts))
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,9 +10,36 @@ import SwiftSignalKit
|
|||||||
public struct MessageReference: PostboxCoding, Hashable, Equatable {
|
public struct MessageReference: PostboxCoding, Hashable, Equatable {
|
||||||
let content: MessageReferenceContent
|
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) {
|
public init(_ message: Message) {
|
||||||
if let peer = message.peers[message.id.peerId], let inputPeer = PeerReference(peer) {
|
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 {
|
} else {
|
||||||
self.content = .none
|
self.content = .none
|
||||||
}
|
}
|
||||||
@ -29,14 +56,14 @@ public struct MessageReference: PostboxCoding, Hashable, Equatable {
|
|||||||
|
|
||||||
enum MessageReferenceContent: PostboxCoding, Hashable, Equatable {
|
enum MessageReferenceContent: PostboxCoding, Hashable, Equatable {
|
||||||
case none
|
case none
|
||||||
case message(peer: PeerReference, id: MessageId)
|
case message(peer: PeerReference, id: MessageId, timestamp: Int32, incoming: Bool)
|
||||||
|
|
||||||
init(decoder: PostboxDecoder) {
|
init(decoder: PostboxDecoder) {
|
||||||
switch decoder.decodeInt32ForKey("_r", orElse: 0) {
|
switch decoder.decodeInt32ForKey("_r", orElse: 0) {
|
||||||
case 0:
|
case 0:
|
||||||
self = .none
|
self = .none
|
||||||
case 1:
|
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:
|
default:
|
||||||
assertionFailure()
|
assertionFailure()
|
||||||
self = .none
|
self = .none
|
||||||
@ -47,7 +74,7 @@ enum MessageReferenceContent: PostboxCoding, Hashable, Equatable {
|
|||||||
switch self {
|
switch self {
|
||||||
case .none:
|
case .none:
|
||||||
encoder.encodeInt32(0, forKey: "_r")
|
encoder.encodeInt32(0, forKey: "_r")
|
||||||
case let .message(peer, id):
|
case let .message(peer, id, _, _):
|
||||||
encoder.encodeInt32(1, forKey: "_r")
|
encoder.encodeInt32(1, forKey: "_r")
|
||||||
encoder.encodeObject(peer, forKey: "p")
|
encoder.encodeObject(peer, forKey: "p")
|
||||||
encoder.encodeInt64(id.peerId.toInt64(), forKey: "i.p")
|
encoder.encodeInt64(id.peerId.toInt64(), forKey: "i.p")
|
||||||
|
@ -62,7 +62,7 @@ func managedAutoremoveMessageOperations(postbox: Postbox) -> Signal<Void, NoErro
|
|||||||
for (entry, disposable) in beginOperations {
|
for (entry, disposable) in beginOperations {
|
||||||
let timestamp = CFAbsoluteTimeGetCurrent() + NSTimeIntervalSince1970
|
let timestamp = CFAbsoluteTimeGetCurrent() + NSTimeIntervalSince1970
|
||||||
let signal = Signal<Void, NoError>.complete()
|
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
|
|> then(postbox.transaction { transaction -> Void in
|
||||||
if let message = transaction.getMessage(entry.messageId) {
|
if let message = transaction.getMessage(entry.messageId) {
|
||||||
if message.id.peerId.namespace == Namespaces.Peer.SecretChat {
|
if message.id.peerId.namespace == Namespaces.Peer.SecretChat {
|
||||||
|
@ -77,5 +77,5 @@ func managedConfigurationUpdates(postbox: Postbox, network: Network) -> Signal<V
|
|||||||
}).start()
|
}).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
|
||||||
}
|
}
|
||||||
|
@ -899,6 +899,9 @@ public final class PendingMessageManager {
|
|||||||
case let .chatContextResult(chatContextResult):
|
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))
|
sendMessageRequest = network.request(Api.functions.messages.sendInlineBotResult(flags: flags, peer: inputPeer, replyToMsgId: replyMessageId, randomId: uniqueId, queryId: chatContextResult.queryId, id: chatContextResult.id))
|
||||||
|> map(NetworkRequestResult.result)
|
|> map(NetworkRequestResult.result)
|
||||||
|
case .messageScreenshot:
|
||||||
|
sendMessageRequest = network.request(Api.functions.messages.sendScreenshotNotification(peer: inputPeer, replyToMsgId: replyMessageId ?? 0, randomId: uniqueId))
|
||||||
|
|> map(NetworkRequestResult.result)
|
||||||
case .secretMedia:
|
case .secretMedia:
|
||||||
assertionFailure()
|
assertionFailure()
|
||||||
sendMessageRequest = .fail(MTRpcError(errorCode: 400, errorDescription: "internal"))
|
sendMessageRequest = .fail(MTRpcError(errorCode: 400, errorDescription: "internal"))
|
||||||
|
@ -15,6 +15,7 @@ enum PendingMessageUploadedContent {
|
|||||||
case forward(ForwardSourceInfoAttribute)
|
case forward(ForwardSourceInfoAttribute)
|
||||||
case chatContextResult(OutgoingChatContextResultMessageAttribute)
|
case chatContextResult(OutgoingChatContextResultMessageAttribute)
|
||||||
case secretMedia(Api.InputEncryptedFile, Int32, SecretFileEncryptionKey)
|
case secretMedia(Api.InputEncryptedFile, Int32, SecretFileEncryptionKey)
|
||||||
|
case messageScreenshot
|
||||||
}
|
}
|
||||||
|
|
||||||
enum PendingMessageReuploadInfo {
|
enum PendingMessageReuploadInfo {
|
||||||
@ -32,6 +33,7 @@ enum PendingMessageUploadedContentResult {
|
|||||||
}
|
}
|
||||||
|
|
||||||
enum PendingMessageUploadedContentType {
|
enum PendingMessageUploadedContentType {
|
||||||
|
case none
|
||||||
case text
|
case text
|
||||||
case media
|
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)
|
return (.single(.content(PendingMessageUploadedContentAndReuploadInfo(content: .forward(forwardInfo), reuploadInfo: nil))), .text)
|
||||||
} else if let contextResult = contextResult {
|
} else if let contextResult = contextResult {
|
||||||
return (.single(.content(PendingMessageUploadedContentAndReuploadInfo(content: .chatContextResult(contextResult), reuploadInfo: nil))), .text)
|
return (.single(.content(PendingMessageUploadedContentAndReuploadInfo(content: .chatContextResult(contextResult), reuploadInfo: nil))), .text)
|
||||||
|
@ -273,7 +273,7 @@ public func downloadMessage(postbox: Postbox, network: Network, messageId: Messa
|
|||||||
}
|
}
|
||||||
|
|
||||||
func fetchRemoteMessage(postbox: Postbox, source: FetchMessageHistoryHoleSource, message: MessageReference) -> Signal<Message?, NoError> {
|
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)
|
return .single(nil)
|
||||||
}
|
}
|
||||||
let signal: Signal<Api.messages.Messages, MTRpcError>
|
let signal: Signal<Api.messages.Messages, MTRpcError>
|
||||||
|
@ -27,7 +27,7 @@ func manageStickerPacks(network: Network, postbox: Postbox) -> Signal<Void, NoEr
|
|||||||
addSynchronizeInstalledStickerPacksOperation(transaction: transaction, namespace: .masks, content: .sync)
|
addSynchronizeInstalledStickerPacksOperation(transaction: transaction, namespace: .masks, content: .sync)
|
||||||
addSynchronizeSavedGifsOperation(transaction: transaction, operation: .sync)
|
addSynchronizeSavedGifsOperation(transaction: transaction, operation: .sync)
|
||||||
addSynchronizeSavedStickersOperation(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> {
|
func updatedFeaturedStickerPacks(network: Network, postbox: Postbox) -> Signal<Void, NoError> {
|
||||||
|
@ -71,6 +71,6 @@ func managedTermsOfServiceUpdates(postbox: Postbox, network: Network, stateManag
|
|||||||
return .complete()
|
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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user