diff --git a/submodules/AttachmentUI/Sources/AttachmentController.swift b/submodules/AttachmentUI/Sources/AttachmentController.swift index e2ddf47415..b8ef8db046 100644 --- a/submodules/AttachmentUI/Sources/AttachmentController.swift +++ b/submodules/AttachmentUI/Sources/AttachmentController.swift @@ -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) + } } } diff --git a/submodules/GalleryUI/Sources/GalleryController.swift b/submodules/GalleryUI/Sources/GalleryController.swift index ea67672135..4ce047d5ce 100644 --- a/submodules/GalleryUI/Sources/GalleryController.swift +++ b/submodules/GalleryUI/Sources/GalleryController.swift @@ -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 { diff --git a/submodules/GalleryUI/Sources/Items/ChatImageGalleryItem.swift b/submodules/GalleryUI/Sources/Items/ChatImageGalleryItem.swift index 1a130b7b40..0b2fb3983d 100644 --- a/submodules/GalleryUI/Sources/Items/ChatImageGalleryItem.swift +++ b/submodules/GalleryUI/Sources/Items/ChatImageGalleryItem.swift @@ -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) } diff --git a/submodules/GalleryUI/Sources/Items/UniversalVideoGalleryItem.swift b/submodules/GalleryUI/Sources/Items/UniversalVideoGalleryItem.swift index 6763dd8670..e411e3f03d 100644 --- a/submodules/GalleryUI/Sources/Items/UniversalVideoGalleryItem.swift +++ b/submodules/GalleryUI/Sources/Items/UniversalVideoGalleryItem.swift @@ -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(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(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) }