mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-10-08 19:10:53 +00:00
Video avatar fixes
This commit is contained in:
parent
fe6188db45
commit
8361cf7962
1
bazel-Telegram-iOS-Beta
Symbolic link
1
bazel-Telegram-iOS-Beta
Symbolic link
@ -0,0 +1 @@
|
||||
/private/var/tmp/_bazel_ilya/b5422c0ab62ebf818a9d47ff552063a2/execroot/__main__
|
@ -8,6 +8,8 @@ func parsedTelegramProfilePhoto(_ photo: Api.UserProfilePhoto) -> [TelegramMedia
|
||||
var representations: [TelegramMediaImageRepresentation] = []
|
||||
switch photo {
|
||||
case let .userProfilePhoto(flags, _, photoSmall, photoBig, dcId):
|
||||
let hasVideo = (flags & (1 << 0)) != 0
|
||||
|
||||
let smallResource: TelegramMediaResource
|
||||
let fullSizeResource: TelegramMediaResource
|
||||
switch photoSmall {
|
||||
|
@ -317,6 +317,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
private var focusOnSearchAfterAppearance: (ChatSearchDomain, String)?
|
||||
|
||||
private let keepPeerInfoScreenDataHotDisposable = MetaDisposable()
|
||||
private let preloadAvatarDisposable = MetaDisposable()
|
||||
|
||||
private let peekData: ChatPeekTimeout?
|
||||
private let peekTimerDisposable = MetaDisposable()
|
||||
@ -2238,7 +2239,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
(strongSelf.chatInfoNavigationButton?.buttonItem.customDisplayNode as? ChatAvatarNavigationNode)?.avatarNode.setPeer(context: strongSelf.context, theme: strongSelf.presentationData.theme, peer: peer, overrideImage: imageOverride)
|
||||
(strongSelf.chatInfoNavigationButton?.buttonItem.customDisplayNode as? ChatAvatarNavigationNode)?.contextActionIsEnabled = peer.restrictionText(platform: "ios", contentSettings: strongSelf.context.currentContentSettings.with { $0 }) == nil
|
||||
}
|
||||
|
||||
|
||||
if strongSelf.peerView === peerView && strongSelf.reportIrrelvantGeoNotice == peerReportNotice && strongSelf.hasScheduledMessages == hasScheduledMessages {
|
||||
return
|
||||
}
|
||||
@ -2749,6 +2750,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
self.reminderActivity?.invalidate()
|
||||
self.updateSlowmodeStatusDisposable.dispose()
|
||||
self.keepPeerInfoScreenDataHotDisposable.dispose()
|
||||
self.preloadAvatarDisposable.dispose()
|
||||
self.peekTimerDisposable.dispose()
|
||||
}
|
||||
|
||||
@ -5063,7 +5065,16 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
}))
|
||||
|
||||
if case let .peer(peerId) = self.chatLocation {
|
||||
self.keepPeerInfoScreenDataHotDisposable.set(keepPeerInfoScreenDataHot(context: self.context, peerId: peerId).start())
|
||||
let context = self.context
|
||||
self.keepPeerInfoScreenDataHotDisposable.set(keepPeerInfoScreenDataHot(context: context, peerId: peerId).start())
|
||||
self.preloadAvatarDisposable.set((peerInfoProfilePhotosWithCache(context: context, peerId: peerId)
|
||||
|> mapToSignal { result -> Signal<Never, NoError> in
|
||||
if let video = result.first?.videoRepresentations.first {
|
||||
let duration: Double = (video.representation.startTimestamp ?? 0.0) + 4.0
|
||||
return preloadVideoResource(postbox: context.account.postbox, resourceReference: video.reference, duration: duration)
|
||||
}
|
||||
return .complete()
|
||||
}).start())
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -197,13 +197,14 @@ final class PeerInfoAvatarListItemNode: ASDisplayNode {
|
||||
|
||||
var item: PeerInfoAvatarListItem?
|
||||
|
||||
private var statusPromise = Promise<(MediaPlayerStatus?, Double?)?>()
|
||||
var mediaStatus: Signal<(MediaPlayerStatus?, Double?)?, NoError> {
|
||||
get {
|
||||
if let videoNode = self.videoNode {
|
||||
let videoStartTimestamp = self.videoStartTimestamp
|
||||
return videoNode.status |> map { ($0, videoStartTimestamp) }
|
||||
} else {
|
||||
return .single(nil)
|
||||
return self.statusPromise.get()
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -296,6 +297,9 @@ final class PeerInfoAvatarListItemNode: ASDisplayNode {
|
||||
videoNode.play()
|
||||
|
||||
self.videoNode = videoNode
|
||||
let videoStartTimestamp = self.videoStartTimestamp
|
||||
self.statusPromise.set(videoNode.status |> map { ($0, videoStartTimestamp) })
|
||||
|
||||
self.addSubnode(videoNode)
|
||||
|
||||
self.isReady.set(videoNode.ready |> map { return true })
|
||||
@ -344,6 +348,8 @@ final class PeerInfoAvatarListItemNode: ASDisplayNode {
|
||||
videoNode.removeFromSupernode()
|
||||
}
|
||||
|
||||
self.statusPromise.set(.single(nil))
|
||||
|
||||
self.imageNode.imageUpdated = { [weak self] _ in
|
||||
guard let strongSelf = self else {
|
||||
return
|
||||
|
Loading…
x
Reference in New Issue
Block a user