Chat wallpaper improvements

This commit is contained in:
Ilya Laktyushin 2023-04-14 18:49:31 +04:00
parent 3a0a251839
commit 320ac0688e
4 changed files with 42 additions and 2 deletions

View File

@ -310,7 +310,7 @@ public func uploadCustomPeerWallpaper(context: AccountContext, wallpaper: Wallpa
context.account.pendingPeerMediaUploadManager.add(peerId: peerId, content: .wallpaper(temporaryWallpaper)) context.account.pendingPeerMediaUploadManager.add(peerId: peerId, content: .wallpaper(temporaryWallpaper))
Queue.mainQueue().async { Queue.mainQueue().after(0.05) {
completion() completion()
} }
} }

View File

@ -508,7 +508,7 @@ final class WallpaperGalleryItemNode: GalleryItemNode {
Queue.mainQueue().after(0.1) { Queue.mainQueue().after(0.1) {
self.brightnessNode.isHidden = false self.brightnessNode.isHidden = false
self.temporaryImageNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, delay: 0.2, removeOnCompletion: false, completion: { [weak self] _ in self.temporaryImageNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.3, delay: 0.2, removeOnCompletion: false, completion: { [weak self] _ in
self?.temporaryImageNode.image = nil self?.temporaryImageNode.image = nil
self?.temporaryImageNode.layer.removeAllAnimations() self?.temporaryImageNode.layer.removeAllAnimations()
}) })

View File

@ -147,6 +147,8 @@ private final class PendingPeerMediaUploadManagerImpl {
let stateManager: AccountStateManager let stateManager: AccountStateManager
let accountPeerId: EnginePeer.Id let accountPeerId: EnginePeer.Id
let sentMessageEventPipe: ValuePipe<EnginePeer.Id>
private var uploadingPeerMediaValue: [EnginePeer.Id: PeerMediaUploadingItem] = [:] { private var uploadingPeerMediaValue: [EnginePeer.Id: PeerMediaUploadingItem] = [:] {
didSet { didSet {
if self.uploadingPeerMediaValue != oldValue { if self.uploadingPeerMediaValue != oldValue {
@ -168,6 +170,8 @@ private final class PendingPeerMediaUploadManagerImpl {
self.stateManager = stateManager self.stateManager = stateManager
self.accountPeerId = accountPeerId self.accountPeerId = accountPeerId
self.sentMessageEventPipe = ValuePipe()
self.uploadingPeerMediaPromise.set(.single(self.uploadingPeerMediaValue)) self.uploadingPeerMediaPromise.set(.single(self.uploadingPeerMediaValue))
} }
@ -221,6 +225,8 @@ private final class PendingPeerMediaUploadManagerImpl {
context.value = context.value.withMessageId(messageId) context.value = context.value.withMessageId(messageId)
strongSelf.updateValues() strongSelf.updateValues()
strongSelf.sentMessageEventPipe.putNext(peerId)
context.disposable.set((uploadPeerMedia(postbox: postbox, network: network, stateManager: stateManager, peerId: peerId, content: content) context.disposable.set((uploadPeerMedia(postbox: postbox, network: network, stateManager: stateManager, peerId: peerId, content: content)
|> deliverOn(queue)).start(next: { [weak self, weak context] value in |> deliverOn(queue)).start(next: { [weak self, weak context] value in
guard let strongSelf = self, let initialContext = context else { guard let strongSelf = self, let initialContext = context else {
@ -324,6 +330,17 @@ private final class PendingPeerMediaUploadManagerImpl {
} }
|> distinctUntilChanged |> distinctUntilChanged
} }
public func sentMessageEvents(peerId: EnginePeer.Id) -> Signal<Void, NoError> {
return self.sentMessageEventPipe.signal()
|> mapToSignal { eventPeerId -> Signal<Void, NoError> in
if eventPeerId == peerId {
return .single(Void())
} else {
return .complete()
}
}
}
} }
public final class PendingPeerMediaUploadManager { public final class PendingPeerMediaUploadManager {
@ -372,4 +389,16 @@ public final class PendingPeerMediaUploadManager {
return disposable return disposable
} }
} }
public func sentMessageEvents(peerId: EnginePeer.Id) -> Signal<Void, NoError> {
return Signal { subscriber in
let disposable = MetaDisposable()
self.impl.with { impl in
disposable.set(impl.sentMessageEvents(peerId: peerId).start(next: { value in
subscriber.putNext(value)
}))
}
return disposable
}
}
} }

View File

@ -289,6 +289,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
private let controllerNavigationDisposable = MetaDisposable() private let controllerNavigationDisposable = MetaDisposable()
private let sentMessageEventsDisposable = MetaDisposable() private let sentMessageEventsDisposable = MetaDisposable()
private let failedMessageEventsDisposable = MetaDisposable() private let failedMessageEventsDisposable = MetaDisposable()
private let sentPeerMediaMessageEventsDisposable = MetaDisposable()
private weak var currentFailedMessagesAlertController: ViewController? private weak var currentFailedMessagesAlertController: ViewController?
private let messageActionCallbackDisposable = MetaDisposable() private let messageActionCallbackDisposable = MetaDisposable()
private let messageActionUrlAuthDisposable = MetaDisposable() private let messageActionUrlAuthDisposable = MetaDisposable()
@ -6147,6 +6148,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
self.controllerNavigationDisposable.dispose() self.controllerNavigationDisposable.dispose()
self.sentMessageEventsDisposable.dispose() self.sentMessageEventsDisposable.dispose()
self.failedMessageEventsDisposable.dispose() self.failedMessageEventsDisposable.dispose()
self.sentPeerMediaMessageEventsDisposable.dispose()
self.messageActionCallbackDisposable.dispose() self.messageActionCallbackDisposable.dispose()
self.messageActionUrlAuthDisposable.dispose() self.messageActionUrlAuthDisposable.dispose()
self.editMessageDisposable.dispose() self.editMessageDisposable.dispose()
@ -10758,6 +10760,15 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
strongSelf.present(controller, in: .window(.root)) strongSelf.present(controller, in: .window(.root))
} }
})) }))
self.sentPeerMediaMessageEventsDisposable.set(
(self.context.account.pendingPeerMediaUploadManager.sentMessageEvents(peerId: peerId)
|> deliverOnMainQueue).start(next: { [weak self] _ in
if let self {
self.chatDisplayNode.historyNode.scrollToEndOfHistory()
}
})
)
} }
} }