From 19afdd31795267e22f78aeb96b79664411a185d5 Mon Sep 17 00:00:00 2001 From: Eduard Kuzmenko Date: Wed, 3 Feb 2021 05:50:58 +0200 Subject: [PATCH] Support following messages by 'Forwarded from' --- src/components/chat/bubbles.ts | 19 ++++++++++++++++--- src/components/chat/messageRender.ts | 2 +- src/lib/appManagers/appMessagesManager.ts | 17 ++++++++++------- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/components/chat/bubbles.ts b/src/components/chat/bubbles.ts index cb8d3dd5..1bfc2988 100644 --- a/src/components/chat/bubbles.ts +++ b/src/components/chat/bubbles.ts @@ -817,8 +817,17 @@ export default class ChatBubbles { } else if(target.classList.contains('name')) { const peerId = +target.dataset.peerId; - if(peerId) { - this.chat.appImManager.setInnerPeer(peerId); + const savedFrom = target.dataset.savedFrom; + if(savedFrom) { + const splitted = savedFrom.split('_'); + const peerId = +splitted[0]; + const msgId = +splitted[1]; + + this.chat.appImManager.setInnerPeer(peerId, msgId); + } else { + if(peerId) { + this.chat.appImManager.setInnerPeer(peerId); + } } return; @@ -2357,6 +2366,10 @@ export default class ChatBubbles { /* const fromTitle = message.fromId == this.myID || appPeersManager.isBroadcast(message.fwdFromId || message.fromId) ? '' : `
${appPeersManager.getPeerTitle(message.fromId)}
`; nameDiv.innerHTML = fromTitle + 'Forwarded from ' + title; */ nameDiv.innerHTML = 'Forwarded from ' + title; + + if(savedFrom) { + nameDiv.dataset.savedFrom = savedFrom; + } } nameContainer.append(nameDiv); @@ -2418,7 +2431,7 @@ export default class ChatBubbles { bubble.classList.add('is-thread-starter', 'is-group-last'); } - if(savedFrom && this.peerId !== REPLIES_PEER_ID) { + if(savedFrom && this.peerId === rootScope.myId && this.peerId !== REPLIES_PEER_ID) { const goto = document.createElement('div'); goto.classList.add('bubble-beside-button', 'goto-original', 'tgico-arrow_next'); bubbleContainer.append(goto); diff --git a/src/components/chat/messageRender.ts b/src/components/chat/messageRender.ts index ce31381a..af93e24b 100644 --- a/src/components/chat/messageRender.ts +++ b/src/components/chat/messageRender.ts @@ -20,7 +20,7 @@ export namespace MessageRender { bubble.classList.add('channel-post'); time = formatNumber(message.views, 1) + ' ' + (postAuthor ? RichTextProcessor.wrapEmojiText(postAuthor) + ', ' : '') + time; - if(!message.savedFrom) { + if(chat.peerId !== chat.appImManager.myId) { const forward = document.createElement('div'); forward.classList.add('bubble-beside-button', 'forward'); forward.innerHTML = ` diff --git a/src/lib/appManagers/appMessagesManager.ts b/src/lib/appManagers/appMessagesManager.ts index 56ba41de..ab7d3051 100644 --- a/src/lib/appManagers/appMessagesManager.ts +++ b/src/lib/appManagers/appMessagesManager.ts @@ -6,7 +6,7 @@ import { createPosterForVideo } from "../../helpers/files"; import { copy, defineNotNumerableProperties, getObjectKeysAndSort } from "../../helpers/object"; import { randomLong } from "../../helpers/random"; import { splitStringByLength, limitSymbols } from "../../helpers/string"; -import { Dialog as MTDialog, DialogPeer, DocumentAttribute, InputMedia, InputMessage, InputNotifyPeer, InputPeerNotifySettings, InputSingleMedia, Message, MessageAction, MessageEntity, MessageMedia, MessageReplies, MessageReplyHeader, MessagesDialogs, MessagesFilter, MessagesMessages, MessagesPeerDialogs, MethodDeclMap, NotifyPeer, PhotoSize, SendMessageAction, Update } from "../../layer"; +import { Dialog as MTDialog, DialogPeer, DocumentAttribute, InputMedia, InputMessage, InputNotifyPeer, InputPeerNotifySettings, InputSingleMedia, Message, MessageAction, MessageEntity, MessageFwdHeader, MessageMedia, MessageReplies, MessageReplyHeader, MessagesDialogs, MessagesFilter, MessagesMessages, MessagesPeerDialogs, MethodDeclMap, NotifyPeer, PhotoSize, SendMessageAction, Update } from "../../layer"; import { InvokeApiOptions } from "../../types"; import { langPack } from "../langPack"; import { logger, LogLevels } from "../logger"; @@ -19,7 +19,6 @@ import serverTimeManager from "../mtproto/serverTimeManager"; import { RichTextProcessor } from "../richtextprocessor"; import rootScope from "../rootScope"; import searchIndexManager from '../searchIndexManager'; -import sessionStorage from '../sessionStorage'; import DialogsStorage from "../storages/dialogs"; import FiltersStorage from "../storages/filters"; //import { telegramMeWebService } from "../mtproto/mtproto"; @@ -2140,13 +2139,17 @@ export class AppMessagesManager { message.fromId = message.pFlags.post || !message.from_id ? peerId : appPeersManager.getPeerId(message.from_id); } - const fwdHeader = message.fwd_from; + const fwdHeader = message.fwd_from as MessageFwdHeader; if(fwdHeader) { //if(peerId == myID) { - if(fwdHeader.saved_from_peer && fwdHeader.saved_from_msg_id) { - const savedFromPeerId = appPeersManager.getPeerId(fwdHeader.saved_from_peer); - //const savedFromMid = fwdHeader.saved_from_msg_id; - const savedFromMid = fwdHeader.saved_from_msg_id = this.generateMessageId(fwdHeader.saved_from_msg_id); + if(fwdHeader.saved_from_msg_id) fwdHeader.saved_from_msg_id = this.generateMessageId(fwdHeader.saved_from_msg_id); + if(fwdHeader.channel_post) fwdHeader.channel_post = this.generateMessageId(fwdHeader.channel_post); + + const peer = fwdHeader.saved_from_peer || fwdHeader.from_id; + const msgId = fwdHeader.saved_from_msg_id || fwdHeader.channel_post; + if(peer && msgId) { + const savedFromPeerId = appPeersManager.getPeerId(peer); + const savedFromMid = this.generateMessageId(msgId); message.savedFrom = savedFromPeerId + '_' + savedFromMid; }