Try recursive lambda without make_shared.

This commit is contained in:
John Preston 2020-07-06 15:09:52 +04:00
parent 2f5cb33bf2
commit 900f7e1304

View file

@ -2995,8 +2995,7 @@ void ApiWrap::toggleFavedSticker(
return; return;
} }
auto failHandler = std::make_shared<Fn<void(const RPCError&, QByteArray)>>(); auto performRequest = [=](const auto &repeatRequest) -> void {
auto performRequest = [=] {
const auto usedFileReference = document->fileReference(); const auto usedFileReference = document->fileReference();
request(MTPmessages_FaveSticker( request(MTPmessages_FaveSticker(
document->mtpInput(), document->mtpInput(),
@ -3006,21 +3005,18 @@ void ApiWrap::toggleFavedSticker(
_session->data().stickers().setFaved(document, faved); _session->data().stickers().setFaved(document, faved);
} }
}).fail([=](const RPCError &error) { }).fail([=](const RPCError &error) {
(*failHandler)(error, usedFileReference);
}).send();
};
*failHandler = [=](const RPCError &error, QByteArray usedFileReference) {
if (error.code() == 400 if (error.code() == 400
&& error.type().startsWith(qstr("FILE_REFERENCE_"))) { && error.type().startsWith(qstr("FILE_REFERENCE_"))) {
auto refreshed = [=](const UpdatedFileReferences &data) { auto refreshed = [=](const UpdatedFileReferences &data) {
if (document->fileReference() != usedFileReference) { if (document->fileReference() != usedFileReference) {
performRequest(); repeatRequest(repeatRequest);
} }
}; };
refreshFileReference(origin, std::move(refreshed)); refreshFileReference(origin, std::move(refreshed));
} }
}).send();
}; };
performRequest(); performRequest(performRequest);
} }
void ApiWrap::toggleSavedGif( void ApiWrap::toggleSavedGif(
@ -3031,8 +3027,7 @@ void ApiWrap::toggleSavedGif(
return; return;
} }
auto failHandler = std::make_shared<Fn<void(const RPCError&, QByteArray)>>(); auto performRequest = [=](const auto &repeatRequest) -> void {
auto performRequest = [=] {
const auto usedFileReference = document->fileReference(); const auto usedFileReference = document->fileReference();
request(MTPmessages_SaveGif( request(MTPmessages_SaveGif(
document->mtpInput(), document->mtpInput(),
@ -3044,21 +3039,18 @@ void ApiWrap::toggleSavedGif(
} }
} }
}).fail([=](const RPCError &error) { }).fail([=](const RPCError &error) {
(*failHandler)(error, usedFileReference);
}).send();
};
*failHandler = [=](const RPCError & error, QByteArray usedFileReference) {
if (error.code() == 400 if (error.code() == 400
&& error.type().startsWith(qstr("FILE_REFERENCE_"))) { && error.type().startsWith(qstr("FILE_REFERENCE_"))) {
auto refreshed = [=](const UpdatedFileReferences &data) { auto refreshed = [=](const UpdatedFileReferences &data) {
if (document->fileReference() != usedFileReference) { if (document->fileReference() != usedFileReference) {
performRequest(); repeatRequest(repeatRequest);
} }
}; };
refreshFileReference(origin, std::move(refreshed)); refreshFileReference(origin, std::move(refreshed));
} }
}).send();
}; };
performRequest(); performRequest(performRequest);
} }
void ApiWrap::requestStickers(TimeId now) { void ApiWrap::requestStickers(TimeId now) {