mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-08-02 00:17:02 +00:00
input activities bug fixes
This commit is contained in:
parent
8d0a7f70ed
commit
45760b8253
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user