Don't pass redundant MTPUpdates arguments.

This commit is contained in:
John Preston 2022-08-05 13:37:30 +03:00
parent d891a5344a
commit b7cc2e9894
8 changed files with 78 additions and 60 deletions

View file

@ -27,13 +27,19 @@ using namespace rpl::details;
template <typename T> template <typename T>
constexpr auto WithId = constexpr auto WithId =
is_callable_plain_v<T, const MTPUpdates &, Fn<void()>, mtpRequestId>; is_callable_plain_v<T, Fn<void()>, mtpRequestId>;
template <typename T> template <typename T>
constexpr auto WithoutId = constexpr auto WithoutId =
is_callable_plain_v<T, const MTPUpdates &, Fn<void()>>; is_callable_plain_v<T, Fn<void()>>;
template <typename T> template <typename T>
constexpr auto WithoutCallback = constexpr auto WithoutCallback =
is_callable_plain_v<T, const MTPUpdates &>; is_callable_plain_v<T>;
template <typename T>
constexpr auto ErrorWithId =
is_callable_plain_v<T, QString, mtpRequestId>;
template <typename T>
constexpr auto ErrorWithoutId =
is_callable_plain_v<T, QString>;
template <typename DoneCallback, typename FailCallback> template <typename DoneCallback, typename FailCallback>
mtpRequestId EditMessage( mtpRequestId EditMessage(
@ -93,22 +99,30 @@ mtpRequestId EditMessage(
const auto apply = [=] { api->applyUpdates(result); }; const auto apply = [=] { api->applyUpdates(result); };
if constexpr (WithId<DoneCallback>) { if constexpr (WithId<DoneCallback>) {
done(result, apply, requestId); done(apply, requestId);
} else if constexpr (WithoutId<DoneCallback>) { } else if constexpr (WithoutId<DoneCallback>) {
done(result, apply); done(apply);
} else if constexpr (WithoutCallback<DoneCallback>) { } else if constexpr (WithoutCallback<DoneCallback>) {
done(result); done();
apply(); apply();
} else { } else {
apply(); t_bad_callback(done);
} }
if (updateRecentStickers) { if (updateRecentStickers) {
api->requestRecentStickersForce(true); api->requestRecentStickersForce(true);
} }
}).fail( }).fail([=](const MTP::Error &error, mtpRequestId requestId) {
fail if constexpr (ErrorWithId<FailCallback>) {
).send(); fail(error.type(), requestId);
} else if constexpr (ErrorWithoutId<FailCallback>) {
fail(error.type());
} else if constexpr (WithoutCallback<FailCallback>) {
fail();
} else {
t_bad_callback(fail);
}
}).send();
} }
template <typename DoneCallback, typename FailCallback> template <typename DoneCallback, typename FailCallback>
@ -132,7 +146,7 @@ void EditMessageWithUploadedMedia(
not_null<HistoryItem*> item, not_null<HistoryItem*> item,
SendOptions options, SendOptions options,
MTPInputMedia media) { MTPInputMedia media) {
const auto done = [=](const auto &result, Fn<void()> applyUpdates) { const auto done = [=](Fn<void()> applyUpdates) {
if (item) { if (item) {
item->clearSavedMedia(); item->clearSavedMedia();
item->setIsLocalUpdateMedia(true); item->setIsLocalUpdateMedia(true);
@ -140,11 +154,10 @@ void EditMessageWithUploadedMedia(
item->setIsLocalUpdateMedia(false); item->setIsLocalUpdateMedia(false);
} }
}; };
const auto fail = [=](const MTP::Error &error) { const auto fail = [=](const QString &error) {
const auto err = error.type();
const auto session = &item->history()->session(); const auto session = &item->history()->session();
const auto notModified = (err == u"MESSAGE_NOT_MODIFIED"_q); const auto notModified = (error == u"MESSAGE_NOT_MODIFIED"_q);
const auto mediaInvalid = (err == u"MEDIA_NEW_INVALID"_q); const auto mediaInvalid = (error == u"MEDIA_NEW_INVALID"_q);
if (notModified || mediaInvalid) { if (notModified || mediaInvalid) {
item->returnSavedMedia(); item->returnSavedMedia();
session->data().sendHistoryChangeNotifications(); session->data().sendHistoryChangeNotifications();
@ -200,8 +213,8 @@ mtpRequestId EditCaption(
not_null<HistoryItem*> item, not_null<HistoryItem*> item,
const TextWithEntities &caption, const TextWithEntities &caption,
SendOptions options, SendOptions options,
Fn<void(const MTPUpdates &)> done, Fn<void()> done,
Fn<void(const MTP::Error &)> fail) { Fn<void(const QString &)> fail) {
return EditMessage(item, caption, options, done, fail); return EditMessage(item, caption, options, done, fail);
} }
@ -209,17 +222,13 @@ mtpRequestId EditTextMessage(
not_null<HistoryItem*> item, not_null<HistoryItem*> item,
const TextWithEntities &caption, const TextWithEntities &caption,
SendOptions options, SendOptions options,
Fn<void(const MTPUpdates &, mtpRequestId requestId)> done, Fn<void(mtpRequestId requestId)> done,
Fn<void(const MTP::Error &, mtpRequestId requestId)> fail) { Fn<void(const QString &, mtpRequestId requestId)> fail) {
const auto callback = [=]( const auto callback = [=](Fn<void()> applyUpdates, mtpRequestId id) {
const auto &result,
Fn<void()> applyUpdates,
auto id) {
applyUpdates(); applyUpdates();
done(result, id); done(id);
}; };
return EditMessage(item, caption, options, callback, fail); return EditMessage(item, caption, options, callback, fail);
} }
} // namespace Api } // namespace Api

View file

@ -42,14 +42,14 @@ mtpRequestId EditCaption(
not_null<HistoryItem*> item, not_null<HistoryItem*> item,
const TextWithEntities &caption, const TextWithEntities &caption,
SendOptions options, SendOptions options,
Fn<void(const MTPUpdates &)> done, Fn<void()> done,
Fn<void(const MTP::Error &)> fail); Fn<void(const QString &)> fail);
mtpRequestId EditTextMessage( mtpRequestId EditTextMessage(
not_null<HistoryItem*> item, not_null<HistoryItem*> item,
const TextWithEntities &caption, const TextWithEntities &caption,
SendOptions options, SendOptions options,
Fn<void(const MTPUpdates &, mtpRequestId requestId)> done, Fn<void(mtpRequestId requestId)> done,
Fn<void(const MTP::Error &, mtpRequestId requestId)> fail); Fn<void(const QString &error, mtpRequestId requestId)> fail);
} // namespace Api } // namespace Api

View file

@ -438,14 +438,22 @@ void ApiWrap::sendMessageFail(
not_null<PeerData*> peer, not_null<PeerData*> peer,
uint64 randomId, uint64 randomId,
FullMsgId itemId) { FullMsgId itemId) {
sendMessageFail(error.type(), peer, randomId, itemId);
}
void ApiWrap::sendMessageFail(
const QString &error,
not_null<PeerData*> peer,
uint64 randomId,
FullMsgId itemId) {
const auto show = ShowForPeer(peer); const auto show = ShowForPeer(peer);
if (error.type() == qstr("PEER_FLOOD")) { if (error == qstr("PEER_FLOOD")) {
show->showBox( show->showBox(
Ui::MakeInformBox( Ui::MakeInformBox(
PeerFloodErrorText(&session(), PeerFloodType::Send)), PeerFloodErrorText(&session(), PeerFloodType::Send)),
Ui::LayerOption::CloseOther); Ui::LayerOption::CloseOther);
} else if (error.type() == qstr("USER_BANNED_IN_CHANNEL")) { } else if (error == qstr("USER_BANNED_IN_CHANNEL")) {
const auto link = Ui::Text::Link( const auto link = Ui::Text::Link(
tr::lng_cant_more_info(tr::now), tr::lng_cant_more_info(tr::now),
session().createInternalLinkFull(qsl("spambot"))); session().createInternalLinkFull(qsl("spambot")));
@ -457,9 +465,9 @@ void ApiWrap::sendMessageFail(
link, link,
Ui::Text::WithEntities)), Ui::Text::WithEntities)),
Ui::LayerOption::CloseOther); Ui::LayerOption::CloseOther);
} else if (error.type().startsWith(qstr("SLOWMODE_WAIT_"))) { } else if (error.startsWith(qstr("SLOWMODE_WAIT_"))) {
const auto chop = qstr("SLOWMODE_WAIT_").size(); const auto chop = qstr("SLOWMODE_WAIT_").size();
const auto left = base::StringViewMid(error.type(), chop).toInt(); const auto left = base::StringViewMid(error, chop).toInt();
if (const auto channel = peer->asChannel()) { if (const auto channel = peer->asChannel()) {
const auto seconds = channel->slowmodeSeconds(); const auto seconds = channel->slowmodeSeconds();
if (seconds >= left) { if (seconds >= left) {
@ -469,7 +477,7 @@ void ApiWrap::sendMessageFail(
requestFullPeer(peer); requestFullPeer(peer);
} }
} }
} else if (error.type() == qstr("SCHEDULE_STATUS_PRIVATE")) { } else if (error == qstr("SCHEDULE_STATUS_PRIVATE")) {
auto &scheduled = _session->data().scheduledMessages(); auto &scheduled = _session->data().scheduledMessages();
Assert(peer->isUser()); Assert(peer->isUser());
if (const auto item = scheduled.lookupItem(peer->id, itemId.msg)) { if (const auto item = scheduled.lookupItem(peer->id, itemId.msg)) {
@ -478,7 +486,7 @@ void ApiWrap::sendMessageFail(
Ui::MakeInformBox(tr::lng_cant_do_this()), Ui::MakeInformBox(tr::lng_cant_do_this()),
Ui::LayerOption::CloseOther); Ui::LayerOption::CloseOther);
} }
} else if (error.type() == qstr("CHAT_FORWARDS_RESTRICTED")) { } else if (error == qstr("CHAT_FORWARDS_RESTRICTED")) {
if (show->valid()) { if (show->valid()) {
Ui::ShowMultilineToast({ Ui::ShowMultilineToast({
.parentOverride = show->toastParent(), .parentOverride = show->toastParent(),
@ -489,7 +497,7 @@ void ApiWrap::sendMessageFail(
.duration = kJoinErrorDuration .duration = kJoinErrorDuration
}); });
} }
} else if (error.type() == qstr("PREMIUM_ACCOUNT_REQUIRED")) { } else if (error == qstr("PREMIUM_ACCOUNT_REQUIRED")) {
Settings::ShowPremium(&session(), "premium_stickers"); Settings::ShowPremium(&session(), "premium_stickers");
} }
if (const auto item = _session->data().message(itemId)) { if (const auto item = _session->data().message(itemId)) {

View file

@ -343,6 +343,11 @@ public:
not_null<PeerData*> peer, not_null<PeerData*> peer,
uint64 randomId = 0, uint64 randomId = 0,
FullMsgId itemId = FullMsgId()); FullMsgId itemId = FullMsgId());
void sendMessageFail(
const QString &error,
not_null<PeerData*> peer,
uint64 randomId = 0,
FullMsgId itemId = FullMsgId());
void reloadContactSignupSilent(); void reloadContactSignupSilent();
rpl::producer<bool> contactSignupSilent() const; rpl::producer<bool> contactSignupSilent() const;

View file

@ -723,20 +723,19 @@ void EditCaptionBox::save() {
return; return;
} }
const auto done = crl::guard(this, [=](const MTPUpdates &updates) { const auto done = crl::guard(this, [=] {
_saveRequestId = 0; _saveRequestId = 0;
closeBox(); closeBox();
}); });
const auto fail = crl::guard(this, [=](const MTP::Error &error) { const auto fail = crl::guard(this, [=](const QString &error) {
_saveRequestId = 0; _saveRequestId = 0;
const auto &type = error.type(); if (ranges::contains(Api::kDefaultEditMessagesErrors, error)) {
if (ranges::contains(Api::kDefaultEditMessagesErrors, type)) {
_error = tr::lng_edit_error(tr::now); _error = tr::lng_edit_error(tr::now);
update(); update();
} else if (type == u"MESSAGE_NOT_MODIFIED"_q) { } else if (error == u"MESSAGE_NOT_MODIFIED"_q) {
closeBox(); closeBox();
} else if (type == u"MESSAGE_EMPTY"_q) { } else if (error == u"MESSAGE_EMPTY"_q) {
_field->setFocus(); _field->setFocus();
_field->showError(); _field->showError();
update(); update();

View file

@ -3662,7 +3662,7 @@ void HistoryWidget::saveEditMsg() {
const auto weak = Ui::MakeWeak(this); const auto weak = Ui::MakeWeak(this);
const auto history = _history; const auto history = _history;
const auto done = [=](const MTPUpdates &result, mtpRequestId requestId) { const auto done = [=](mtpRequestId requestId) {
crl::guard(weak, [=] { crl::guard(weak, [=] {
if (requestId == _saveEditMsgRequestId) { if (requestId == _saveEditMsgRequestId) {
_saveEditMsgRequestId = 0; _saveEditMsgRequestId = 0;
@ -3677,7 +3677,7 @@ void HistoryWidget::saveEditMsg() {
} }
}; };
const auto fail = [=](const MTP::Error &error, mtpRequestId requestId) { const auto fail = [=](const QString &error, mtpRequestId requestId) {
if (const auto editDraft = history->localEditDraft()) { if (const auto editDraft = history->localEditDraft()) {
if (editDraft->saveRequestId == requestId) { if (editDraft->saveRequestId == requestId) {
editDraft->saveRequestId = 0; editDraft->saveRequestId = 0;
@ -3687,12 +3687,11 @@ void HistoryWidget::saveEditMsg() {
if (requestId == _saveEditMsgRequestId) { if (requestId == _saveEditMsgRequestId) {
_saveEditMsgRequestId = 0; _saveEditMsgRequestId = 0;
} }
const auto &err = error.type(); if (ranges::contains(Api::kDefaultEditMessagesErrors, error)) {
if (ranges::contains(Api::kDefaultEditMessagesErrors, err)) {
controller()->show(Ui::MakeInformBox(tr::lng_edit_error())); controller()->show(Ui::MakeInformBox(tr::lng_edit_error()));
} else if (err == u"MESSAGE_NOT_MODIFIED"_q) { } else if (error == u"MESSAGE_NOT_MODIFIED"_q) {
cancelEdit(); cancelEdit();
} else if (err == u"MESSAGE_EMPTY"_q) { } else if (error == u"MESSAGE_EMPTY"_q) {
_field->selectAll(); _field->selectAll();
_field->setFocus(); _field->setFocus();
} else { } else {

View file

@ -1074,24 +1074,23 @@ void RepliesWidget::edit(
session().api().request(base::take(*saveEditMsgRequestId)).cancel(); session().api().request(base::take(*saveEditMsgRequestId)).cancel();
}); });
const auto done = [=](const MTPUpdates &result, mtpRequestId requestId) { const auto done = [=](mtpRequestId requestId) {
if (requestId == *saveEditMsgRequestId) { if (requestId == *saveEditMsgRequestId) {
*saveEditMsgRequestId = 0; *saveEditMsgRequestId = 0;
_composeControls->cancelEditMessage(); _composeControls->cancelEditMessage();
} }
}; };
const auto fail = [=](const MTP::Error &error, mtpRequestId requestId) { const auto fail = [=](const QString &error, mtpRequestId requestId) {
if (requestId == *saveEditMsgRequestId) { if (requestId == *saveEditMsgRequestId) {
*saveEditMsgRequestId = 0; *saveEditMsgRequestId = 0;
} }
const auto &err = error.type(); if (ranges::contains(Api::kDefaultEditMessagesErrors, error)) {
if (ranges::contains(Api::kDefaultEditMessagesErrors, err)) {
controller()->show(Ui::MakeInformBox(tr::lng_edit_error())); controller()->show(Ui::MakeInformBox(tr::lng_edit_error()));
} else if (err == u"MESSAGE_NOT_MODIFIED"_q) { } else if (error == u"MESSAGE_NOT_MODIFIED"_q) {
_composeControls->cancelEditMessage(); _composeControls->cancelEditMessage();
} else if (err == u"MESSAGE_EMPTY"_q) { } else if (error == u"MESSAGE_EMPTY"_q) {
doSetInnerFocus(); doSetInnerFocus();
} else { } else {
controller()->show(Ui::MakeInformBox(tr::lng_edit_error())); controller()->show(Ui::MakeInformBox(tr::lng_edit_error()));

View file

@ -688,24 +688,23 @@ void ScheduledWidget::edit(
session().api().request(base::take(*saveEditMsgRequestId)).cancel(); session().api().request(base::take(*saveEditMsgRequestId)).cancel();
}); });
const auto done = [=](const MTPUpdates &result, mtpRequestId requestId) { const auto done = [=](mtpRequestId requestId) {
if (requestId == *saveEditMsgRequestId) { if (requestId == *saveEditMsgRequestId) {
*saveEditMsgRequestId = 0; *saveEditMsgRequestId = 0;
_composeControls->cancelEditMessage(); _composeControls->cancelEditMessage();
} }
}; };
const auto fail = [=](const MTP::Error &error, mtpRequestId requestId) { const auto fail = [=](const QString &error, mtpRequestId requestId) {
if (requestId == *saveEditMsgRequestId) { if (requestId == *saveEditMsgRequestId) {
*saveEditMsgRequestId = 0; *saveEditMsgRequestId = 0;
} }
const auto &err = error.type(); if (ranges::contains(Api::kDefaultEditMessagesErrors, error)) {
if (ranges::contains(Api::kDefaultEditMessagesErrors, err)) {
controller()->show(Ui::MakeInformBox(tr::lng_edit_error())); controller()->show(Ui::MakeInformBox(tr::lng_edit_error()));
} else if (err == u"MESSAGE_NOT_MODIFIED"_q) { } else if (error == u"MESSAGE_NOT_MODIFIED"_q) {
_composeControls->cancelEditMessage(); _composeControls->cancelEditMessage();
} else if (err == u"MESSAGE_EMPTY"_q) { } else if (error == u"MESSAGE_EMPTY"_q) {
_composeControls->focus(); _composeControls->focus();
} else { } else {
controller()->show(Ui::MakeInformBox(tr::lng_edit_error())); controller()->show(Ui::MakeInformBox(tr::lng_edit_error()));