From 6018a52828cb078f22bfba5fe792a9495eec307b Mon Sep 17 00:00:00 2001 From: RadRussianRus Date: Mon, 29 Mar 2021 19:56:00 +0300 Subject: [PATCH] Fix crash when forwarding text message and photo --- Telegram/SourceFiles/apiwrap.cpp | 35 +++++++++++++++++++------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/Telegram/SourceFiles/apiwrap.cpp b/Telegram/SourceFiles/apiwrap.cpp index 15e2ba45a..fa6aea410 100644 --- a/Telegram/SourceFiles/apiwrap.cpp +++ b/Telegram/SourceFiles/apiwrap.cpp @@ -3799,33 +3799,38 @@ void ApiWrap::forwardMessagesUnquoted( auto localIds = std::shared_ptr>(); auto fromIter = items.begin(); auto toIter = items.begin(); + auto messageGroupCount = 0; const auto needNextGroup = [&] (not_null item) { + auto lastGroupCheck = false; + if (item->media() && item->media()->canBeGrouped()) { + lastGroupCheck = lastGroup != ((item->media()->photo() + || (item->media()->document() + && item->media()->document()->isVideoFile())) + ? LastGroupType::Medias + : (item->media()->document() + && item->media()->document()->isSharedMediaMusic()) + ? LastGroupType::Music + : LastGroupType::Documents); + } else { + lastGroupCheck = lastGroup != LastGroupType::None; + } + if (cForwardAlbumsAsIs()) { const auto newFrom = item->history()->peer; const auto newGroupId = item->groupId(); return forwardFrom != newFrom - || currentGroupId != newGroupId; + || currentGroupId != newGroupId + || lastGroupCheck; } else if (cForwardGrouped()) { - if (item->media() && item->media()->canBeGrouped()) { - return lastGroup != ((item->media()->photo() - || (item->media()->document() - && item->media()->document()->isVideoFile())) - ? LastGroupType::Medias - : (item->media()->document() - && item->media()->document()->isSharedMediaMusic()) - ? LastGroupType::Music - : LastGroupType::Documents); - } else { - return lastGroup != LastGroupType::None; - } + return lastGroupCheck; } else { return true; } }; const auto isGrouped = [&] { - return lastGroup != LastGroupType::None && fromIter != toIter; + return lastGroup != LastGroupType::None && messageGroupCount > 1; }; const auto forwardQuotedSingle = [&] (not_null item) { @@ -4142,6 +4147,7 @@ void ApiWrap::forwardMessagesUnquoted( const auto randomId = openssl::RandomValue(); if (needNextGroup(item)) { sendAccumulated(); + messageGroupCount = 0; forwardFrom = item->history()->peer; currentGroupId = item->groupId(); fromIter = i; @@ -4161,6 +4167,7 @@ void ApiWrap::forwardMessagesUnquoted( lastGroup = LastGroupType::None; } toIter = ++i; + messageGroupCount++; } sendAccumulated(); _session->data().sendHistoryChangeNotifications();