diff --git a/Telegram/SourceFiles/data/data_groups.cpp b/Telegram/SourceFiles/data/data_groups.cpp index 25968975f..6e0998d4d 100644 --- a/Telegram/SourceFiles/data/data_groups.cpp +++ b/Telegram/SourceFiles/data/data_groups.cpp @@ -145,4 +145,20 @@ void Groups::refreshViews(const HistoryItemsList &items) { } } +not_null Groups::findItemToEdit( + not_null item) const { + const auto group = find(item); + if (!group) { + return item; + } + const auto &list = group->items; + const auto it = ranges::find_if( + list, + ranges::not_fn(&HistoryItem::emptyText)); + if (it == end(list)) { + return list.front(); + } + return (*it); +} + } // namespace Data diff --git a/Telegram/SourceFiles/data/data_groups.h b/Telegram/SourceFiles/data/data_groups.h index 4ab230e98..be628cbaf 100644 --- a/Telegram/SourceFiles/data/data_groups.h +++ b/Telegram/SourceFiles/data/data_groups.h @@ -31,6 +31,8 @@ public: const Group *find(not_null item) const; + not_null findItemToEdit(not_null item) const; + private: HistoryItemsList::const_iterator findPositionForItem( const HistoryItemsList &group, diff --git a/Telegram/SourceFiles/data/data_replies_list.cpp b/Telegram/SourceFiles/data/data_replies_list.cpp index 4d9f49ccc..e27d2d80b 100644 --- a/Telegram/SourceFiles/data/data_replies_list.cpp +++ b/Telegram/SourceFiles/data/data_replies_list.cpp @@ -640,7 +640,9 @@ HistoryItem *RepliesList::lastEditableMessage() { return false; }; const auto it = ranges::find_if(_list, std::move(proj)); - return (it == end(_list)) ? nullptr : message(*it); + return (it == end(_list)) + ? nullptr + : _history->owner().groups().findItemToEdit(message(*it)); } } // namespace Data diff --git a/Telegram/SourceFiles/data/data_scheduled_messages.cpp b/Telegram/SourceFiles/data/data_scheduled_messages.cpp index a8bb8b8cb..7e1d2bdd7 100644 --- a/Telegram/SourceFiles/data/data_scheduled_messages.cpp +++ b/Telegram/SourceFiles/data/data_scheduled_messages.cpp @@ -558,8 +558,11 @@ HistoryItem *ScheduledMessages::lastEditableMessage( auto proj = [&](const OwnedItem &item) { return item->allowsEdit(now); }; + const auto it = ranges::find_if(items, std::move(proj)); - return (it == end(items)) ? nullptr : (*it).get(); + return (it == end(items)) + ? nullptr + : history->owner().groups().findItemToEdit((*it).get()); } } // namespace Data diff --git a/Telegram/SourceFiles/history/history.cpp b/Telegram/SourceFiles/history/history.cpp index 907bb0c10..8e51f250a 100644 --- a/Telegram/SourceFiles/history/history.cpp +++ b/Telegram/SourceFiles/history/history.cpp @@ -2713,7 +2713,7 @@ HistoryItem *History::lastEditableMessage() const { for (const auto &message : ranges::view::reverse(block->messages)) { const auto item = message->data(); if (item->allowsEdit(now)) { - return item; + return owner().groups().findItemToEdit(item); } } }