From f9a789a2cc4af91c991ff88c4dcaa06f57241b96 Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Wed, 5 Jul 2023 13:14:05 +0200 Subject: [PATCH] Copy Messages: Fix message sender title extraction (#3368) --- src/global/actions/ui/messages.ts | 33 ++++++++++++++++--------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/src/global/actions/ui/messages.ts b/src/global/actions/ui/messages.ts index 5c1bad8f2..9af8b63d7 100644 --- a/src/global/actions/ui/messages.ts +++ b/src/global/actions/ui/messages.ts @@ -50,7 +50,7 @@ import { getServerTime } from '../../../util/serverTime'; import versionNotification from '../../../versionNotification.txt'; import parseMessageInput from '../../../util/parseMessageInput'; -import { getMessageSummaryText, getSenderTitle } from '../../helpers'; +import { getMessageSummaryText, getSenderTitle, isChatChannel } from '../../helpers'; import * as langProvider from '../../../util/langProvider'; import { copyHtmlToClipboard } from '../../../util/clipboard'; import { renderMessageSummaryHtml } from '../../helpers/renderMessageSummaryHtml'; @@ -814,31 +814,32 @@ function copyTextForMessages(global: GlobalState, chatId: string, messageIds: nu const { type: messageListType, threadId } = selectCurrentMessageList(global) || {}; const lang = langProvider.translate; + const chat = selectChat(global, chatId); + const chatMessages = messageListType === 'scheduled' ? selectChatScheduledMessages(global, chatId) : selectChatMessages(global, chatId); - if (!chatMessages || !threadId) return; + + if (!chat || !chatMessages || !threadId) return; + const messages = messageIds .map((id) => chatMessages[id]) .filter((message) => selectAllowedMessageActions(global, message, threadId).canCopy) .sort((message1, message2) => message1.id - message2.id); - const result = messages.reduce((acc, message) => { - const sender = selectSender(global, message); + const resultHtml: string[] = []; + const resultText: string[] = []; - acc.push(`> ${sender ? getSenderTitle(lang, sender) : ''}:`); - acc.push(`${renderMessageSummaryHtml(lang, message)}\n`); + messages.forEach((message) => { + const sender = isChatChannel(chat) ? chat : selectSender(global, message); + const senderTitle = `> ${sender ? getSenderTitle(lang, sender) : message.forwardInfo?.hiddenUserName || ''}:`; - return acc; - }, [] as string[]); + resultHtml.push(senderTitle); + resultHtml.push(`${renderMessageSummaryHtml(lang, message)}\n`); - const resultText = messages.reduce((acc, message) => { - const sender = selectSender(global, message); - acc.push(`> ${sender ? getSenderTitle(lang, sender) : ''}:`); - acc.push(`${getMessageSummaryText(lang, message, false, 0, true)}\n`); + resultText.push(senderTitle); + resultText.push(`${getMessageSummaryText(lang, message, false, 0, true)}\n`); + }); - return acc; - }, [] as string[]); - - copyHtmlToClipboard(result.join('\n'), resultText.join('\n')); + copyHtmlToClipboard(resultHtml.join('\n'), resultText.join('\n')); }