From 8d0b9ce1b547ab70a45fd37b575b91be16bceac6 Mon Sep 17 00:00:00 2001 From: RadRussianRus Date: Tue, 6 Apr 2021 04:14:59 +0300 Subject: [PATCH] Avoid iterating item list --- Telegram/SourceFiles/apiwrap.cpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/Telegram/SourceFiles/apiwrap.cpp b/Telegram/SourceFiles/apiwrap.cpp index 4a218c572..0df03776c 100644 --- a/Telegram/SourceFiles/apiwrap.cpp +++ b/Telegram/SourceFiles/apiwrap.cpp @@ -3878,14 +3878,18 @@ void ApiWrap::forwardMessagesUnquoted( if (shared) { ++shared->requestsLeft; } - auto medias = QVector(); + + const auto medias = std::make_shared>(); + const auto mediaInputs = std::make_shared>(); const auto mediaRefs = std::make_shared>(); - medias.reserve(ids.size()); + mediaInputs->reserve(ids.size()); mediaRefs->reserve(ids.size()); for (auto i = fromIter, e = toIter; i != e; i++) { const auto item = *i; const auto media = item->media(); + medias->push_back(media); + auto inputMedia = media->photo() ? MTP_inputMediaPhoto(MTP_flags(0), media->photo()->mtpInput(), MTPint()) : MTP_inputMediaDocument(MTP_flags(0), media->document()->mtpInput(), MTPint(), MTPstring()); @@ -3903,7 +3907,7 @@ void ApiWrap::forwardMessagesUnquoted( auto randomId = randomIds.takeFirst(); - medias.push_back(MTP_inputSingleMedia( + mediaInputs->push_back(MTP_inputSingleMedia( MTP_flags(flags), inputMedia, randomId, @@ -3922,9 +3926,8 @@ void ApiWrap::forwardMessagesUnquoted( const auto requestType = Data::Histories::RequestType::Send; auto performRequest = [=, &histories](const auto &repeatRequest) -> void { mediaRefs->clear(); - for (auto i = fromIter, e = toIter; i != e; i++) { - const auto item = *i; - const auto media = item->media(); + for (auto i = medias->begin(), e = medias->end(); i != e; i++) { + const auto media = *i; mediaRefs->push_back(media->photo() ? media->photo()->fileReference() : media->document()->fileReference()); @@ -3934,7 +3937,7 @@ void ApiWrap::forwardMessagesUnquoted( MTP_flags(finalFlags), peer->input, MTPint(), - MTP_vector(medias), + MTP_vector(*mediaInputs), MTP_int(action.options.scheduled) )).done([=](const MTPUpdates &result) { applyUpdates(result); @@ -3948,9 +3951,8 @@ void ApiWrap::forwardMessagesUnquoted( auto refreshRequests = mediaRefs->size(); auto index = 0; auto wasUpdated = false; - for (auto i = fromIter, e = toIter; i != e; i++) { - const auto item = *i; - const auto media = item->media(); + for (auto i = medias->begin(), e = medias->end(); i != e; i++) { + const auto media = *i; const auto origin = media->document() ? media->document()->stickerOrGifOrigin() : Data::FileOrigin();