diff --git a/Telegram/SourceFiles/data/data_replies_list.cpp b/Telegram/SourceFiles/data/data_replies_list.cpp index b2004fa79e..4d9f49ccc5 100644 --- a/Telegram/SourceFiles/data/data_replies_list.cpp +++ b/Telegram/SourceFiles/data/data_replies_list.cpp @@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "data/data_replies_list.h" +#include "base/unixtime.h" #include "history/history.h" #include "history/history_item.h" #include "history/history_service.h" @@ -626,4 +627,20 @@ bool RepliesList::processMessagesIsEmpty(const MTPmessages_Messages &result) { return (list.size() == skipped); } +HistoryItem *RepliesList::lastEditableMessage() { + const auto message = [&](MsgId msgId) { + return _history->owner().message(_history->channelId(), msgId); + }; + + const auto now = base::unixtime::now(); + auto proj = [&](MsgId msgId) { + if (const auto item = message(msgId)) { + return item->allowsEdit(now); + } + return false; + }; + const auto it = ranges::find_if(_list, std::move(proj)); + return (it == end(_list)) ? nullptr : message(*it); +} + } // namespace Data diff --git a/Telegram/SourceFiles/data/data_replies_list.h b/Telegram/SourceFiles/data/data_replies_list.h index 36932b82b1..945e70da86 100644 --- a/Telegram/SourceFiles/data/data_replies_list.h +++ b/Telegram/SourceFiles/data/data_replies_list.h @@ -31,6 +31,8 @@ public: [[nodiscard]] rpl::producer<int> fullCount() const; + [[nodiscard]] HistoryItem *lastEditableMessage(); + private: struct Viewer; diff --git a/Telegram/SourceFiles/history/view/history_view_replies_section.cpp b/Telegram/SourceFiles/history/view/history_view_replies_section.cpp index d6df6439bb..caf5059fe2 100644 --- a/Telegram/SourceFiles/history/view/history_view_replies_section.cpp +++ b/Telegram/SourceFiles/history/view/history_view_replies_section.cpp @@ -492,13 +492,11 @@ void RepliesWidget::setupComposeControls() { ) | rpl::start_with_next([=](not_null<QKeyEvent*> e) { if (e->key() == Qt::Key_Up) { if (!_composeControls->isEditingMessage()) { - // #TODO replies edit last sent message - //auto &messages = session().data().scheduledMessages(); - //if (const auto item = messages.lastEditableMessage(_history)) { - // _inner->editMessageRequestNotify(item->fullId()); - //} else { + if (const auto item = _replies->lastEditableMessage()) { + _inner->editMessageRequestNotify(item->fullId()); + } else { _scroll->keyPressEvent(e); - //} + } } else { _scroll->keyPressEvent(e); }