This commit is contained in:
Isaac 2026-02-24 11:11:50 +01:00
parent d52e4d9b62
commit e36e44ed72

View file

@ -223,6 +223,10 @@ public final class PendingMessageManager {
public var pendingMessageCount: Signal<[PeerId: Int], NoError> {
return self._pendingMessageCount.get()
}
private let _pendingMediaUploads = ValuePromise<[MessageId: Float]>([:], ignoreRepeated: true)
public var pendingMediaUploads: Signal<[MessageId: Float], NoError> {
return self._pendingMediaUploads.get()
}
private var messageContexts: [MessageId: PendingMessageContext] = [:]
private var pendingMessageIds = Set<MessageId>()
@ -255,6 +259,28 @@ public final class PendingMessageManager {
}
}
private func updatePendingMediaUploads() {
assert(self.queue.isCurrent())
var pendingMediaUploads: [MessageId: Float] = [:]
for (id, context) in self.messageContexts {
guard case .media? = context.contentType else {
continue
}
switch context.state {
case .waitingForUploadToStart:
pendingMediaUploads[id] = context.status?.progress.progress ?? 0.0
case .uploading:
pendingMediaUploads[id] = context.status?.progress.progress ?? 0.0
default:
break
}
}
self._pendingMediaUploads.set(pendingMediaUploads)
}
func updatePendingMessageIds(_ messageIds: Set<MessageId>) {
Logger.shared.log("PendingMessageManager", "update on postboxQueue: \(messageIds)")
@ -356,6 +382,7 @@ public final class PendingMessageManager {
Logger.shared.log("PendingMessageManager", "pending messages: \(self.pendingMessageIds)")
self._pendingMessageCount.set(pendingMessageCount)
self.updatePendingMediaUploads()
}
}
@ -628,6 +655,7 @@ public final class PendingMessageManager {
messageContext.state = .waitingForUploadToStart(groupId: message.groupingKey, upload: contentUploadSignal)
}
}
strongSelf.updatePendingMediaUploads()
Logger.shared.log("PendingMessageManager", "beginSendingMessages messagesToForward.count: \(messagesToForward.count)")
@ -713,6 +741,7 @@ public final class PendingMessageManager {
} else {
self.commitSendingSingleMessage(messageContext: messageContext, messageId: messageId, content: content)
}
self.updatePendingMediaUploads()
}
private func beginSendingGroupIfPossible(groupId: Int64) {
@ -849,6 +878,7 @@ public final class PendingMessageManager {
activityCategory = .global
}
self.addContextActivityIfNeeded(messageContext, peerId: PeerActivitySpace(peerId: id.peerId, category: activityCategory))
self.updatePendingMediaUploads()
let queue = self.queue
@ -884,6 +914,7 @@ public final class PendingMessageManager {
for subscriber in current.statusSubscribers.copyItems() {
subscriber(current.status, current.error)
}
strongSelf.updatePendingMediaUploads()
}
case let .content(content):
if let current = strongSelf.messageContexts[id] {
@ -927,6 +958,7 @@ public final class PendingMessageManager {
}
self.addContextActivityIfNeeded(context, peerId: PeerActivitySpace(peerId: peerId, category: activityCategory))
self.updatePendingMediaUploads()
context.uploadDisposable.set((uploadSignal
|> deliverOn(self.queue)).start(next: { [weak self] next in
if let strongSelf = self {
@ -940,6 +972,7 @@ public final class PendingMessageManager {
for subscriber in current.statusSubscribers.copyItems() {
subscriber(context.status, context.error)
}
strongSelf.updatePendingMediaUploads()
}
case let .content(content):
if let current = strongSelf.messageContexts[contextId] {