mirror of
https://github.com/TelegramMessenger/Telegram-iOS.git
synced 2026-07-06 03:33:41 +02:00
Merge branch 'master' of gitlab.com:peter-iakovlev/telegram-ios
This commit is contained in:
commit
90f110a311
8 changed files with 89 additions and 26 deletions
|
|
@ -169,10 +169,10 @@ public func peerMessageMediaPlayerType(_ message: EngineMessage) -> MediaManager
|
|||
return nil
|
||||
}
|
||||
|
||||
public func peerMessagesMediaPlaylistAndItemId(_ message: EngineMessage, isRecentActions: Bool, isGlobalSearch: Bool, isDownloadList: Bool, isSavedMusic: Bool) -> (SharedMediaPlaylistId, SharedMediaPlaylistItemId)? {
|
||||
public func peerMessagesMediaPlaylistAndItemId(_ message: EngineMessage, isRecentActions: Bool, isGlobalSearch: Bool, isDownloadList: Bool, isSavedMusic: Bool, isAttachMusic: Bool) -> (SharedMediaPlaylistId, SharedMediaPlaylistItemId)? {
|
||||
if isSavedMusic {
|
||||
return (PeerMessagesMediaPlaylistId.savedMusic(message.id.peerId), PeerMessagesMediaPlaylistItemId(messageId: message.id, messageIndex: message.index))
|
||||
} else if isGlobalSearch && !isDownloadList {
|
||||
} else if isAttachMusic || (isGlobalSearch && !isDownloadList) {
|
||||
return (PeerMessagesMediaPlaylistId.custom, PeerMessagesMediaPlaylistItemId(messageId: message.id, messageIndex: message.index))
|
||||
} else if isRecentActions && !isDownloadList {
|
||||
return (PeerMessagesMediaPlaylistId.recentActions(message.id.peerId), PeerMessagesMediaPlaylistItemId(messageId: message.id, messageIndex: message.index))
|
||||
|
|
|
|||
|
|
@ -5,12 +5,12 @@ import SwiftSignalKit
|
|||
import UniversalMediaPlayer
|
||||
import AccountContext
|
||||
|
||||
private func internalMessageFileMediaPlaybackStatus(context: AccountContext, file: TelegramMediaFile, message: EngineMessage, isRecentActions: Bool, isGlobalSearch: Bool, isDownloadList: Bool, isSavedMusic: Bool) -> Signal<MediaPlayerStatus?, NoError> {
|
||||
private func internalMessageFileMediaPlaybackStatus(context: AccountContext, file: TelegramMediaFile, message: EngineMessage, isRecentActions: Bool, isGlobalSearch: Bool, isDownloadList: Bool, isSavedMusic: Bool, isAttachMusic: Bool) -> Signal<MediaPlayerStatus?, NoError> {
|
||||
guard let playerType = peerMessageMediaPlayerType(message) else {
|
||||
return .single(nil)
|
||||
}
|
||||
|
||||
if let (playlistId, itemId) = peerMessagesMediaPlaylistAndItemId(message, isRecentActions: isRecentActions, isGlobalSearch: isGlobalSearch, isDownloadList: isDownloadList, isSavedMusic: isSavedMusic) {
|
||||
if let (playlistId, itemId) = peerMessagesMediaPlaylistAndItemId(message, isRecentActions: isRecentActions, isGlobalSearch: isGlobalSearch, isDownloadList: isDownloadList, isSavedMusic: isSavedMusic, isAttachMusic: isAttachMusic) {
|
||||
return context.sharedContext.mediaManager.filteredPlaylistState(accountId: context.account.id, playlistId: playlistId, itemId: itemId, type: playerType)
|
||||
|> mapToSignal { state -> Signal<MediaPlayerStatus?, NoError> in
|
||||
return .single(state?.status)
|
||||
|
|
@ -26,7 +26,7 @@ public func messageFileMediaPlaybackStatus(context: AccountContext, file: Telegr
|
|||
duration = Double(value)
|
||||
}
|
||||
let defaultStatus = MediaPlayerStatus(generationTimestamp: 0.0, duration: duration, dimensions: CGSize(), timestamp: 0.0, baseRate: 1.0, seekId: 0, status: .paused, soundEnabled: true)
|
||||
return internalMessageFileMediaPlaybackStatus(context: context, file: file, message: message, isRecentActions: isRecentActions, isGlobalSearch: isGlobalSearch, isDownloadList: isDownloadList, isSavedMusic: isSavedMusic)
|
||||
return internalMessageFileMediaPlaybackStatus(context: context, file: file, message: message, isRecentActions: isRecentActions, isGlobalSearch: isGlobalSearch, isDownloadList: isDownloadList, isSavedMusic: isSavedMusic, isAttachMusic: false)
|
||||
|> map { status in
|
||||
return status ?? defaultStatus
|
||||
}
|
||||
|
|
@ -37,15 +37,25 @@ public func messageFileMediaPlaybackAudioLevelEvents(context: AccountContext, fi
|
|||
return .never()
|
||||
}
|
||||
|
||||
if let (playlistId, itemId) = peerMessagesMediaPlaylistAndItemId(message, isRecentActions: isRecentActions, isGlobalSearch: isGlobalSearch, isDownloadList: isDownloadList, isSavedMusic: isSavedMusic) {
|
||||
if let (playlistId, itemId) = peerMessagesMediaPlaylistAndItemId(message, isRecentActions: isRecentActions, isGlobalSearch: isGlobalSearch, isDownloadList: isDownloadList, isSavedMusic: isSavedMusic, isAttachMusic: false) {
|
||||
return context.sharedContext.mediaManager.filteredPlayerAudioLevelEvents(accountId: context.account.id, playlistId: playlistId, itemId: itemId, type: playerType)
|
||||
} else {
|
||||
return .never()
|
||||
}
|
||||
}
|
||||
|
||||
public func messageFileMediaResourceStatus(context: AccountContext, file: TelegramMediaFile, message: EngineMessage, isRecentActions: Bool, isSharedMedia: Bool = false, isGlobalSearch: Bool = false, isDownloadList: Bool = false, isSavedMusic: Bool = false) -> Signal<FileMediaResourceStatus, NoError> {
|
||||
let playbackStatus = internalMessageFileMediaPlaybackStatus(context: context, file: file, message: message, isRecentActions: isRecentActions, isGlobalSearch: isGlobalSearch, isDownloadList: isDownloadList, isSavedMusic: isSavedMusic) |> map { status -> MediaPlayerPlaybackStatus? in
|
||||
public func messageFileMediaResourceStatus(
|
||||
context: AccountContext,
|
||||
file: TelegramMediaFile,
|
||||
message: EngineMessage,
|
||||
isRecentActions: Bool,
|
||||
isSharedMedia: Bool = false,
|
||||
isGlobalSearch: Bool = false,
|
||||
isDownloadList: Bool = false,
|
||||
isSavedMusic: Bool = false,
|
||||
isAttachMusic: Bool = false
|
||||
) -> Signal<FileMediaResourceStatus, NoError> {
|
||||
let playbackStatus = internalMessageFileMediaPlaybackStatus(context: context, file: file, message: message, isRecentActions: isRecentActions, isGlobalSearch: isGlobalSearch, isDownloadList: isDownloadList, isSavedMusic: isSavedMusic, isAttachMusic: isAttachMusic) |> map { status -> MediaPlayerPlaybackStatus? in
|
||||
return status?.status
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -367,6 +367,7 @@ public final class ListMessageFileItemNode: ListMessageNode {
|
|||
private let extensionIconText: TextNode
|
||||
public let iconImageNode: TransformImageNode
|
||||
private let iconStatusNode: SemanticStatusNode
|
||||
private let iconButtonNode: HighlightTrackingButtonNode
|
||||
|
||||
private let restrictionNode: ASDisplayNode
|
||||
|
||||
|
|
@ -480,6 +481,8 @@ public final class ListMessageFileItemNode: ListMessageNode {
|
|||
self.iconStatusNode = SemanticStatusNode(backgroundNodeColor: .clear, foregroundNodeColor: .white)
|
||||
self.iconStatusNode.isUserInteractionEnabled = false
|
||||
|
||||
self.iconButtonNode = HighlightTrackingButtonNode()
|
||||
|
||||
self.restrictionNode = ASDisplayNode()
|
||||
self.restrictionNode.isHidden = true
|
||||
|
||||
|
|
@ -499,6 +502,7 @@ public final class ListMessageFileItemNode: ListMessageNode {
|
|||
self.offsetContainerNode.addSubnode(self.extensionIconNode)
|
||||
self.offsetContainerNode.addSubnode(self.extensionIconText)
|
||||
self.offsetContainerNode.addSubnode(self.iconStatusNode)
|
||||
self.offsetContainerNode.addSubnode(self.iconButtonNode)
|
||||
|
||||
self.addSubnode(self.restrictionNode)
|
||||
self.addSubnode(self.separatorNode)
|
||||
|
|
@ -535,6 +539,8 @@ public final class ListMessageFileItemNode: ListMessageNode {
|
|||
})
|
||||
transition.updateAlpha(node: strongSelf.dateNode, alpha: isExtracted ? 0.0 : 1.0)
|
||||
}
|
||||
|
||||
self.iconButtonNode.addTarget(self, action: #selector(self.iconButtonPressed), forControlEvents: .touchUpInside)
|
||||
}
|
||||
|
||||
deinit {
|
||||
|
|
@ -550,6 +556,13 @@ public final class ListMessageFileItemNode: ListMessageNode {
|
|||
self.item = item
|
||||
}
|
||||
|
||||
@objc private func iconButtonPressed() {
|
||||
guard let item = self.item, let message = item.message else {
|
||||
return
|
||||
}
|
||||
item.interaction.toggleMediaPlayback?(message)
|
||||
}
|
||||
|
||||
override public func layoutForParams(_ params: ListViewItemLayoutParams, item: ListViewItem, previousItem: ListViewItem?, nextItem: ListViewItem?) {
|
||||
if let item = item as? ListMessageItem {
|
||||
let doLayout = self.asyncLayout()
|
||||
|
|
@ -920,7 +933,7 @@ public final class ListMessageFileItemNode: ListMessageNode {
|
|||
|
||||
if statusUpdated && item.displayFileInfo {
|
||||
if let file = selectedMedia as? TelegramMediaFile {
|
||||
updatedStatusSignal = messageFileMediaResourceStatus(context: item.context, file: file, message: EngineMessage(message), isRecentActions: false, isSharedMedia: true, isGlobalSearch: item.isGlobalSearchResult, isDownloadList: item.isDownloadList, isSavedMusic: item.isSavedMusic)
|
||||
updatedStatusSignal = messageFileMediaResourceStatus(context: item.context, file: file, message: EngineMessage(message), isRecentActions: false, isSharedMedia: true, isGlobalSearch: item.isGlobalSearchResult, isDownloadList: item.isDownloadList, isSavedMusic: item.isSavedMusic, isAttachMusic: item.isAttachMusic)
|
||||
|> mapToSignal { value -> Signal<FileMediaResourceStatus, NoError> in
|
||||
if case .Fetching = value.fetchStatus, !item.isDownloadList {
|
||||
return .single(value) |> delay(0.1, queue: Queue.concurrentDefaultQueue())
|
||||
|
|
@ -1265,6 +1278,9 @@ public final class ListMessageFileItemNode: ListMessageNode {
|
|||
|
||||
transition.updateFrame(node: strongSelf.iconStatusNode, frame: iconFrame)
|
||||
|
||||
strongSelf.iconButtonNode.isHidden = item.interaction.toggleMediaPlayback == nil
|
||||
strongSelf.iconButtonNode.frame = iconFrame.insetBy(dx: -8.0, dy: -8.0)
|
||||
|
||||
let _ = extensionTextApply()
|
||||
|
||||
strongSelf.currentIconImage = iconImage
|
||||
|
|
@ -1331,7 +1347,7 @@ public final class ListMessageFileItemNode: ListMessageNode {
|
|||
}
|
||||
}))*/
|
||||
}
|
||||
|
||||
|
||||
strongSelf.updateStatus(transition: transition)
|
||||
|
||||
if item.message == nil {
|
||||
|
|
@ -1505,7 +1521,7 @@ public final class ListMessageFileItemNode: ListMessageNode {
|
|||
var descriptionOffset: CGFloat = 0.0
|
||||
|
||||
var downloadingString: String?
|
||||
if let resourceStatus = self.resourceStatus {
|
||||
if let resourceStatus = self.resourceStatus, !item.isAttachMusic {
|
||||
var maybeFetchStatus: MediaResourceStatus = .Local
|
||||
switch resourceStatus {
|
||||
case .playbackStatus:
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ public final class ListMessageItemInteraction {
|
|||
public let openMessage: (Message, ChatControllerInteractionOpenMessageMode) -> Bool
|
||||
public let openMessageContextMenu: (Message, Bool, ASDisplayNode, CGRect, UIGestureRecognizer?) -> Void
|
||||
public let toggleMessagesSelection: ([MessageId], Bool) -> Void
|
||||
public let toggleMediaPlayback: ((MessageId) -> Void)?
|
||||
public let toggleMediaPlayback: ((Message) -> Void)?
|
||||
let openUrl: (String, Bool, Bool?, Message?) -> Void
|
||||
let openInstantPage: (Message, ChatMessageItemAssociatedData?) -> Void
|
||||
let longTap: (ChatControllerInteractionLongTapAction, Message?) -> Void
|
||||
|
|
@ -26,7 +26,7 @@ public final class ListMessageItemInteraction {
|
|||
public init(
|
||||
openMessage: @escaping (Message, ChatControllerInteractionOpenMessageMode) -> Bool,
|
||||
openMessageContextMenu: @escaping (Message, Bool, ASDisplayNode, CGRect, UIGestureRecognizer?) -> Void,
|
||||
toggleMediaPlayback: ((MessageId) -> Void)?,
|
||||
toggleMediaPlayback: ((Message) -> Void)?,
|
||||
toggleMessagesSelection: @escaping ([MessageId], Bool) -> Void,
|
||||
openUrl: @escaping (String, Bool, Bool?, Message?) -> Void,
|
||||
openInstantPage: @escaping (Message, ChatMessageItemAssociatedData?) -> Void,
|
||||
|
|
@ -70,6 +70,7 @@ public final class ListMessageItem: ListViewItem, ItemListItem {
|
|||
let isDownloadList: Bool
|
||||
let isSavedMusic: Bool
|
||||
let isStoryMusic: Bool
|
||||
let isAttachMusic: Bool
|
||||
let displayFileInfo: Bool
|
||||
let displayBackground: Bool
|
||||
let canReorder: Bool
|
||||
|
|
@ -81,7 +82,29 @@ public final class ListMessageItem: ListViewItem, ItemListItem {
|
|||
|
||||
public let selectable: Bool = true
|
||||
|
||||
public init(presentationData: ChatPresentationData, systemStyle: ItemListSystemStyle = .legacy, context: AccountContext, chatLocation: ChatLocation, interaction: ListMessageItemInteraction, message: Message?, translateToLanguage: String? = nil, selection: ChatHistoryMessageSelection, displayHeader: Bool, customHeader: ListViewItemHeader? = nil, hintIsLink: Bool = false, isGlobalSearchResult: Bool = false, isDownloadList: Bool = false, isSavedMusic: Bool = false, isStoryMusic: Bool = false, displayFileInfo: Bool = true, displayBackground: Bool = false, canReorder: Bool = false, style: ItemListStyle = .plain, sectionId: ItemListSectionId = 0) {
|
||||
public init(
|
||||
presentationData: ChatPresentationData,
|
||||
systemStyle: ItemListSystemStyle = .legacy,
|
||||
context: AccountContext,
|
||||
chatLocation: ChatLocation,
|
||||
interaction: ListMessageItemInteraction,
|
||||
message: Message?,
|
||||
translateToLanguage: String? = nil,
|
||||
selection: ChatHistoryMessageSelection,
|
||||
displayHeader: Bool,
|
||||
customHeader: ListViewItemHeader? = nil,
|
||||
hintIsLink: Bool = false,
|
||||
isGlobalSearchResult: Bool = false,
|
||||
isDownloadList: Bool = false,
|
||||
isSavedMusic: Bool = false,
|
||||
isStoryMusic: Bool = false,
|
||||
isAttachMusic: Bool = false,
|
||||
displayFileInfo: Bool = true,
|
||||
displayBackground: Bool = false,
|
||||
canReorder: Bool = false,
|
||||
style: ItemListStyle = .plain,
|
||||
sectionId: ItemListSectionId = 0
|
||||
) {
|
||||
self.presentationData = presentationData
|
||||
self.systemStyle = systemStyle
|
||||
self.context = context
|
||||
|
|
@ -102,6 +125,7 @@ public final class ListMessageItem: ListViewItem, ItemListItem {
|
|||
self.isDownloadList = isDownloadList
|
||||
self.isSavedMusic = isSavedMusic
|
||||
self.isStoryMusic = isStoryMusic
|
||||
self.isAttachMusic = isAttachMusic
|
||||
self.displayFileInfo = displayFileInfo
|
||||
self.displayBackground = displayBackground
|
||||
self.canReorder = canReorder
|
||||
|
|
@ -224,7 +248,7 @@ public final class ListMessageItem: ListViewItem, ItemListItem {
|
|||
if case let .selectable(selected) = self.selection {
|
||||
self.interaction.toggleMessagesSelection([message.id], !selected)
|
||||
} else {
|
||||
if !self.displayFileInfo {
|
||||
if !self.displayFileInfo || self.isAttachMusic {
|
||||
let _ = self.interaction.openMessage(message, .default)
|
||||
} else {
|
||||
listView.forEachItemNode { itemNode in
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ swift_library(
|
|||
"//submodules/TelegramUI/Components/GlassBackgroundComponent",
|
||||
"//submodules/TelegramUI/Components/SearchInputPanelComponent",
|
||||
"//submodules/TelegramUI/Components/EdgeEffect",
|
||||
"//submodules/TelegramUI/Components/MediaManager/PeerMessagesMediaPlaylist",
|
||||
],
|
||||
visibility = [
|
||||
"//visibility:public",
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ import GlassBarButtonComponent
|
|||
import BundleIconComponent
|
||||
import EdgeEffect
|
||||
import SaveToCameraRoll
|
||||
import PeerMessagesMediaPlaylist
|
||||
|
||||
private final class AttachmentFileControllerArguments {
|
||||
let context: AccountContext
|
||||
|
|
@ -29,8 +30,9 @@ private final class AttachmentFileControllerArguments {
|
|||
let expandSavedMusic: () -> Void
|
||||
let expandRecentMusic: () -> Void
|
||||
let send: (Message) -> Void
|
||||
let toggleMediaPlayback: (Message) -> Void
|
||||
|
||||
init(context: AccountContext, isAudio: Bool, openGallery: @escaping () -> Void, openFiles: @escaping () -> Void, scanDocument: @escaping () -> Void, expandSavedMusic: @escaping () -> Void, expandRecentMusic: @escaping () -> Void, send: @escaping (Message) -> Void) {
|
||||
init(context: AccountContext, isAudio: Bool, openGallery: @escaping () -> Void, openFiles: @escaping () -> Void, scanDocument: @escaping () -> Void, expandSavedMusic: @escaping () -> Void, expandRecentMusic: @escaping () -> Void, send: @escaping (Message) -> Void, toggleMediaPlayback: @escaping (Message) -> Void) {
|
||||
self.context = context
|
||||
self.isAudio = isAudio
|
||||
self.openGallery = openGallery
|
||||
|
|
@ -39,6 +41,7 @@ private final class AttachmentFileControllerArguments {
|
|||
self.expandSavedMusic = expandSavedMusic
|
||||
self.expandRecentMusic = expandRecentMusic
|
||||
self.send = send
|
||||
self.toggleMediaPlayback = toggleMediaPlayback
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -223,11 +226,13 @@ private enum AttachmentFileEntry: ItemListNodeEntry {
|
|||
let interaction = ListMessageItemInteraction(openMessage: { message, _ in
|
||||
arguments.send(message)
|
||||
return false
|
||||
}, openMessageContextMenu: { _, _, _, _, _ in }, toggleMediaPlayback: { _ in }, toggleMessagesSelection: { _, _ in }, openUrl: { _, _, _, _ in }, openInstantPage: { _, _ in }, longTap: { _, _ in }, getHiddenMedia: { return [:] })
|
||||
}, openMessageContextMenu: { _, _, _, _, _ in }, toggleMediaPlayback: { message in
|
||||
arguments.toggleMediaPlayback(message)
|
||||
}, toggleMessagesSelection: { _, _ in }, openUrl: { _, _, _, _ in }, openInstantPage: { _, _ in }, longTap: { _, _ in }, getHiddenMedia: { return [:] })
|
||||
|
||||
let dateTimeFormat = arguments.context.sharedContext.currentPresentationData.with({$0}).dateTimeFormat
|
||||
let chatPresentationData = ChatPresentationData(theme: ChatPresentationThemeData(theme: presentationData.theme, wallpaper: .color(0)), fontSize: presentationData.fontSize, strings: presentationData.strings, dateTimeFormat: dateTimeFormat, nameDisplayOrder: .firstLast, disableAnimations: false, largeEmoji: false, chatBubbleCorners: PresentationChatBubbleCorners(mainRadius: 0, auxiliaryRadius: 0, mergeBubbleCorners: false))
|
||||
return ListMessageItem(presentationData: chatPresentationData, systemStyle: .glass, context: arguments.context, chatLocation: .peer(id: arguments.context.account.peerId), interaction: interaction, message: message, selection: .none, displayHeader: false, isDownloadList: arguments.isAudio, isStoryMusic: true, displayFileInfo: true, displayBackground: true, style: .blocks, sectionId: self.section)
|
||||
return ListMessageItem(presentationData: chatPresentationData, systemStyle: .glass, context: arguments.context, chatLocation: .peer(id: arguments.context.account.peerId), interaction: interaction, message: message, selection: .none, displayHeader: false, isDownloadList: arguments.isAudio, isStoryMusic: true, isAttachMusic: true, displayFileInfo: true, displayBackground: true, style: .blocks, sectionId: self.section)
|
||||
case let .savedShowMore(theme, text):
|
||||
return ItemListPeerActionItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesItemList.downArrowImage(theme), title: text, sectionId: self.section, editing: false, action: {
|
||||
arguments.expandSavedMusic()
|
||||
|
|
@ -238,12 +243,14 @@ private enum AttachmentFileEntry: ItemListNodeEntry {
|
|||
let interaction = ListMessageItemInteraction(openMessage: { message, _ in
|
||||
arguments.send(message)
|
||||
return false
|
||||
}, openMessageContextMenu: { _, _, _, _, _ in }, toggleMediaPlayback: { _ in }, toggleMessagesSelection: { _, _ in }, openUrl: { _, _, _, _ in }, openInstantPage: { _, _ in }, longTap: { _, _ in }, getHiddenMedia: { return [:] })
|
||||
}, openMessageContextMenu: { _, _, _, _, _ in }, toggleMediaPlayback: { message in
|
||||
arguments.toggleMediaPlayback(message)
|
||||
}, toggleMessagesSelection: { _, _ in }, openUrl: { _, _, _, _ in }, openInstantPage: { _, _ in }, longTap: { _, _ in }, getHiddenMedia: { return [:] })
|
||||
|
||||
let dateTimeFormat = arguments.context.sharedContext.currentPresentationData.with({$0}).dateTimeFormat
|
||||
let chatPresentationData = ChatPresentationData(theme: ChatPresentationThemeData(theme: presentationData.theme, wallpaper: .color(0)), fontSize: presentationData.fontSize, strings: presentationData.strings, dateTimeFormat: dateTimeFormat, nameDisplayOrder: .firstLast, disableAnimations: false, largeEmoji: false, chatBubbleCorners: PresentationChatBubbleCorners(mainRadius: 0, auxiliaryRadius: 0, mergeBubbleCorners: false))
|
||||
|
||||
return ListMessageItem(presentationData: chatPresentationData, systemStyle: .glass, context: arguments.context, chatLocation: .peer(id: PeerId(0)), interaction: interaction, message: message, selection: .none, displayHeader: false, isDownloadList: arguments.isAudio, isStoryMusic: true, displayFileInfo: true, displayBackground: true, style: .blocks, sectionId: self.section)
|
||||
return ListMessageItem(presentationData: chatPresentationData, systemStyle: .glass, context: arguments.context, chatLocation: .peer(id: PeerId(0)), interaction: interaction, message: message, selection: .none, displayHeader: false, isDownloadList: arguments.isAudio, isStoryMusic: true, isAttachMusic: true, displayFileInfo: true, displayBackground: true, style: .blocks, sectionId: self.section)
|
||||
case let .recentShowMore(theme, text):
|
||||
return ItemListPeerActionItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesItemList.downArrowImage(theme), title: text, sectionId: self.section, editing: false, action: {
|
||||
arguments.expandRecentMusic()
|
||||
|
|
@ -254,12 +261,14 @@ private enum AttachmentFileEntry: ItemListNodeEntry {
|
|||
let interaction = ListMessageItemInteraction(openMessage: { message, _ in
|
||||
arguments.send(message)
|
||||
return false
|
||||
}, openMessageContextMenu: { _, _, _, _, _ in }, toggleMediaPlayback: { _ in }, toggleMessagesSelection: { _, _ in }, openUrl: { _, _, _, _ in }, openInstantPage: { _, _ in }, longTap: { _, _ in }, getHiddenMedia: { return [:] })
|
||||
}, openMessageContextMenu: { _, _, _, _, _ in }, toggleMediaPlayback: { message in
|
||||
arguments.toggleMediaPlayback(message)
|
||||
}, toggleMessagesSelection: { _, _ in }, openUrl: { _, _, _, _ in }, openInstantPage: { _, _ in }, longTap: { _, _ in }, getHiddenMedia: { return [:] })
|
||||
|
||||
let dateTimeFormat = arguments.context.sharedContext.currentPresentationData.with({$0}).dateTimeFormat
|
||||
let chatPresentationData = ChatPresentationData(theme: ChatPresentationThemeData(theme: presentationData.theme, wallpaper: .color(0)), fontSize: presentationData.fontSize, strings: presentationData.strings, dateTimeFormat: dateTimeFormat, nameDisplayOrder: .firstLast, disableAnimations: false, largeEmoji: false, chatBubbleCorners: PresentationChatBubbleCorners(mainRadius: 0, auxiliaryRadius: 0, mergeBubbleCorners: false))
|
||||
|
||||
return ListMessageItem(presentationData: chatPresentationData, systemStyle: .glass, context: arguments.context, chatLocation: .peer(id: PeerId(0)), interaction: interaction, message: message, selection: .none, displayHeader: false, isDownloadList: arguments.isAudio, isStoryMusic: true, displayFileInfo: true, displayBackground: true, style: .blocks, sectionId: self.section)
|
||||
return ListMessageItem(presentationData: chatPresentationData, systemStyle: .glass, context: arguments.context, chatLocation: .peer(id: PeerId(0)), interaction: interaction, message: message, selection: .none, displayHeader: false, isDownloadList: arguments.isAudio, isStoryMusic: true, isAttachMusic: true, displayFileInfo: true, displayBackground: true, style: .blocks, sectionId: self.section)
|
||||
case let .globalShowMore(theme, text):
|
||||
return ItemListPeerActionItem(presentationData: presentationData, systemStyle: .glass, icon: PresentationResourcesItemList.downArrowImage(theme), title: text, sectionId: self.section, editing: false, action: {
|
||||
|
||||
|
|
@ -490,6 +499,7 @@ public func makeAttachmentFileControllerImpl(
|
|||
if message.id.namespace == Namespaces.Message.Local {
|
||||
if let file = message.media.first(where: { $0 is TelegramMediaFile }) as? TelegramMediaFile {
|
||||
send(.standalone(media: file))
|
||||
dismissImpl?()
|
||||
}
|
||||
} else {
|
||||
let _ = (context.engine.messages.getMessagesLoadIfNecessary([message.id], strategy: .cloud(skipLocal: true))
|
||||
|
|
@ -509,6 +519,10 @@ public func makeAttachmentFileControllerImpl(
|
|||
dismissImpl?()
|
||||
})
|
||||
}
|
||||
},
|
||||
toggleMediaPlayback: { message in
|
||||
let playlistLocation: PeerMessagesPlaylistLocation = .custom(messages: .single(([message], 0, false)), canReorder: false, at: message.id, loadMore: nil)
|
||||
context.sharedContext.mediaManager.setPlaylist((context, PeerMessagesMediaPlaylist(context: context, location: playlistLocation, chatLocationContextHolder: nil)), type: .music, control: .playback(.togglePlayPause))
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -1241,7 +1241,7 @@ public final class ChatMessageAttachedContentNode: ASDisplayNode {
|
|||
}
|
||||
}
|
||||
|
||||
if "".isEmpty {
|
||||
if let _ = message.media.first(where: { $0 is TelegramMediaPoll }) {
|
||||
let closeButton: ComponentView<Empty>
|
||||
if let current = self.closeButton {
|
||||
closeButton = current
|
||||
|
|
|
|||
|
|
@ -403,9 +403,7 @@ extension ChatControllerImpl {
|
|||
controller.prepareForReuse()
|
||||
return true
|
||||
}
|
||||
let controller = strongSelf.context.sharedContext.makeAttachmentFileController(context: strongSelf.context, updatedPresentationData: strongSelf.updatedPresentationData, audio: true, bannedSendMedia: bannedSendFiles, presentGallery: { [weak self, weak attachmentController] in
|
||||
attachmentController?.dismiss(animated: true)
|
||||
self?.presentFileGallery()
|
||||
let controller = strongSelf.context.sharedContext.makeAttachmentFileController(context: strongSelf.context, updatedPresentationData: strongSelf.updatedPresentationData, audio: true, bannedSendMedia: bannedSendFiles, presentGallery: {
|
||||
}, presentFiles: { [weak self, weak attachmentController] in
|
||||
attachmentController?.dismiss(animated: true)
|
||||
self?.presentICloudFileGallery()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue