mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-07 07:33:52 +02:00
Set Api::EditMessage as generic function.
This commit is contained in:
parent
2ebf44c166
commit
1c41808042
1 changed files with 43 additions and 18 deletions
|
@ -22,12 +22,25 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
namespace Api {
|
namespace Api {
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
using namespace rpl::details;
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
constexpr auto WithId =
|
||||||
|
is_callable_plain_v<T, const MTPUpdates &, Fn<void()>, mtpRequestId>;
|
||||||
|
template <typename T>
|
||||||
|
constexpr auto WithoutId =
|
||||||
|
is_callable_plain_v<T, const MTPUpdates &, Fn<void()>>;
|
||||||
|
template <typename T>
|
||||||
|
constexpr auto WithoutCallback =
|
||||||
|
is_callable_plain_v<T, const MTPUpdates &>;
|
||||||
|
|
||||||
|
template <typename DoneCallback, typename FailCallback>
|
||||||
mtpRequestId EditMessage(
|
mtpRequestId EditMessage(
|
||||||
not_null<HistoryItem*> item,
|
not_null<HistoryItem*> item,
|
||||||
const TextWithEntities &textWithEntities,
|
const TextWithEntities &textWithEntities,
|
||||||
SendOptions options,
|
SendOptions options,
|
||||||
Fn<void(const MTPUpdates &, Fn<void()>)> done,
|
DoneCallback &&done,
|
||||||
Fn<void(const RPCError &)> fail,
|
FailCallback &&fail,
|
||||||
std::optional<MTPInputMedia> inputMedia = std::nullopt) {
|
std::optional<MTPInputMedia> inputMedia = std::nullopt) {
|
||||||
const auto session = &item->history()->session();
|
const auto session = &item->history()->session();
|
||||||
const auto api = &session->api();
|
const auto api = &session->api();
|
||||||
|
@ -69,21 +82,41 @@ mtpRequestId EditMessage(
|
||||||
MTPReplyMarkup(),
|
MTPReplyMarkup(),
|
||||||
sentEntities,
|
sentEntities,
|
||||||
MTP_int(options.scheduled)
|
MTP_int(options.scheduled)
|
||||||
)).done([=](const MTPUpdates &result) {
|
)).done([=](
|
||||||
done(result, [=] { api->applyUpdates(result); });
|
const MTPUpdates &result,
|
||||||
|
[[maybe_unused]] mtpRequestId requestId) {
|
||||||
|
const auto apply = [=] { api->applyUpdates(result); };
|
||||||
|
|
||||||
|
if constexpr (WithId<DoneCallback>) {
|
||||||
|
done(result, apply, requestId);
|
||||||
|
} else if constexpr (WithoutId<DoneCallback>) {
|
||||||
|
done(result, apply);
|
||||||
|
} else if constexpr (WithoutCallback<DoneCallback>) {
|
||||||
|
done(result);
|
||||||
|
apply();
|
||||||
|
} else {
|
||||||
|
apply();
|
||||||
|
}
|
||||||
}).fail(
|
}).fail(
|
||||||
fail
|
fail
|
||||||
).send();
|
).send();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename DoneCallback, typename FailCallback>
|
||||||
mtpRequestId EditMessage(
|
mtpRequestId EditMessage(
|
||||||
not_null<HistoryItem*> item,
|
not_null<HistoryItem*> item,
|
||||||
SendOptions options,
|
SendOptions options,
|
||||||
Fn<void(const MTPUpdates &, Fn<void()>)> done,
|
DoneCallback &&done,
|
||||||
Fn<void(const RPCError &)> fail,
|
FailCallback &&fail,
|
||||||
std::optional<MTPInputMedia> inputMedia = std::nullopt) {
|
std::optional<MTPInputMedia> inputMedia = std::nullopt) {
|
||||||
const auto &text = item->originalText();
|
const auto &text = item->originalText();
|
||||||
return EditMessage(item, text, options, done, fail, inputMedia);
|
return EditMessage(
|
||||||
|
item,
|
||||||
|
text,
|
||||||
|
options,
|
||||||
|
std::forward<DoneCallback>(done),
|
||||||
|
std::forward<FailCallback>(fail),
|
||||||
|
inputMedia);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditMessageWithUploadedMedia(
|
void EditMessageWithUploadedMedia(
|
||||||
|
@ -124,12 +157,8 @@ void EditMessageWithUploadedMedia(
|
||||||
void RescheduleMessage(
|
void RescheduleMessage(
|
||||||
not_null<HistoryItem*> item,
|
not_null<HistoryItem*> item,
|
||||||
SendOptions options) {
|
SendOptions options) {
|
||||||
const auto done = [=](const auto &result, Fn<void()> applyUpdates) {
|
const auto empty = [](const auto &r) {};
|
||||||
applyUpdates();
|
EditMessage(item, options, empty, empty);
|
||||||
};
|
|
||||||
const auto fail = [](const RPCError &error) {};
|
|
||||||
|
|
||||||
EditMessage(item, options, done, fail);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditMessageWithUploadedDocument(
|
void EditMessageWithUploadedDocument(
|
||||||
|
@ -160,11 +189,7 @@ mtpRequestId EditCaption(
|
||||||
const TextWithEntities &caption,
|
const TextWithEntities &caption,
|
||||||
Fn<void(const MTPUpdates &)> done,
|
Fn<void(const MTPUpdates &)> done,
|
||||||
Fn<void(const RPCError &)> fail) {
|
Fn<void(const RPCError &)> fail) {
|
||||||
const auto callback = [=](const auto &result, Fn<void()> applyUpdates) {
|
return EditMessage(item, caption, SendOptions(), done, fail);
|
||||||
done(result);
|
|
||||||
applyUpdates();
|
|
||||||
};
|
|
||||||
return EditMessage(item, caption, SendOptions(), callback, fail);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue