diff --git a/Telegram/SourceFiles/support/support_templates.cpp b/Telegram/SourceFiles/support/support_templates.cpp index fdade2c6d..f63f08bcc 100644 --- a/Telegram/SourceFiles/support/support_templates.cpp +++ b/Telegram/SourceFiles/support/support_templates.cpp @@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "support/support_templates.h" +#include "ui/toast/toast.h" #include "data/data_session.h" #include "auth_session.h" @@ -447,10 +448,21 @@ struct Templates::Updates { }; Templates::Templates(not_null session) : _session(session) { - reload(); + load(); } void Templates::reload() { + _reloadToastSubscription = errors( + ) | rpl::start_with_next([=](QStringList errors) { + Ui::Toast::Show(errors.isEmpty() + ? "Templates reloaded!" + : ("Errors:\n\n" + errors.join("\n\n"))); + }); + + load(); +} + +void Templates::load() { if (_reloadAfterRead) { return; } else if (_reading.alive() || _updates) { @@ -465,23 +477,23 @@ void Templates::reload() { result.index = ComputeIndex(result.result); crl::on_main([ =, - result = std::move(result), - guard = std::move(guard) + result = std::move(result), + guard = std::move(guard) ]() mutable { - if (!guard.alive()) { - return; + if (!guard.alive()) { + return; + } + setData(std::move(result.result)); + _index = std::move(result.index); + _errors.fire(std::move(result.errors)); + crl::on_main(this, [=] { + if (base::take(_reloadAfterRead)) { + reload(); + } else { + update(); } - setData(std::move(result.result)); - _index = std::move(result.index); - _errors.fire(std::move(result.errors)); - crl::on_main(this, [=] { - if (base::take(_reloadAfterRead)) { - reload(); - } else { - update(); - } - }); }); + }); }); } diff --git a/Telegram/SourceFiles/support/support_templates.h b/Telegram/SourceFiles/support/support_templates.h index bddada984..846885e35 100644 --- a/Telegram/SourceFiles/support/support_templates.h +++ b/Telegram/SourceFiles/support/support_templates.h @@ -68,6 +68,7 @@ public: private: struct Updates; + void load(); void update(); void ensureUpdatesCreated(); void updateRequestFinished(QNetworkReply *reply); @@ -81,6 +82,7 @@ private: rpl::event_stream _errors; base::binary_guard _reading; bool _reloadAfterRead = false; + rpl::lifetime _reloadToastSubscription; int _maxKeyLength = 0; diff --git a/Telegram/SourceFiles/window/window_main_menu.cpp b/Telegram/SourceFiles/window/window_main_menu.cpp index 415a0d987..eb86f4d00 100644 --- a/Telegram/SourceFiles/window/window_main_menu.cpp +++ b/Telegram/SourceFiles/window/window_main_menu.cpp @@ -11,7 +11,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/widgets/buttons.h" #include "ui/widgets/labels.h" #include "ui/widgets/menu.h" -#include "ui/toast/toast.h" #include "ui/special_buttons.h" #include "ui/empty_userpic.h" #include "mainwindow.h" @@ -212,14 +211,7 @@ void MainMenu::refreshMenu() { (*fix)->setCheckable(true); (*fix)->setChecked(Auth().settings().supportFixChatsOrder()); - const auto subscription = Ui::AttachAsChild(_menu, rpl::lifetime()); _menu->addAction(qsl("Reload templates"), [=] { - *subscription = Auth().supportTemplates().errors( - ) | rpl::start_with_next([=](QStringList errors) { - Ui::Toast::Show(errors.isEmpty() - ? "Templates reloaded!" - : ("Errors:\n\n" + errors.join("\n\n"))); - }); Auth().supportTemplates().reload(); }, &st::mainMenuReload, &st::mainMenuReloadOver); }