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()) {
auto guard = std::make_shared<base::binary_guard>(
result.make_guard());
auto alive = std::make_shared<std::unique_ptr<base::Subscription>>(
std::make_unique<base::Subscription>());
**alive = manager.languageListChanged().add_subscription([=] {
auto lifetime = std::make_shared<rpl::lifetime>();
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<LanguageBox>());
}
});
}, *lifetime);
} else {
Ui::show(Box<LanguageBox>());
}

View file

@ -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();

View file

@ -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) {

View file

@ -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,

View file

@ -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();
}
}

View file

@ -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<void> &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<void> &firstLanguageSuggestion() {
return _firstLanguageSuggestion;
}
private:
mtpRequestId &packRequestId(Pack pack);
@ -78,7 +74,6 @@ private:
std::optional<MTP::Sender> _api;
Instance &_langpack;
Languages _languages;
base::Observable<void> _languagesChanged;
mtpRequestId _langPackRequestId = 0;
mtpRequestId _langPackBaseRequestId = 0;
mtpRequestId _languagesRequestId = 0;
@ -88,7 +83,6 @@ private:
QString _suggestedLanguage;
bool _languageWasSuggested = false;
base::Observable<void> _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;
};