Fix stories in download list

(cherry picked from commit a1de4e39b2f9be8b17386d61fd304422ecd92a5d)
This commit is contained in:
Isaac 2024-12-06 22:14:31 +08:00
parent af8276cf2d
commit 4d66bf7194
3 changed files with 25 additions and 1 deletions

View File

@ -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<Set<EngineMessage.Id>?>(value: nil)
let previousExpandGlobalSearch = Atomic<Bool>(value: false)

View File

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

View File

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