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()
|> map { activities in
var result: [PeerActivitySpace: [PeerId: PeerInputActivity]] = [:]
var result: [PeerActivitySpace: [(PeerId, PeerInputActivity)]] = [:]
for (chatPeerId, chatActivities) in activities {
result[chatPeerId] = chatActivities.mapValues({ $0.activity })
result[chatPeerId] = chatActivities.map { ($0.0, $0.1.activity) }
}
return result
}

View File

@ -30,13 +30,13 @@ struct PeerInputActivityRecord: Equatable {
private final class ManagedLocalTypingActivitiesContext {
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 dispose: [MetaDisposable] = []
var validPeerIds = Set<PeerActivitySpace>()
for (peerId, record) in activities {
if let activity = record.values.first {
if let activity = record.first?.1 {
validPeerIds.insert(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
let context = Atomic(value: ManagedLocalTypingActivitiesContext())
let disposable = activities.start(next: { activities in

View File

@ -178,9 +178,9 @@ private final class PeerInputActivityContext {
}
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)
}
@ -192,7 +192,7 @@ private final class PeerGlobalInputActivityContext {
return self.subscribers.isEmpty
}
func notify(_ activities: [PeerActivitySpace: [PeerId: PeerInputActivityRecord]]) {
func notify(_ activities: [PeerActivitySpace: [(PeerId, PeerInputActivityRecord)]]) {
for subscriber in self.subscribers.copyItems() {
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())
var dict: [PeerActivitySpace: [PeerId: PeerInputActivityRecord]] = [:]
var dict: [PeerActivitySpace: [(PeerId, PeerInputActivityRecord)]] = [:]
for (chatPeerId, context) in self.contexts {
var chatDict: [PeerId: PeerInputActivityRecord] = [:]
for (peerId, activity) in context.topActivities() {
chatDict[peerId] = activity
}
dict[chatPeerId] = chatDict
dict[chatPeerId] = context.topActivities()
}
return dict
}
func allActivities() -> Signal<[PeerActivitySpace: [PeerId: PeerInputActivityRecord]], NoError> {
func allActivities() -> Signal<[PeerActivitySpace: [(PeerId, PeerInputActivityRecord)]], NoError> {
let queue = self.queue
return Signal { [weak self] subscriber in
let disposable = MetaDisposable()