From 1c41808042ef2e681809f2dc3c2f1a2737d93de5 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sat, 30 May 2020 00:21:25 +0300 Subject: [PATCH] Set Api::EditMessage as generic function. --- Telegram/SourceFiles/api/api_editing.cpp | 61 +++++++++++++++++------- 1 file changed, 43 insertions(+), 18 deletions(-) diff --git a/Telegram/SourceFiles/api/api_editing.cpp b/Telegram/SourceFiles/api/api_editing.cpp index dcfca83ffb..6b2754b379 100644 --- a/Telegram/SourceFiles/api/api_editing.cpp +++ b/Telegram/SourceFiles/api/api_editing.cpp @@ -22,12 +22,25 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL namespace Api { namespace { +using namespace rpl::details; + +template +constexpr auto WithId = + is_callable_plain_v, mtpRequestId>; +template +constexpr auto WithoutId = + is_callable_plain_v>; +template +constexpr auto WithoutCallback = + is_callable_plain_v; + +template mtpRequestId EditMessage( not_null item, const TextWithEntities &textWithEntities, SendOptions options, - Fn)> done, - Fn fail, + DoneCallback &&done, + FailCallback &&fail, std::optional inputMedia = std::nullopt) { const auto session = &item->history()->session(); const auto api = &session->api(); @@ -69,21 +82,41 @@ mtpRequestId EditMessage( MTPReplyMarkup(), sentEntities, MTP_int(options.scheduled) - )).done([=](const MTPUpdates &result) { - done(result, [=] { api->applyUpdates(result); }); + )).done([=]( + const MTPUpdates &result, + [[maybe_unused]] mtpRequestId requestId) { + const auto apply = [=] { api->applyUpdates(result); }; + + if constexpr (WithId) { + done(result, apply, requestId); + } else if constexpr (WithoutId) { + done(result, apply); + } else if constexpr (WithoutCallback) { + done(result); + apply(); + } else { + apply(); + } }).fail( fail ).send(); } +template mtpRequestId EditMessage( not_null item, SendOptions options, - Fn)> done, - Fn fail, + DoneCallback &&done, + FailCallback &&fail, std::optional inputMedia = std::nullopt) { const auto &text = item->originalText(); - return EditMessage(item, text, options, done, fail, inputMedia); + return EditMessage( + item, + text, + options, + std::forward(done), + std::forward(fail), + inputMedia); } void EditMessageWithUploadedMedia( @@ -124,12 +157,8 @@ void EditMessageWithUploadedMedia( void RescheduleMessage( not_null item, SendOptions options) { - const auto done = [=](const auto &result, Fn applyUpdates) { - applyUpdates(); - }; - const auto fail = [](const RPCError &error) {}; - - EditMessage(item, options, done, fail); + const auto empty = [](const auto &r) {}; + EditMessage(item, options, empty, empty); } void EditMessageWithUploadedDocument( @@ -160,11 +189,7 @@ mtpRequestId EditCaption( const TextWithEntities &caption, Fn done, Fn fail) { - const auto callback = [=](const auto &result, Fn applyUpdates) { - done(result); - applyUpdates(); - }; - return EditMessage(item, caption, SendOptions(), callback, fail); + return EditMessage(item, caption, SendOptions(), done, fail); }