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

View file

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

View file

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

View file

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

View file

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

View file

@ -3662,7 +3662,7 @@ void HistoryWidget::saveEditMsg() {
const auto weak = Ui::MakeWeak(this);
const auto history = _history;
const auto done = [=](const MTPUpdates &result, mtpRequestId requestId) {
const auto done = [=](mtpRequestId requestId) {
crl::guard(weak, [=] {
if (requestId == _saveEditMsgRequestId) {
_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 (editDraft->saveRequestId == requestId) {
editDraft->saveRequestId = 0;
@ -3687,12 +3687,11 @@ void HistoryWidget::saveEditMsg() {
if (requestId == _saveEditMsgRequestId) {
_saveEditMsgRequestId = 0;
}
const auto &err = error.type();
if (ranges::contains(Api::kDefaultEditMessagesErrors, err)) {
if (ranges::contains(Api::kDefaultEditMessagesErrors, 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();
} else if (err == u"MESSAGE_EMPTY"_q) {
} else if (error == u"MESSAGE_EMPTY"_q) {
_field->selectAll();
_field->setFocus();
} else {

View file

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

View file

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