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); if (error.code() == 400
&& error.type().startsWith(qstr("FILE_REFERENCE_"))) {
auto refreshed = [=](const UpdatedFileReferences &data) {
if (document->fileReference() != usedFileReference) {
repeatRequest(repeatRequest);
}
};
refreshFileReference(origin, std::move(refreshed));
}
}).send(); }).send();
}; };
*failHandler = [=](const RPCError &error, QByteArray usedFileReference) { performRequest(performRequest);
if (error.code() == 400
&& error.type().startsWith(qstr("FILE_REFERENCE_"))) {
auto refreshed = [=](const UpdatedFileReferences &data) {
if (document->fileReference() != usedFileReference) {
performRequest();
}
};
refreshFileReference(origin, std::move(refreshed));
}
};
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); if (error.code() == 400
&& error.type().startsWith(qstr("FILE_REFERENCE_"))) {
auto refreshed = [=](const UpdatedFileReferences &data) {
if (document->fileReference() != usedFileReference) {
repeatRequest(repeatRequest);
}
};
refreshFileReference(origin, std::move(refreshed));
}
}).send(); }).send();
}; };
*failHandler = [=](const RPCError & error, QByteArray usedFileReference) { performRequest(performRequest);
if (error.code() == 400
&& error.type().startsWith(qstr("FILE_REFERENCE_"))) {
auto refreshed = [=](const UpdatedFileReferences &data) {
if (document->fileReference() != usedFileReference) {
performRequest();
}
};
refreshFileReference(origin, std::move(refreshed));
}
};
performRequest();
} }
void ApiWrap::requestStickers(TimeId now) { void ApiWrap::requestStickers(TimeId now) {