From a2b8366477dcefdaa452b9da803c627a99f0a048 Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 11 Dec 2024 14:30:14 +0400 Subject: [PATCH] Show forward original date in context menu. --- .../Resources/icons/menu/forwarded_status.png | Bin 0 -> 691 bytes .../icons/menu/forwarded_status@2x.png | Bin 0 -> 1427 bytes .../icons/menu/forwarded_status@3x.png | Bin 0 -> 2130 bytes Telegram/SourceFiles/api/api_who_reacted.cpp | 19 +++++++-- Telegram/SourceFiles/api/api_who_reacted.h | 3 ++ .../history/history_inner_widget.cpp | 2 +- .../view/history_view_context_menu.cpp | 37 +++++++++++------- .../history/view/history_view_context_menu.h | 2 +- Telegram/SourceFiles/ui/chat/chat.style | 2 + .../controls/who_reacted_context_action.cpp | 2 + .../ui/controls/who_reacted_context_action.h | 1 + 11 files changed, 49 insertions(+), 19 deletions(-) create mode 100644 Telegram/Resources/icons/menu/forwarded_status.png create mode 100644 Telegram/Resources/icons/menu/forwarded_status@2x.png create mode 100644 Telegram/Resources/icons/menu/forwarded_status@3x.png diff --git a/Telegram/Resources/icons/menu/forwarded_status.png b/Telegram/Resources/icons/menu/forwarded_status.png new file mode 100644 index 0000000000000000000000000000000000000000..66d08a835cea539ce4d6daf89a5e72ff3b8bfc67 GIT binary patch literal 691 zcmV;k0!;mhP)1-3e4Q#U*hJqeg?I1``R;!C?tXWd zFhm6UMPt_ma2!Y5+uJ`9fgVIrM5EDw(P-3-(}8|~*=$Cu)xz!VEleiU&jo_PAZoQ5 zo}QkT=yW=mOePo%1|TB%{eDy`6?i5O(G(C zd3hnb-A)e=4^%3Z*7j(rRxB3r`1q*G!0mQpJRT#JN~w5;VZie|hQlFBrP5|sB#I(L zQB(z#%Vi`IiRJUb!GX#j2m~;n&%yKjzX|*aj^m&x3OJ5a@#%CLA0HpESSd5Q#+S>gr1KC9znH7K;T*lC*m z*LQt=4M7m}dtfvgF`Z6vetxbBs#dFbeSOv3+}+(>OeT|+b1MQwghHW!=jUe_42C7= z^Z9Uic&OR@TrP*Vw>PbCm71_xt$2Tbhad>p+S*z>S!ZWwn9XLJE!r1OPEIfyjc{{w zqnSCwFvw&wP!t7)LP0Ny?;TF36a9W4vMfUo1Vp1zoSvQ{6bd1m&7#-qL6&7ClgV{e zYCBn$MI;iz-Q67|Ndf>Uih^#pi+nzhqobou7IgDX-r3m!%d#8C6A_p%mEW?pKmGq+ Z;1l29SP) z5?r~kKMEH?l+dDCwJIuCN$q787PAr5P;8?vlmTU|keh)H7@2>JL-(E*;mbFEb$^`E z5<2j}W$yEw=N#@k_rA|-13>IxNPk*DviN5J0Gv)Inwpy6cDqwSXBkX3+S=MklGD@E z^m@HX^I44KNy^H~xVX4Tl2jChKA&%A834elsw#f__KhStGc&`2f`Xl8001j0D!8z) zK$86Y`7?`(iniQlxOC|fdV71t z{nFA>oIigap->1@Q&VPI8^X}#$&)8JIXTJAKv9$gu91-ulBBAt3E}?>g z0m_wF5Yb8}N`z~yp@CNEyR&?VZvdpG<0`-R!- z*RLBkmt~pn-@g|o!r?Hpv$IoY;MA#8g1o-IURV6UzLL2N+3xRBuPR^Nr`T5I2^{4CrC>kT`E?D9jg27|iy;<^VSIetyy_(I z?AbG@stN$OapQ(zzOI32GzzcR3$NFUXf&D{g$9_JnL#KN0svgRcoBBHT{quw2}PsP zZ4;kdSB{j!!^7gbqM|}K_pdZCIXNk=Jsyv4uAza3h6V(KK@=7i zCa=sSVzHRG-nDC&Zm#}61i+(5kKpt9Fh4(!YuBz>7W3a%CrMK^nx;Y1G)R(UXu$9Z zEG;bo0E&x?O*LPK&1OR&5WwTdj{yMjcsyZg=;6SD1CXSj(!PB8VwkV{rCZ;leERgs z^w)Rq-o1SD=1s!<(9qCey1u5SM%32T)op$&0VEC}W(M`b!a`0=Oo$pqQF!dwF-zNz zyLa!3dJ}WCK3QdDr66l-Ytzk@Wtm^Ueiiux0|Rus-In)H;c!?ybxD$vGayM4=jP@} zl2cPtx`Z!Zz7*m+Iy#u1o^DyZEX#r;5D1v5F(z$qZx^Iju3XV=-re2J=H_P0!q+1d z3W;8a4M~nrj{N4$n}WQ%yW7m#v=ly{ zkI`t9B)PD#z`VS?)EcnaYzZe0ot>R26YueOI6XZrxUXKlYNg(Mqnw-^Mj{c>C>RWK z&z?O=iI-)WA3uH+oKK%VwaQ_wVSau-6-5yZBasMeYilhFcQ_opfB(K1AxZMpt5>wy zY+Gvp0CRJ5#WBh{`uqEN`SN9EW@Z}Jwzs#7S2Ia||Nec`r*ozccQ?Xrx8uQs2e@gsC3kdjJlnSt%XUpW(7!9N3k h8vhLZY3z6dKLEeug0;5A%7_2}002ovPDHLkV1o7Pu*CoX literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/menu/forwarded_status@3x.png b/Telegram/Resources/icons/menu/forwarded_status@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e2940b1636c72d4346ef97540db5187369b7e79c GIT binary patch literal 2130 zcmV-Y2(9;tP)rd zAtxutUnw~g`nqk}vPgc$H&CP zKz4REeE9GIMn^}zDVbUxkrj)@*woa7KY#v2E>&M&&&nl{Nbvjj?})f?nQ-IA4NOW( z3f?7_k&%HzLqnW`S=8sxpIP~oN+s(!o6Uv~9y~y~TpnD2l9G}*pEXN$_3BktPN`Ii zCX>nO@fM2(Po6x9JRUDN&OyDsy|87=7UH+QzCP&b=>enB=ysf(oE%UpmB8ci0000H z;o7xpP+eW^^mw^k4)yi*uxHO6htE=JG#XH;R4_6!LeU%diK1>~F-MV$y*Vo5_^y}9z+_-ULU;w>)_l_tgF)@)US#@e+#9UXNPFgiNwwx3)sCq{X0ZVvbF-_O+uBLLvOefw~Jex88z^y$<82cVps90HC~ zspJ&SVk<8%XDzq#^77yZ1OQl5Q-htIomf~{=h*d8Qd?V_$Mpo=rhRU1E-(xO01G$5xw*Mi z{${fo)M_;#qT{!+vNDK`jrFLWpaZlBXF1y)b$55e!-o$YwooX9BS(&SR1Xy(gTdhR z?_g9*OABFFR#pO^Pd^{1JgTayK&R7zPN##asw(Pa{#18&H+=f^$ze;SQYb7eq>e)c zNUPOCW@aX2W@ds`tEEonZ?(3z5_W!mK6Q+sI|p&87cX8A_U6r-sbl=pfcpFUVQOm1 zVP|D!Io&GxoBnA)cDtQ86+}lzLt0uIRg8Zc5CFi(j~@v;K0cnxpBfOK&xgdsM31gd z0wI&hMA!m>fXbf=P*hYD=yW>x_U#+IfBzn0Vq&P01wvMGBPp%06->_ zfkL66O6HD4A`z$Y{sbfx3aR|509h;+!cIv^p-SdTDwPTv8XAb-CMPGoiWwOhN!Uy8 z(cBRgprN55!j?*gvK(t5$gp2LN!}wrxc0M~@!)9#CavC6V;{_3PA0>+0%Qd&h_ikDVEY;RFrG1F{)iOJ9-~bEE?CdP6R4UHE002fuN8`-Qj3bBDYV~w)nm)N! zt0g*ERaND-?}ZB&2;Uz+e)!^XF&;g7l*rT3(cx(J){}!XXU~Rwa1gOzyh+0f06RusmHgJFd*sru8BHp`q z&u6d1Ics5IVc5~p!K&l*>C;@q_bvdB$75ZPEzTsdSnP8+VzJmMoLjeUag~Fc5&ZKO z1QBsyU;xw8(|rafKR+K01_LYa{rmTk&*ujZAb^E`-OldHEfxzlH#eh1BH?t_G&MD$ z&1Pfe>+J00`W(pJh=zxUV@pd5t7t^T@$qpyckUd<#l?9XKOrFjuUxr;Q&Uq;bF{X$ zqEIO0dZuz33;`BiWLkP3v{W{m4WB=Mj%u|U)6>)cdRY(_7KT|_Sy)q3gO49SCblk? zYHV!GXI~9@{jJ7wN=r+F%a<=hNlD3HkF(qD@b&9g=h1^D*uTc;!MjWik!Zr{G$r?rExme`+-$K&DF zty}Tt&6_wrKJGCTv)PR8?d@E@2OXFtww#1QAruuAK|w(QWM^lCTrOYsGpgUee?xC? zFT8s73VM2aK&#cVo~-yPx# literal 0 HcmV?d00001 diff --git a/Telegram/SourceFiles/api/api_who_reacted.cpp b/Telegram/SourceFiles/api/api_who_reacted.cpp index b0e44cfc9..a5186fc6b 100644 --- a/Telegram/SourceFiles/api/api_who_reacted.cpp +++ b/Telegram/SourceFiles/api/api_who_reacted.cpp @@ -756,19 +756,32 @@ rpl::producer WhoReacted( const style::WhoRead &st) { return WhoReacted(item, reaction, context, st, nullptr); } -rpl::producer WhenEdited( + +[[nodiscard]] rpl::producer WhenDate( not_null author, - TimeId date) { + TimeId date, + Ui::WhoReadType type) { return rpl::single(Ui::WhoReadContent{ .participants = { Ui::WhoReadParticipant{ .name = author->name(), .date = FormatReadDate(date, QDateTime::currentDateTime()), .id = author->id.value, } }, - .type = Ui::WhoReadType::Edited, + .type = type, .fullReadCount = 1, }); } +rpl::producer WhenEdited( + not_null author, + TimeId date) { + return WhenDate(author, date, Ui::WhoReadType::Edited); +} + +rpl::producer WhenOriginal( + not_null author, + TimeId date) { + return WhenDate(author, date, Ui::WhoReadType::Original); +} } // namespace Api diff --git a/Telegram/SourceFiles/api/api_who_reacted.h b/Telegram/SourceFiles/api/api_who_reacted.h index 0d1cf7234..8e1bc9a3b 100644 --- a/Telegram/SourceFiles/api/api_who_reacted.h +++ b/Telegram/SourceFiles/api/api_who_reacted.h @@ -64,5 +64,8 @@ struct WhoReadList { [[nodiscard]] rpl::producer WhenEdited( not_null author, TimeId date); +[[nodiscard]] rpl::producer WhenOriginal( + not_null author, + TimeId date); } // namespace Api diff --git a/Telegram/SourceFiles/history/history_inner_widget.cpp b/Telegram/SourceFiles/history/history_inner_widget.cpp index f239ff276..79534bbb9 100644 --- a/Telegram/SourceFiles/history/history_inner_widget.cpp +++ b/Telegram/SourceFiles/history/history_inner_widget.cpp @@ -2918,7 +2918,7 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { leaderOrSelf, _controller); } else if (leaderOrSelf) { - HistoryView::MaybeAddWhenEditedAction(_menu, leaderOrSelf); + HistoryView::MaybeAddWhenEditedForwardedAction(_menu, leaderOrSelf); } if (_menu->empty()) { diff --git a/Telegram/SourceFiles/history/view/history_view_context_menu.cpp b/Telegram/SourceFiles/history/view/history_view_context_menu.cpp index 50ffc31b3..f14dcbe7f 100644 --- a/Telegram/SourceFiles/history/view/history_view_context_menu.cpp +++ b/Telegram/SourceFiles/history/view/history_view_context_menu.cpp @@ -1286,7 +1286,7 @@ base::unique_qptr FillContextMenu( if (hasWhoReactedItem) { AddWhoReactedAction(result, list, item, list->controller()); } else if (item) { - MaybeAddWhenEditedAction(result, item); + MaybeAddWhenEditedForwardedAction(result, item); } return result; @@ -1457,20 +1457,28 @@ void AddSaveSoundForNotifications( }, &st::menuIconSoundAdd); } -void AddWhenEditedActionHelper( +void AddWhenEditedForwardedActionHelper( not_null menu, not_null item, bool insertSeparator) { - if (item->history()->peer->isUser()) { - if (const auto edited = item->Get()) { - if (!item->hideEditedBadge()) { - if (insertSeparator && !menu->empty()) { - menu->addSeparator(&st::expandedMenuSeparator); - } - menu->addAction(Ui::WhenReadContextAction( - menu.get(), - Api::WhenEdited(item->from(), edited->date))); + if (const auto edited = item->Get()) { + if (!item->hideEditedBadge()) { + if (insertSeparator && !menu->empty()) { + menu->addSeparator(&st::expandedMenuSeparator); } + menu->addAction(Ui::WhenReadContextAction( + menu.get(), + Api::WhenEdited(item->from(), edited->date))); + } + } else if (const auto forwarded = item->Get()) { + if (!forwarded->story && forwarded->psaType.isEmpty()) { + if (insertSeparator && !menu->empty()) { + menu->addSeparator(&st::expandedMenuSeparator); + } + menu->addAction(Ui::WhenReadContextAction( + menu.get(), + Api::WhenOriginal(item->from(), forwarded->originalDate))); + forwarded->originalDate; } } } @@ -1522,8 +1530,8 @@ void AddWhoReactedAction( if (!menu->empty()) { menu->addSeparator(&st::expandedMenuSeparator); } - AddWhenEditedActionHelper(menu, item, false); if (item->history()->peer->isUser()) { + AddWhenEditedForwardedActionHelper(menu, item, false); menu->addAction(Ui::WhenReadContextAction( menu.get(), Api::WhoReacted(item, context, st::defaultWhoRead, whoReadIds), @@ -1535,13 +1543,14 @@ void AddWhoReactedAction( Data::ReactedMenuFactory(&controller->session()), participantChosen, showAllChosen)); + AddWhenEditedForwardedActionHelper(menu, item, true); } } -void MaybeAddWhenEditedAction( +void MaybeAddWhenEditedForwardedAction( not_null menu, not_null item) { - AddWhenEditedActionHelper(menu, item, true); + AddWhenEditedForwardedActionHelper(menu, item, true); } void AddEditTagAction( diff --git a/Telegram/SourceFiles/history/view/history_view_context_menu.h b/Telegram/SourceFiles/history/view/history_view_context_menu.h index 1d02e64c2..1dac246bb 100644 --- a/Telegram/SourceFiles/history/view/history_view_context_menu.h +++ b/Telegram/SourceFiles/history/view/history_view_context_menu.h @@ -84,7 +84,7 @@ void AddWhoReactedAction( not_null context, not_null item, not_null controller); -void MaybeAddWhenEditedAction( +void MaybeAddWhenEditedForwardedAction( not_null menu, not_null item); void ShowWhoReactedMenu( diff --git a/Telegram/SourceFiles/ui/chat/chat.style b/Telegram/SourceFiles/ui/chat/chat.style index 50eb1074b..5ca540b99 100644 --- a/Telegram/SourceFiles/ui/chat/chat.style +++ b/Telegram/SourceFiles/ui/chat/chat.style @@ -810,6 +810,8 @@ whoReadReactionsOver: icon{{ "menu/read_reactions", windowBoldFg }}; whoReadReactionsDisabled: icon{{ "menu/read_reactions", menuFgDisabled }}; whenEdited: icon {{ "menu/edited_status", windowBoldFg }}; whenEditedOver: icon {{ "menu/edited_status", windowBoldFg }}; +whenOriginal: icon {{ "menu/forwarded_status", windowBoldFg }}; +whenOriginalOver: icon {{ "menu/forwarded_status", windowBoldFg }}; reactionsTabAll: icon {{ "menu/read_reactions", windowFg }}; reactionsTabAllSelected: icon {{ "menu/read_reactions", activeButtonFg }}; diff --git a/Telegram/SourceFiles/ui/controls/who_reacted_context_action.cpp b/Telegram/SourceFiles/ui/controls/who_reacted_context_action.cpp index 3aeb48253..9834489b1 100644 --- a/Telegram/SourceFiles/ui/controls/who_reacted_context_action.cpp +++ b/Telegram/SourceFiles/ui/controls/who_reacted_context_action.cpp @@ -602,6 +602,8 @@ void WhenAction::paint(Painter &p) { p.fillRect(0, 0, width(), _height, _st.itemBg); const auto &icon = (_content.type == WhoReadType::Edited) ? (selected ? st::whenEditedOver : st::whenEdited) + : (_content.type == WhoReadType::Original) + ? (selected ? st::whenOriginalOver : st::whenOriginal) : loading ? st::whoReadChecksDisabled : selected diff --git a/Telegram/SourceFiles/ui/controls/who_reacted_context_action.h b/Telegram/SourceFiles/ui/controls/who_reacted_context_action.h index 2aad54dd2..919bb4489 100644 --- a/Telegram/SourceFiles/ui/controls/who_reacted_context_action.h +++ b/Telegram/SourceFiles/ui/controls/who_reacted_context_action.h @@ -37,6 +37,7 @@ enum class WhoReadType { Watched, Reacted, Edited, + Original, }; enum class WhoReadState : uchar {