input activities bug fixes

This commit is contained in:
overtake 2021-02-23 21:44:39 +04:00
parent 8d0a7f70ed
commit 45760b8253
3 changed files with 13 additions and 17 deletions

View File

@ -1202,12 +1202,12 @@ public class Account {
} }
} }
public func allPeerInputActivities() -> Signal<[PeerActivitySpace: [PeerId: PeerInputActivity]], NoError> { public func allPeerInputActivities() -> Signal<[PeerActivitySpace: [(PeerId, PeerInputActivity)]], NoError> {
return self.peerInputActivityManager.allActivities() return self.peerInputActivityManager.allActivities()
|> map { activities in |> map { activities in
var result: [PeerActivitySpace: [PeerId: PeerInputActivity]] = [:] var result: [PeerActivitySpace: [(PeerId, PeerInputActivity)]] = [:]
for (chatPeerId, chatActivities) in activities { for (chatPeerId, chatActivities) in activities {
result[chatPeerId] = chatActivities.mapValues({ $0.activity }) result[chatPeerId] = chatActivities.map { ($0.0, $0.1.activity) }
} }
return result return result
} }

View File

@ -30,13 +30,13 @@ struct PeerInputActivityRecord: Equatable {
private final class ManagedLocalTypingActivitiesContext { private final class ManagedLocalTypingActivitiesContext {
private var disposables: [PeerActivitySpace: (PeerInputActivityRecord, MetaDisposable)] = [:] private var disposables: [PeerActivitySpace: (PeerInputActivityRecord, MetaDisposable)] = [:]
func update(activities: [PeerActivitySpace: [PeerId: PeerInputActivityRecord]]) -> (start: [(PeerActivitySpace, PeerInputActivityRecord?, MetaDisposable)], dispose: [MetaDisposable]) { func update(activities: [PeerActivitySpace: [(PeerId, PeerInputActivityRecord)]]) -> (start: [(PeerActivitySpace, PeerInputActivityRecord?, MetaDisposable)], dispose: [MetaDisposable]) {
var start: [(PeerActivitySpace, PeerInputActivityRecord?, MetaDisposable)] = [] var start: [(PeerActivitySpace, PeerInputActivityRecord?, MetaDisposable)] = []
var dispose: [MetaDisposable] = [] var dispose: [MetaDisposable] = []
var validPeerIds = Set<PeerActivitySpace>() var validPeerIds = Set<PeerActivitySpace>()
for (peerId, record) in activities { for (peerId, record) in activities {
if let activity = record.values.first { if let activity = record.first?.1 {
validPeerIds.insert(peerId) validPeerIds.insert(peerId)
let currentRecord = self.disposables[peerId] let currentRecord = self.disposables[peerId]
@ -76,7 +76,7 @@ private final class ManagedLocalTypingActivitiesContext {
} }
} }
func managedLocalTypingActivities(activities: Signal<[PeerActivitySpace: [PeerId: PeerInputActivityRecord]], NoError>, postbox: Postbox, network: Network, accountPeerId: PeerId) -> Signal<Void, NoError> { func managedLocalTypingActivities(activities: Signal<[PeerActivitySpace: [(PeerId, PeerInputActivityRecord)]], NoError>, postbox: Postbox, network: Network, accountPeerId: PeerId) -> Signal<Void, NoError> {
return Signal { subscriber in return Signal { subscriber in
let context = Atomic(value: ManagedLocalTypingActivitiesContext()) let context = Atomic(value: ManagedLocalTypingActivitiesContext())
let disposable = activities.start(next: { activities in let disposable = activities.start(next: { activities in

View File

@ -178,9 +178,9 @@ private final class PeerInputActivityContext {
} }
private final class PeerGlobalInputActivityContext { private final class PeerGlobalInputActivityContext {
private let subscribers = Bag<([PeerActivitySpace: [PeerId: PeerInputActivityRecord]]) -> Void>() private let subscribers = Bag<([PeerActivitySpace: [(PeerId, PeerInputActivityRecord)]]) -> Void>()
func addSubscriber(_ subscriber: @escaping ([PeerActivitySpace: [PeerId: PeerInputActivityRecord]]) -> Void) -> Int { func addSubscriber(_ subscriber: @escaping ([PeerActivitySpace: [(PeerId, PeerInputActivityRecord)]]) -> Void) -> Int {
return self.subscribers.add(subscriber) return self.subscribers.add(subscriber)
} }
@ -192,7 +192,7 @@ private final class PeerGlobalInputActivityContext {
return self.subscribers.isEmpty return self.subscribers.isEmpty
} }
func notify(_ activities: [PeerActivitySpace: [PeerId: PeerInputActivityRecord]]) { func notify(_ activities: [PeerActivitySpace: [(PeerId, PeerInputActivityRecord)]]) {
for subscriber in self.subscribers.copyItems() { for subscriber in self.subscribers.copyItems() {
subscriber(activities) subscriber(activities)
} }
@ -256,21 +256,17 @@ final class PeerInputActivityManager {
} }
} }
private func collectActivities() -> [PeerActivitySpace: [PeerId: PeerInputActivityRecord]] { private func collectActivities() -> [PeerActivitySpace: [(PeerId, PeerInputActivityRecord)]] {
assert(self.queue.isCurrent()) assert(self.queue.isCurrent())
var dict: [PeerActivitySpace: [PeerId: PeerInputActivityRecord]] = [:] var dict: [PeerActivitySpace: [(PeerId, PeerInputActivityRecord)]] = [:]
for (chatPeerId, context) in self.contexts { for (chatPeerId, context) in self.contexts {
var chatDict: [PeerId: PeerInputActivityRecord] = [:] dict[chatPeerId] = context.topActivities()
for (peerId, activity) in context.topActivities() {
chatDict[peerId] = activity
}
dict[chatPeerId] = chatDict
} }
return dict return dict
} }
func allActivities() -> Signal<[PeerActivitySpace: [PeerId: PeerInputActivityRecord]], NoError> { func allActivities() -> Signal<[PeerActivitySpace: [(PeerId, PeerInputActivityRecord)]], NoError> {
let queue = self.queue let queue = self.queue
return Signal { [weak self] subscriber in return Signal { [weak self] subscriber in
let disposable = MetaDisposable() let disposable = MetaDisposable()