From a1de4e39b2f9be8b17386d61fd304422ecd92a5d Mon Sep 17 00:00:00 2001 From: Isaac <> Date: Fri, 6 Dec 2024 22:14:31 +0800 Subject: [PATCH] Fix stories in download list --- .../Sources/ChatListSearchListPaneNode.swift | 4 +++- .../Sources/ListMessageFileItemNode.swift | 18 ++++++++++++++++++ .../Sources/ListMessageItem.swift | 4 ++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/submodules/ChatListUI/Sources/ChatListSearchListPaneNode.swift b/submodules/ChatListUI/Sources/ChatListSearchListPaneNode.swift index 3120147528..1e0723ebfa 100644 --- a/submodules/ChatListUI/Sources/ChatListSearchListPaneNode.swift +++ b/submodules/ChatListUI/Sources/ChatListSearchListPaneNode.swift @@ -964,7 +964,7 @@ public enum ChatListSearchEntry: Comparable, Identifiable { } let selection: ChatHistoryMessageSelection = selected.flatMap { .selectable(selected: $0) } ?? .none var isMedia = false - if let tagMask = tagMask, tagMask != .photoOrVideo { + if let tagMask, tagMask != .photoOrVideo { isMedia = true } else if key == .downloads { isMedia = true @@ -3105,6 +3105,8 @@ final class ChatListSearchListPaneNode: ASDisplayNode, ChatListSearchPaneNode { return [:] }) + listInteraction.preferredStoryHighQuality = context.sharedContext.currentAutomaticMediaDownloadSettings.highQualityStories + let previousSearchItems = Atomic<[ChatListSearchEntry]?>(value: nil) let previousSelectedMessages = Atomic?>(value: nil) let previousExpandGlobalSearch = Atomic(value: false) diff --git a/submodules/ListMessageItem/Sources/ListMessageFileItemNode.swift b/submodules/ListMessageItem/Sources/ListMessageFileItemNode.swift index f226d6ac75..37b56715f8 100644 --- a/submodules/ListMessageItem/Sources/ListMessageFileItemNode.swift +++ b/submodules/ListMessageItem/Sources/ListMessageFileItemNode.swift @@ -160,6 +160,14 @@ final class CachedChatListSearchResult { } } +private func selectStoryMedia(item: Stories.Item, preferredHighQuality: Bool) -> Media? { + if !preferredHighQuality, let alternativeMediaValue = item.alternativeMediaList.first { + return alternativeMediaValue + } else { + return item.media + } +} + public final class ListMessageFileItemNode: ListMessageNode { public final class DescriptionNode: ASDisplayNode { let descriptionNode: TextNode @@ -625,7 +633,17 @@ public final class ListMessageFileItemNode: ListMessageNode { var selectedMedia: Media? if let message = message { + var effectiveMessageMedia = message.media for media in message.media { + if let storyMedia = media as? TelegramMediaStory { + if let story = message.associatedStories[storyMedia.storyId], !story.data.isEmpty, case let .item(storyItem) = story.get(Stories.StoredItem.self), let media = selectStoryMedia(item: storyItem, preferredHighQuality: item.interaction.preferredStoryHighQuality) { + effectiveMessageMedia = [media] + break + } + } + } + + for media in effectiveMessageMedia { if let file = media as? TelegramMediaFile { selectedMedia = file diff --git a/submodules/ListMessageItem/Sources/ListMessageItem.swift b/submodules/ListMessageItem/Sources/ListMessageItem.swift index b603d08e4e..f48e0ee89b 100644 --- a/submodules/ListMessageItem/Sources/ListMessageItem.swift +++ b/submodules/ListMessageItem/Sources/ListMessageItem.swift @@ -20,6 +20,7 @@ public final class ListMessageItemInteraction { let getHiddenMedia: () -> [MessageId: [Media]] public var searchTextHighightState: String? + public var preferredStoryHighQuality: Bool = false public init(openMessage: @escaping (Message, ChatControllerInteractionOpenMessageMode) -> Bool, openMessageContextMenu: @escaping (Message, Bool, ASDisplayNode, CGRect, UIGestureRecognizer?) -> Void, toggleMessagesSelection: @escaping ([MessageId], Bool) -> Void, openUrl: @escaping (String, Bool, Bool?, Message?) -> Void, openInstantPage: @escaping (Message, ChatMessageItemAssociatedData?) -> Void, longTap: @escaping (ChatControllerInteractionLongTapAction, Message?) -> Void, getHiddenMedia: @escaping () -> [MessageId: [Media]]) { self.openMessage = openMessage @@ -97,6 +98,9 @@ public final class ListMessageItem: ListViewItem { } else if let _ = media as? TelegramMediaImage { viewClassName = ListMessageFileItemNode.self break + } else if let _ = media as? TelegramMediaStory { + viewClassName = ListMessageFileItemNode.self + break } } } else {