Adjust timer expiration handler

This commit is contained in:
Ali 2021-02-02 00:12:03 +04:00
parent 2485d6d997
commit e796dcfef2
3 changed files with 26 additions and 4 deletions

View File

@ -1026,7 +1026,7 @@ public class Account {
self.managedOperationsDisposable.add(managedSecretChatOutgoingOperations(auxiliaryMethods: auxiliaryMethods, postbox: self.postbox, network: self.network).start()) self.managedOperationsDisposable.add(managedSecretChatOutgoingOperations(auxiliaryMethods: auxiliaryMethods, postbox: self.postbox, network: self.network).start())
self.managedOperationsDisposable.add(managedCloudChatRemoveMessagesOperations(postbox: self.postbox, network: self.network, stateManager: self.stateManager).start()) self.managedOperationsDisposable.add(managedCloudChatRemoveMessagesOperations(postbox: self.postbox, network: self.network, stateManager: self.stateManager).start())
self.managedOperationsDisposable.add(managedAutoremoveMessageOperations(postbox: self.postbox).start()) self.managedOperationsDisposable.add(managedAutoremoveMessageOperations(network: self.network, postbox: self.postbox).start())
self.managedOperationsDisposable.add(managedGlobalNotificationSettings(postbox: self.postbox, network: self.network).start()) self.managedOperationsDisposable.add(managedGlobalNotificationSettings(postbox: self.postbox, network: self.network).start())
self.managedOperationsDisposable.add(managedSynchronizePinnedChatsOperations(postbox: self.postbox, network: self.network, accountPeerId: self.peerId, stateManager: self.stateManager).start()) self.managedOperationsDisposable.add(managedSynchronizePinnedChatsOperations(postbox: self.postbox, network: self.network, accountPeerId: self.peerId, stateManager: self.stateManager).start())

View File

@ -39,11 +39,29 @@ private final class ManagedAutoremoveMessageOperationsHelper {
} }
} }
func managedAutoremoveMessageOperations(postbox: Postbox) -> Signal<Void, NoError> { func managedAutoremoveMessageOperations(network: Network, postbox: Postbox) -> Signal<Void, NoError> {
return Signal { _ in return Signal { _ in
let helper = Atomic(value: ManagedAutoremoveMessageOperationsHelper()) let helper = Atomic(value: ManagedAutoremoveMessageOperationsHelper())
let disposable = postbox.timestampBasedMessageAttributesView(tag: 0).start(next: { view in let timeOffsetOnce = Signal<Double, NoError> { subscriber in
subscriber.putNext(network.globalTimeDifference)
return EmptyDisposable
}
let timeOffset = (
timeOffsetOnce
|> then(
Signal<Double, NoError>.complete()
|> delay(1.0, queue: .mainQueue())
)
)
|> restart
|> map { value -> Double in
round(value)
}
|> distinctUntilChanged
let disposable = combineLatest(timeOffset, postbox.timestampBasedMessageAttributesView(tag: 0)).start(next: { timeOffset, view in
let (disposeOperations, beginOperations) = helper.with { helper -> (disposeOperations: [Disposable], beginOperations: [(TimestampBasedMessageAttributesEntry, MetaDisposable)]) in let (disposeOperations, beginOperations) = helper.with { helper -> (disposeOperations: [Disposable], beginOperations: [(TimestampBasedMessageAttributesEntry, MetaDisposable)]) in
return helper.update(view.head) return helper.update(view.head)
} }
@ -53,7 +71,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 + timeOffset
let signal = Signal<Void, NoError>.complete() let signal = Signal<Void, NoError>.complete()
|> suspendAwareDelay(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

View File

@ -865,6 +865,10 @@ public final class Network: NSObject, MTRequestMessageServiceDelegate {
return self.context.globalTime() return self.context.globalTime()
} }
public var globalTimeDifference: TimeInterval {
return self.context.globalTimeDifference()
}
public var currentGlobalTime: Signal<Double, NoError> { public var currentGlobalTime: Signal<Double, NoError> {
return Signal { subscriber in return Signal { subscriber in
self.context.performBatchUpdates({ self.context.performBatchUpdates({