Replaced observable in Lang::CloudManager with rpl.

This commit is contained in:
23rd 2021-05-25 17:12:10 +03:00
parent aad38c2809
commit daa14466e5
6 changed files with 33 additions and 24 deletions

View file

@ -1166,15 +1166,19 @@ base::binary_guard LanguageBox::Show() {
if (manager.languageList().empty()) { if (manager.languageList().empty()) {
auto guard = std::make_shared<base::binary_guard>( auto guard = std::make_shared<base::binary_guard>(
result.make_guard()); result.make_guard());
auto alive = std::make_shared<std::unique_ptr<base::Subscription>>( auto lifetime = std::make_shared<rpl::lifetime>();
std::make_unique<base::Subscription>()); manager.languageListChanged(
**alive = manager.languageListChanged().add_subscription([=] { ) | rpl::take(
1
) | rpl::start_with_next([=]() mutable {
const auto show = guard->alive(); const auto show = guard->alive();
*alive = nullptr; if (lifetime) {
base::take(lifetime)->destroy();
}
if (show) { if (show) {
Ui::show(Box<LanguageBox>()); Ui::show(Box<LanguageBox>());
} }
}); }, *lifetime);
} else { } else {
Ui::show(Box<LanguageBox>()); Ui::show(Box<LanguageBox>());
} }

View file

@ -529,8 +529,7 @@ void EmojiKeywords::apiChanged(ApiWrap *api) {
_api = api; _api = api;
if (_api) { if (_api) {
crl::on_main(&_api->session(), crl::guard(&_guard, [=] { crl::on_main(&_api->session(), crl::guard(&_guard, [=] {
base::ObservableViewer( Lang::CurrentCloudManager().firstLanguageSuggestion(
Lang::CurrentCloudManager().firstLanguageSuggestion()
) | rpl::filter([=] { ) | rpl::filter([=] {
// Refresh with the suggested language if we already were asked. // Refresh with the suggested language if we already were asked.
return !_data.empty(); return !_data.empty();

View file

@ -107,9 +107,10 @@ Widget::Widget(
fixOrder(); fixOrder();
subscribe(Lang::CurrentCloudManager().firstLanguageSuggestion(), [=] { Lang::CurrentCloudManager().firstLanguageSuggestion(
) | rpl::start_with_next([=] {
createLanguageLink(); createLanguageLink();
}); }, lifetime());
_account->mtpUpdates( _account->mtpUpdates(
) | rpl::start_with_next([=](const MTPUpdates &updates) { ) | rpl::start_with_next([=](const MTPUpdates &updates) {

View file

@ -87,8 +87,7 @@ enum class EnterPoint : uchar {
class Widget class Widget
: public Ui::RpWidget : public Ui::RpWidget
, private Media::Player::FloatDelegate , private Media::Player::FloatDelegate
, private Media::Player::FloatSectionDelegate , private Media::Player::FloatSectionDelegate {
, private base::Subscriber {
public: public:
Widget( Widget(
QWidget *parent, QWidget *parent,

View file

@ -182,6 +182,14 @@ Pack CloudManager::packTypeFromId(const QString &id) const {
return Pack::None; 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) { void CloudManager::requestLangPackDifference(const QString &langId) {
Expects(!langId.isEmpty()); Expects(!langId.isEmpty());
@ -251,7 +259,7 @@ void CloudManager::setSuggestedLanguage(const QString &langCode) {
if (!_languageWasSuggested) { if (!_languageWasSuggested) {
_languageWasSuggested = true; _languageWasSuggested = true;
_firstLanguageSuggestion.notify(); _firstLanguageSuggestion.fire({});
if (Core::App().offerLegacyLangPackSwitch() if (Core::App().offerLegacyLangPackSwitch()
&& _langpack.id().isEmpty() && _langpack.id().isEmpty()
@ -311,7 +319,7 @@ void CloudManager::requestLanguageList() {
} }
if (_languages != languages) { if (_languages != languages) {
_languages = languages; _languages = languages;
_languagesChanged.notify(); _languageListChanged.fire({});
} }
_languagesRequestId = 0; _languagesRequestId = 0;
}).fail([=](const MTP::Error &error) { }).fail([=](const MTP::Error &error) {
@ -324,9 +332,10 @@ void CloudManager::offerSwitchLangPack() {
Expects(_offerSwitchToId != DefaultLanguageId()); Expects(_offerSwitchToId != DefaultLanguageId());
if (!showOfferSwitchBox()) { if (!showOfferSwitchBox()) {
subscribe(languageListChanged(), [this] { languageListChanged(
) | rpl::start_with_next([=] {
showOfferSwitchBox(); showOfferSwitchBox();
}); }, _lifetime);
requestLanguageList(); requestLanguageList();
} }
} }

View file

@ -22,7 +22,7 @@ struct Language;
Language ParseLanguage(const MTPLangPackLanguage &data); Language ParseLanguage(const MTPLangPackLanguage &data);
class CloudManager : public base::has_weak_ptr, private base::Subscriber { class CloudManager : public base::has_weak_ptr {
public: public:
explicit CloudManager(Instance &langpack); explicit CloudManager(Instance &langpack);
@ -32,9 +32,8 @@ public:
const Languages &languageList() const { const Languages &languageList() const {
return _languages; return _languages;
} }
base::Observable<void> &languageListChanged() { [[nodiscard]] rpl::producer<> languageListChanged() const;
return _languagesChanged; [[nodiscard]] rpl::producer<> firstLanguageSuggestion() const;
}
void requestLangPackDifference(const QString &langId); void requestLangPackDifference(const QString &langId);
void applyLangPackDifference(const MTPLangPackDifference &difference); void applyLangPackDifference(const MTPLangPackDifference &difference);
void setCurrentVersions(int version, int baseVersion); void setCurrentVersions(int version, int baseVersion);
@ -48,9 +47,6 @@ public:
QString suggestedLanguage() const { QString suggestedLanguage() const {
return _suggestedLanguage; return _suggestedLanguage;
} }
base::Observable<void> &firstLanguageSuggestion() {
return _firstLanguageSuggestion;
}
private: private:
mtpRequestId &packRequestId(Pack pack); mtpRequestId &packRequestId(Pack pack);
@ -78,7 +74,6 @@ private:
std::optional<MTP::Sender> _api; std::optional<MTP::Sender> _api;
Instance &_langpack; Instance &_langpack;
Languages _languages; Languages _languages;
base::Observable<void> _languagesChanged;
mtpRequestId _langPackRequestId = 0; mtpRequestId _langPackRequestId = 0;
mtpRequestId _langPackBaseRequestId = 0; mtpRequestId _langPackBaseRequestId = 0;
mtpRequestId _languagesRequestId = 0; mtpRequestId _languagesRequestId = 0;
@ -88,7 +83,6 @@ private:
QString _suggestedLanguage; QString _suggestedLanguage;
bool _languageWasSuggested = false; bool _languageWasSuggested = false;
base::Observable<void> _firstLanguageSuggestion;
mtpRequestId _switchingToLanguageRequest = 0; mtpRequestId _switchingToLanguageRequest = 0;
QString _switchingToLanguageId; QString _switchingToLanguageId;
@ -96,6 +90,9 @@ private:
mtpRequestId _getKeysForSwitchRequestId = 0; mtpRequestId _getKeysForSwitchRequestId = 0;
rpl::event_stream<> _languageListChanged;
rpl::event_stream<> _firstLanguageSuggestion;
rpl::lifetime _lifetime; rpl::lifetime _lifetime;
}; };