From b02b6907475e1b9a7b1b5ce96e92d07f19c07103 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sat, 30 May 2020 10:10:54 +0300 Subject: [PATCH] Moved HistoryWidget::saveEditMsgDone/Fail to lambdas. --- Telegram/SourceFiles/api/api_editing.h | 6 + .../SourceFiles/boxes/edit_caption_box.cpp | 8 +- .../SourceFiles/history/history_widget.cpp | 108 ++++++++---------- Telegram/SourceFiles/history/history_widget.h | 2 - 4 files changed, 54 insertions(+), 70 deletions(-) diff --git a/Telegram/SourceFiles/api/api_editing.h b/Telegram/SourceFiles/api/api_editing.h index e4c01449d9..b5ec23b92e 100644 --- a/Telegram/SourceFiles/api/api_editing.h +++ b/Telegram/SourceFiles/api/api_editing.h @@ -14,6 +14,12 @@ namespace Api { struct SendOptions; +const auto kDefaultEditMessagesErrors = { + u"MESSAGE_ID_INVALID"_q, + u"CHAT_ADMIN_REQUIRED"_q, + u"MESSAGE_EDIT_TIME_EXPIRED"_q, +}; + void RescheduleMessage( not_null item, SendOptions options); diff --git a/Telegram/SourceFiles/boxes/edit_caption_box.cpp b/Telegram/SourceFiles/boxes/edit_caption_box.cpp index 4284789d4a..755805c861 100644 --- a/Telegram/SourceFiles/boxes/edit_caption_box.cpp +++ b/Telegram/SourceFiles/boxes/edit_caption_box.cpp @@ -953,15 +953,9 @@ void EditCaptionBox::save() { }); const auto fail = crl::guard(this, [=](const RPCError &error) { - const auto defaultErrors = { - u"MESSAGE_ID_INVALID"_q, - u"CHAT_ADMIN_REQUIRED"_q, - u"MESSAGE_EDIT_TIME_EXPIRED"_q, - }; - _saveRequestId = 0; const auto &type = error.type(); - if (ranges::contains(defaultErrors, type)) { + if (ranges::contains(Api::kDefaultEditMessagesErrors, type)) { _error = tr::lng_edit_error(tr::now); update(); } else if (type == u"MESSAGE_NOT_MODIFIED"_q) { diff --git a/Telegram/SourceFiles/history/history_widget.cpp b/Telegram/SourceFiles/history/history_widget.cpp index d6edcd71af..5997ce5dd7 100644 --- a/Telegram/SourceFiles/history/history_widget.cpp +++ b/Telegram/SourceFiles/history/history_widget.cpp @@ -2988,8 +2988,9 @@ void HistoryWidget::saveEditMsg() { TextUtilities::ConvertTextTagsToEntities(textWithTags.tags) }; TextUtilities::PrepareForSending(left, prepareFlags); + const auto item = session().data().message(_channel, _editMsgId); if (!TextUtilities::CutPart(sending, left, MaxMessageSize)) { - if (const auto item = session().data().message(_channel, _editMsgId)) { + if (item) { const auto suggestModerateActions = false; Ui::show(Box(item, suggestModerateActions)); } else { @@ -3002,70 +3003,55 @@ void HistoryWidget::saveEditMsg() { return; } - auto options = Api::SendOptions(); - options.removeWebPageId = (webPageId == CancelledWebPageId); - const auto weak = Ui::MakeWeak(this); const auto history = _history; + + const auto done = [=](const MTPUpdates &result, mtpRequestId requestId) { + crl::guard(weak, [=] { + if (requestId == _saveEditMsgRequestId) { + _saveEditMsgRequestId = 0; + cancelEdit(); + } + })(); + if (auto editDraft = history->editDraft()) { + if (editDraft->saveRequestId == requestId) { + history->clearEditDraft(); + history->session().local().writeDrafts(history); + } + } + }; + + const auto fail = [=](const RPCError &error, mtpRequestId requestId) { + if (const auto editDraft = history->editDraft()) { + if (editDraft->saveRequestId == requestId) { + editDraft->saveRequestId = 0; + } + } + crl::guard(weak, [=] { + if (requestId == _saveEditMsgRequestId) { + _saveEditMsgRequestId = 0; + } + const auto &err = error.type(); + if (ranges::contains(Api::kDefaultEditMessagesErrors, err)) { + Ui::show(Box(tr::lng_edit_error(tr::now))); + } else if (err == u"MESSAGE_NOT_MODIFIED"_q) { + cancelEdit(); + } else if (err == u"MESSAGE_EMPTY"_q) { + _field->selectAll(); + _field->setFocus(); + } else { + Ui::show(Box(tr::lng_edit_error(tr::now))); + } + update(); + })(); + }; + _saveEditMsgRequestId = Api::EditTextMessage( - session().data().message(_channel, _editMsgId), + item, sending, - options, - [history, weak](const MTPUpdates &result, mtpRequestId requestId) { - SaveEditMsgDone(history, result, requestId); - if (const auto strong = weak.data()) { - if (requestId == strong->_saveEditMsgRequestId) { - strong->_saveEditMsgRequestId = 0; - strong->cancelEdit(); - } - } - }, - [history, weak](const RPCError &error, mtpRequestId requestId) { - SaveEditMsgFail(history, error, requestId); - if (const auto strong = weak.data()) { - if (requestId == strong->_saveEditMsgRequestId) { - strong->_saveEditMsgRequestId = 0; - } - const auto &err = error.type(); - if (err == qstr("MESSAGE_ID_INVALID") - || err == qstr("CHAT_ADMIN_REQUIRED") - || err == qstr("MESSAGE_EDIT_TIME_EXPIRED")) { - Ui::show(Box(tr::lng_edit_error(tr::now))); - } else if (err == qstr("MESSAGE_NOT_MODIFIED")) { - strong->cancelEdit(); - } else if (err == qstr("MESSAGE_EMPTY")) { - strong->_field->selectAll(); - strong->_field->setFocus(); - } else { - Ui::show(Box(tr::lng_edit_error(tr::now))); - } - strong->update(); - } - }); -} - -void HistoryWidget::SaveEditMsgDone( - not_null history, - const MTPUpdates &updates, - mtpRequestId requestId) { - history->session().api().applyUpdates(updates); - if (auto editDraft = history->editDraft()) { - if (editDraft->saveRequestId == requestId) { - history->clearEditDraft(); - history->session().local().writeDrafts(history); - } - } -} - -void HistoryWidget::SaveEditMsgFail( - not_null history, - const RPCError &error, - mtpRequestId requestId) { - if (auto editDraft = history->editDraft()) { - if (editDraft->saveRequestId == requestId) { - editDraft->saveRequestId = 0; - } - } + { .removeWebPageId = (webPageId == CancelledWebPageId) }, + done, + fail); } void HistoryWidget::hideSelectorControlsAnimated() { diff --git a/Telegram/SourceFiles/history/history_widget.h b/Telegram/SourceFiles/history/history_widget.h index 5f7bd8b6ae..01d941d0cb 100644 --- a/Telegram/SourceFiles/history/history_widget.h +++ b/Telegram/SourceFiles/history/history_widget.h @@ -525,8 +525,6 @@ private: void createUnreadBarAndResize(); void saveEditMsg(); - static void SaveEditMsgDone(not_null history, const MTPUpdates &updates, mtpRequestId requestId); - static void SaveEditMsgFail(not_null history, const RPCError &error, mtpRequestId requestId); void checkPreview(); void requestPreview();