Paid media improvements

This commit is contained in:
Ilya Laktyushin 2024-06-24 16:51:22 +04:00
parent 9ca023a472
commit 7d5d9ba7ba
4 changed files with 41 additions and 8 deletions

View File

@ -1040,8 +1040,13 @@ public class AttachmentController: ViewController {
public override var isMinimized: Bool {
didSet {
let transition = ContainedViewLayoutTransition.animated(duration: 0.2, curve: .easeInOut)
transition.updateAlpha(node: self.node.dim, alpha: self.isMinimized ? 0.0 : 1.0)
guard self.isMinimized != oldValue else {
return
}
if !self.node.isDismissing {
let transition = ContainedViewLayoutTransition.animated(duration: 0.2, curve: .easeInOut)
transition.updateAlpha(node: self.node.dim, alpha: self.isMinimized ? 0.0 : 1.0)
}
}
}

View File

@ -240,7 +240,7 @@ public func galleryItemForEntry(
} else if let file = media as? TelegramMediaFile {
if file.isVideo {
let content: UniversalVideoContent
let captureProtected = message.isCopyProtected() || message.containsSecretMedia || message.minAutoremoveOrClearTimeout == viewOnceTimeout
let captureProtected = message.isCopyProtected() || message.containsSecretMedia || message.minAutoremoveOrClearTimeout == viewOnceTimeout || message.paidContent != nil
if file.isAnimated {
content = NativeVideoContent(id: .message(message.stableId, file.fileId), userLocation: .peer(message.id.peerId), fileReference: .message(message: MessageReference(message), media: file), imageReference: mediaImage.flatMap({ ImageMediaReference.message(message: MessageReference(message), media: $0) }), loopVideo: true, enableSound: false, tempFilePath: tempFilePath, captureProtected: captureProtected, storeAfterDownload: generateStoreAfterDownload?(message, file))
} else {

View File

@ -258,6 +258,16 @@ final class ChatImageGalleryItemNode: ZoomableContentGalleryItemNode {
private var currentSpeechHolder: SpeechSynthesizerHolder?
override var baseNavigationController: () -> NavigationController? {
didSet {
if let _ = self.baseNavigationController() {
self.moreBarButton.isHidden = false
} else {
self.moreBarButton.isHidden = true
}
}
}
init(context: AccountContext, presentationData: PresentationData, performAction: @escaping (GalleryControllerInteractionTapAction) -> Void, openActionOptions: @escaping (GalleryControllerInteractionTapAction, Message) -> Void, present: @escaping (ViewController, Any?) -> Void) {
self.context = context
self.presentationData = presentationData
@ -356,7 +366,7 @@ final class ChatImageGalleryItemNode: ZoomableContentGalleryItemNode {
self.translateToLanguage = translateToLanguage
self.peerIsCopyProtected = peerIsCopyProtected
self.isSecret = isSecret
self.imageNode.captureProtected = message.id.peerId.namespace == Namespaces.Peer.SecretChat || message.isCopyProtected() || peerIsCopyProtected || isSecret
self.imageNode.captureProtected = message.id.peerId.namespace == Namespaces.Peer.SecretChat || message.isCopyProtected() || peerIsCopyProtected || isSecret || message.paidContent != nil
self.footerContentNode.setMessage(message, displayInfo: displayInfo, translateToLanguage: translateToLanguage, peerIsCopyProtected: peerIsCopyProtected)
}

View File

@ -1195,7 +1195,7 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode {
var hintSeekable = false
if let contentInfo = item.contentInfo, case let .message(message, _) = contentInfo {
if Namespaces.Message.allNonRegular.contains(message.id.namespace) {
if Namespaces.Message.allNonRegular.contains(message.id.namespace) || message.id.namespace == Namespaces.Message.Local {
disablePictureInPicture = true
} else {
let throttledSignal = videoNode.status
@ -1443,7 +1443,7 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode {
self.hasPictureInPicture = false
}
if let contentInfo = item.contentInfo, case let .message(message, _) = contentInfo {
if let contentInfo = item.contentInfo, case let .message(message, mediaIndex) = contentInfo {
var file: TelegramMediaFile?
for m in message.media {
if let m = m as? TelegramMediaFile, m.isVideo {
@ -1452,6 +1452,13 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode {
} else if let m = m as? TelegramMediaWebpage, case let .Loaded(content) = m.content, let f = content.file, f.isVideo {
file = f
break
} else if let paidContent = message.paidContent {
let mediaIndex = mediaIndex ?? 0
let media = paidContent.extendedMedia[mediaIndex]
if case let .full(fullMedia) = media, let m = fullMedia as? TelegramMediaFile {
file = m
}
break
}
}
@ -1461,6 +1468,10 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode {
} else if let file = file, !file.isAnimated {
hasMoreButton = true
}
if let _ = message.paidContent, message.id.namespace == Namespaces.Message.Local {
hasMoreButton = false
}
if hasMoreButton {
let moreMenuItem = UIBarButtonItem(customDisplayNode: self.moreBarButton)!
@ -2327,8 +2338,15 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode {
}
switch contentInfo {
case let .message(message, _):
let gallery = GalleryController(context: context, source: .peerMessagesAtId(messageId: message.id, chatLocation: .peer(id: message.id.peerId), customTag: nil, chatLocationContextHolder: Atomic<ChatLocationContextHolder?>(value: nil)), playbackRate: playbackRate, replaceRootController: { controller, ready in
case let .message(message, messageIndex):
let source: GalleryControllerItemSource
if let _ = message.paidContent {
source = .standaloneMessage(message, messageIndex)
} else {
source = .peerMessagesAtId(messageId: message.id, chatLocation: .peer(id: message.id.peerId), customTag: nil, chatLocationContextHolder: Atomic<ChatLocationContextHolder?>(value: nil))
}
let gallery = GalleryController(context: context, source: source, playbackRate: playbackRate, replaceRootController: { controller, ready in
if let baseNavigationController = baseNavigationController {
baseNavigationController.replaceTopController(controller, animated: false, ready: ready)
}