Video avatar fixes

This commit is contained in:
Ilya Laktyushin 2020-07-15 13:40:29 +03:00
parent fe6188db45
commit 8361cf7962
4 changed files with 23 additions and 3 deletions

1
bazel-Telegram-iOS-Beta Symbolic link
View File

@ -0,0 +1 @@
/private/var/tmp/_bazel_ilya/b5422c0ab62ebf818a9d47ff552063a2/execroot/__main__

View File

@ -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 {

View File

@ -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())
}
}

View File

@ -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