From daa14466e5542845090c215eeaff8c99787df110 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Tue, 25 May 2021 17:12:10 +0300 Subject: [PATCH] Replaced observable in Lang::CloudManager with rpl. --- Telegram/SourceFiles/boxes/language_box.cpp | 14 +++++++++----- .../SourceFiles/chat_helpers/emoji_keywords.cpp | 3 +-- Telegram/SourceFiles/intro/intro_widget.cpp | 5 +++-- Telegram/SourceFiles/intro/intro_widget.h | 3 +-- .../SourceFiles/lang/lang_cloud_manager.cpp | 17 +++++++++++++---- Telegram/SourceFiles/lang/lang_cloud_manager.h | 15 ++++++--------- 6 files changed, 33 insertions(+), 24 deletions(-) diff --git a/Telegram/SourceFiles/boxes/language_box.cpp b/Telegram/SourceFiles/boxes/language_box.cpp index d42145837..e7917c763 100644 --- a/Telegram/SourceFiles/boxes/language_box.cpp +++ b/Telegram/SourceFiles/boxes/language_box.cpp @@ -1166,15 +1166,19 @@ base::binary_guard LanguageBox::Show() { if (manager.languageList().empty()) { auto guard = std::make_shared( result.make_guard()); - auto alive = std::make_shared>( - std::make_unique()); - **alive = manager.languageListChanged().add_subscription([=] { + auto lifetime = std::make_shared(); + manager.languageListChanged( + ) | rpl::take( + 1 + ) | rpl::start_with_next([=]() mutable { const auto show = guard->alive(); - *alive = nullptr; + if (lifetime) { + base::take(lifetime)->destroy(); + } if (show) { Ui::show(Box()); } - }); + }, *lifetime); } else { Ui::show(Box()); } diff --git a/Telegram/SourceFiles/chat_helpers/emoji_keywords.cpp b/Telegram/SourceFiles/chat_helpers/emoji_keywords.cpp index 692535903..565754665 100644 --- a/Telegram/SourceFiles/chat_helpers/emoji_keywords.cpp +++ b/Telegram/SourceFiles/chat_helpers/emoji_keywords.cpp @@ -529,8 +529,7 @@ void EmojiKeywords::apiChanged(ApiWrap *api) { _api = api; if (_api) { crl::on_main(&_api->session(), crl::guard(&_guard, [=] { - base::ObservableViewer( - Lang::CurrentCloudManager().firstLanguageSuggestion() + Lang::CurrentCloudManager().firstLanguageSuggestion( ) | rpl::filter([=] { // Refresh with the suggested language if we already were asked. return !_data.empty(); diff --git a/Telegram/SourceFiles/intro/intro_widget.cpp b/Telegram/SourceFiles/intro/intro_widget.cpp index 8e262f492..34f7b0a3c 100644 --- a/Telegram/SourceFiles/intro/intro_widget.cpp +++ b/Telegram/SourceFiles/intro/intro_widget.cpp @@ -107,9 +107,10 @@ Widget::Widget( fixOrder(); - subscribe(Lang::CurrentCloudManager().firstLanguageSuggestion(), [=] { + Lang::CurrentCloudManager().firstLanguageSuggestion( + ) | rpl::start_with_next([=] { createLanguageLink(); - }); + }, lifetime()); _account->mtpUpdates( ) | rpl::start_with_next([=](const MTPUpdates &updates) { diff --git a/Telegram/SourceFiles/intro/intro_widget.h b/Telegram/SourceFiles/intro/intro_widget.h index 5430d2598..cc031d165 100644 --- a/Telegram/SourceFiles/intro/intro_widget.h +++ b/Telegram/SourceFiles/intro/intro_widget.h @@ -87,8 +87,7 @@ enum class EnterPoint : uchar { class Widget : public Ui::RpWidget , private Media::Player::FloatDelegate - , private Media::Player::FloatSectionDelegate - , private base::Subscriber { + , private Media::Player::FloatSectionDelegate { public: Widget( QWidget *parent, diff --git a/Telegram/SourceFiles/lang/lang_cloud_manager.cpp b/Telegram/SourceFiles/lang/lang_cloud_manager.cpp index 459c5cf58..2102b60dc 100644 --- a/Telegram/SourceFiles/lang/lang_cloud_manager.cpp +++ b/Telegram/SourceFiles/lang/lang_cloud_manager.cpp @@ -182,6 +182,14 @@ Pack CloudManager::packTypeFromId(const QString &id) const { return Pack::None; } +rpl::producer<> CloudManager::languageListChanged() const { + return _languageListChanged.events(); +} + +rpl::producer<> CloudManager::firstLanguageSuggestion() const { + return _firstLanguageSuggestion.events(); +} + void CloudManager::requestLangPackDifference(const QString &langId) { Expects(!langId.isEmpty()); @@ -251,7 +259,7 @@ void CloudManager::setSuggestedLanguage(const QString &langCode) { if (!_languageWasSuggested) { _languageWasSuggested = true; - _firstLanguageSuggestion.notify(); + _firstLanguageSuggestion.fire({}); if (Core::App().offerLegacyLangPackSwitch() && _langpack.id().isEmpty() @@ -311,7 +319,7 @@ void CloudManager::requestLanguageList() { } if (_languages != languages) { _languages = languages; - _languagesChanged.notify(); + _languageListChanged.fire({}); } _languagesRequestId = 0; }).fail([=](const MTP::Error &error) { @@ -324,9 +332,10 @@ void CloudManager::offerSwitchLangPack() { Expects(_offerSwitchToId != DefaultLanguageId()); if (!showOfferSwitchBox()) { - subscribe(languageListChanged(), [this] { + languageListChanged( + ) | rpl::start_with_next([=] { showOfferSwitchBox(); - }); + }, _lifetime); requestLanguageList(); } } diff --git a/Telegram/SourceFiles/lang/lang_cloud_manager.h b/Telegram/SourceFiles/lang/lang_cloud_manager.h index d8b53deb8..4d1a10097 100644 --- a/Telegram/SourceFiles/lang/lang_cloud_manager.h +++ b/Telegram/SourceFiles/lang/lang_cloud_manager.h @@ -22,7 +22,7 @@ struct Language; Language ParseLanguage(const MTPLangPackLanguage &data); -class CloudManager : public base::has_weak_ptr, private base::Subscriber { +class CloudManager : public base::has_weak_ptr { public: explicit CloudManager(Instance &langpack); @@ -32,9 +32,8 @@ public: const Languages &languageList() const { return _languages; } - base::Observable &languageListChanged() { - return _languagesChanged; - } + [[nodiscard]] rpl::producer<> languageListChanged() const; + [[nodiscard]] rpl::producer<> firstLanguageSuggestion() const; void requestLangPackDifference(const QString &langId); void applyLangPackDifference(const MTPLangPackDifference &difference); void setCurrentVersions(int version, int baseVersion); @@ -48,9 +47,6 @@ public: QString suggestedLanguage() const { return _suggestedLanguage; } - base::Observable &firstLanguageSuggestion() { - return _firstLanguageSuggestion; - } private: mtpRequestId &packRequestId(Pack pack); @@ -78,7 +74,6 @@ private: std::optional _api; Instance &_langpack; Languages _languages; - base::Observable _languagesChanged; mtpRequestId _langPackRequestId = 0; mtpRequestId _langPackBaseRequestId = 0; mtpRequestId _languagesRequestId = 0; @@ -88,7 +83,6 @@ private: QString _suggestedLanguage; bool _languageWasSuggested = false; - base::Observable _firstLanguageSuggestion; mtpRequestId _switchingToLanguageRequest = 0; QString _switchingToLanguageId; @@ -96,6 +90,9 @@ private: mtpRequestId _getKeysForSwitchRequestId = 0; + rpl::event_stream<> _languageListChanged; + rpl::event_stream<> _firstLanguageSuggestion; + rpl::lifetime _lifetime; };