diff --git a/Telegram/SourceFiles/ayu/ui/context_menu/context_menu.cpp b/Telegram/SourceFiles/ayu/ui/context_menu/context_menu.cpp index 5721147df..cc35ed0c2 100644 --- a/Telegram/SourceFiles/ayu/ui/context_menu/context_menu.cpp +++ b/Telegram/SourceFiles/ayu/ui/context_menu/context_menu.cpp @@ -34,6 +34,7 @@ #include "data/data_session.h" #include "history/view/history_view_context_menu.h" #include "history/view/history_view_element.h" +#include "window/window_controller.h" #include "window/window_session_controller.h" namespace AyuUi { @@ -58,13 +59,14 @@ void AddDeletedMessagesActions(PeerData *peerData, return; } - addCallback(tr::ayu_ViewDeletedMenuText(tr::now), - [=] - { - sessionController->session().tryResolveWindow() - ->showSection(std::make_shared(peerData, nullptr, topicId)); - }, - &st::menuIconArchive); + addCallback( + tr::ayu_ViewDeletedMenuText(tr::now), + [=] + { + sessionController->session().tryResolveWindow() + ->showSection(std::make_shared(peerData, nullptr, topicId)); + }, + &st::menuIconArchive); } void AddJumpToBeginningAction(PeerData *peerData, @@ -149,14 +151,15 @@ void AddJumpToBeginningAction(PeerData *peerData, void AddHistoryAction(not_null menu, HistoryItem *item) { if (AyuMessages::hasRevisions(item)) { - menu->addAction(tr::ayu_EditsHistoryMenuText(tr::now), - [=] - { - item->history()->session().tryResolveWindow() - ->showSection( - std::make_shared(item->history()->peer, item, 0)); - }, - &st::ayuEditsHistoryIcon); + menu->addAction( + tr::ayu_EditsHistoryMenuText(tr::now), + [=] + { + item->history()->session().tryResolveWindow() + ->showSection( + std::make_shared(item->history()->peer, item, 0)); + }, + &st::ayuEditsHistoryIcon); } } @@ -171,15 +174,16 @@ void AddHideMessageAction(not_null menu, HistoryItem *item) { } const auto history = item->history(); - menu->addAction(tr::ayu_ContextHideMessage(tr::now), - [=]() - { - item->destroy(); - history->requestChatListMessage(); + menu->addAction( + tr::ayu_ContextHideMessage(tr::now), + [=]() + { + item->destroy(); + history->requestChatListMessage(); - AyuState::hide(item); - }, - &st::menuIconClear); + AyuState::hide(item); + }, + &st::menuIconClear); } void AddUserMessagesAction(not_null menu, HistoryItem *item) { @@ -432,31 +436,77 @@ void AddReadUntilAction(not_null menu, HistoryItem *item) { return; } - menu->addAction(tr::ayu_ReadUntilMenuText(tr::now), - [=]() + menu->addAction( + tr::ayu_ReadUntilMenuText(tr::now), + [=]() + { + readHistory(item); + if (item->media() && item->media()->ttlSeconds() <= 0 && item->unsupportedTTL() <= 0 && !item->out() && item + ->isUnreadMedia()) { + const auto ids = MTP_vector(1, MTP_int(item->id)); + if (const auto channel = item->history()->peer->asChannel()) { + item->history()->session().api().request(MTPchannels_ReadMessageContents( + channel->inputChannel, + ids + )).send(); + } else { + item->history()->session().api().request(MTPmessages_ReadMessageContents( + ids + )).done([=](const MTPmessages_AffectedMessages &result) { - readHistory(item); - if (item->media() && !item->media()->ttlSeconds()) { - const auto ids = MTP_vector(1, MTP_int(item->id)); - if (const auto channel = item->history()->peer->asChannel()) { - item->history()->session().api().request(MTPchannels_ReadMessageContents( - channel->inputChannel, - ids - )).send(); - } else { - item->history()->session().api().request(MTPmessages_ReadMessageContents( - ids - )).done([=](const MTPmessages_AffectedMessages &result) - { - item->history()->session().api().applyAffectedMessages( - item->history()->peer, - result); - }).send(); - } - item->markContentsRead(); - } - }, - &st::menuIconShowInChat); + item->history()->session().api().applyAffectedMessages( + item->history()->peer, + result); + }).send(); + } + item->markContentsRead(); + } + }, + &st::menuIconShowInChat); +} + +void AddBurnAction(not_null menu, HistoryItem *item) { + if (!item->media() || item->media()->ttlSeconds() <= 0 && item->unsupportedTTL() <= 0 || item->out() || + !item->isUnreadMedia()) { + return; + } + + menu->addAction( + tr::ayu_ExpireMediaContextMenuText(tr::now), + [=]() + { + const auto ids = MTP_vector(1, MTP_int(item->id)); + const auto callback = [=]() + { + if (const auto window = Core::App().activeWindow()) { + if (const auto controller = window->sessionController()) { + controller->showToast(tr::lng_box_ok(tr::now)); + } + } + }; + + if (const auto channel = item->history()->peer->asChannel()) { + item->history()->session().api().request(MTPchannels_ReadMessageContents( + channel->inputChannel, + ids + )).done([=]() + { + callback(); + }).send(); + } else { + item->history()->session().api().request(MTPmessages_ReadMessageContents( + ids + )).done([=](const MTPmessages_AffectedMessages &result) + { + item->history()->session().api().applyAffectedMessages( + item->history()->peer, + result); + callback(); + }).send(); + } + item->markContentsRead(); + }, + &st::menuIconTTLAny); } } // namespace AyuUi diff --git a/Telegram/SourceFiles/ayu/ui/context_menu/context_menu.h b/Telegram/SourceFiles/ayu/ui/context_menu/context_menu.h index b286509b4..bde7c6ae5 100644 --- a/Telegram/SourceFiles/ayu/ui/context_menu/context_menu.h +++ b/Telegram/SourceFiles/ayu/ui/context_menu/context_menu.h @@ -30,5 +30,6 @@ void AddHideMessageAction(not_null menu, HistoryItem *item); void AddUserMessagesAction(not_null menu, HistoryItem *item); void AddMessageDetailsAction(not_null menu, HistoryItem *item); void AddReadUntilAction(not_null menu, HistoryItem *item); +void AddBurnAction(not_null menu, HistoryItem *item); } diff --git a/Telegram/SourceFiles/history/history_inner_widget.cpp b/Telegram/SourceFiles/history/history_inner_widget.cpp index 06d2a7ce1..0fd437712 100644 --- a/Telegram/SourceFiles/history/history_inner_widget.cpp +++ b/Telegram/SourceFiles/history/history_inner_widget.cpp @@ -2608,6 +2608,7 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { } AyuUi::AddReadUntilAction(_menu, item); + AyuUi::AddBurnAction(_menu, item); }; const auto addReplyAction = [&](HistoryItem *item) { diff --git a/Telegram/SourceFiles/history/history_item.cpp b/Telegram/SourceFiles/history/history_item.cpp index d0253457d..ee3faa576 100644 --- a/Telegram/SourceFiles/history/history_item.cpp +++ b/Telegram/SourceFiles/history/history_item.cpp @@ -276,7 +276,7 @@ std::unique_ptr HistoryItem::CreateMedia( }); }, [&](const MTPDmessageMediaPhoto &media) -> Result { const auto photo = media.vphoto(); - if (media.vttl_seconds() && false) { // AyuGram: show expiring messages + if (false) { // AyuGram: show expiring messages LOG(("App Error: " "Unexpected MTPMessageMediaPhoto " "with ttl_seconds in CreateMedia.")); @@ -438,6 +438,7 @@ HistoryItem::HistoryItem( createServiceFromMtp(data); applyTTL(data); } else { + auto skipSetText = false; createComponents(data); if (media) { setMedia(*media); @@ -445,13 +446,25 @@ HistoryItem::HistoryItem( media->match( [&](const MTPDmessageMediaPhoto &media) { - auto time = media.vttl_seconds()->v; + if (!data.is_media_unread()) { + createServiceFromMtp(data); + skipSetText = true; + } + + const auto time = media.vttl_seconds()->v; setAyuHint(formatTTL(time)); + _unsupportedTTL = time; }, [&](const MTPDmessageMediaDocument &media) { - auto time = media.vttl_seconds()->v; + if (!data.is_media_unread()) { + createServiceFromMtp(data); + skipSetText = true; + } + + const auto time = media.vttl_seconds()->v; setAyuHint(formatTTL(time)); + _unsupportedTTL = time; }, [&](const MTPDmessageMediaWebPage &media) { @@ -482,7 +495,9 @@ HistoryItem::HistoryItem( &history->session(), data.ventities().value_or_empty()) }; - setText(_media ? textWithEntities : EnsureNonEmpty(textWithEntities)); + if (!skipSetText) { + setText(_media ? textWithEntities : EnsureNonEmpty(textWithEntities)); + } if (const auto groupedId = data.vgrouped_id()) { setGroupId( MessageGroupId::FromRaw( diff --git a/Telegram/SourceFiles/history/history_item.h b/Telegram/SourceFiles/history/history_item.h index b1513ba68..9ac0e57bb 100644 --- a/Telegram/SourceFiles/history/history_item.h +++ b/Telegram/SourceFiles/history/history_item.h @@ -566,6 +566,10 @@ public: [[nodiscard]] bool canUpdateDate() const; void customEmojiRepaint(); + [[nodiscard]] int unsupportedTTL() const { + return _unsupportedTTL; + } + [[nodiscard]] bool needsUpdateForVideoQualities(const MTPMessage &data); [[nodiscard]] TimeId ttlDestroyAt() const { @@ -687,6 +691,7 @@ private: crl::time _reactionsLastRefreshed = 0; bool _deleted = false; + int _unsupportedTTL = 0; TimeId _date = 0; TimeId _ttlDestroyAt = 0; diff --git a/Telegram/SourceFiles/history/view/history_view_context_menu.cpp b/Telegram/SourceFiles/history/view/history_view_context_menu.cpp index b682ffe1c..4d7cdefb7 100644 --- a/Telegram/SourceFiles/history/view/history_view_context_menu.cpp +++ b/Telegram/SourceFiles/history/view/history_view_context_menu.cpp @@ -1044,6 +1044,7 @@ void AddMessageActions( if (request.item) { AyuUi::AddReadUntilAction(menu, request.item); + AyuUi::AddBurnAction(menu, request.item); } }