mirror of
https://github.com/telegramdesktop/tdesktop
synced 2025-03-25 04:38:23 +00:00
Replaced observable in Lang::CloudManager with rpl.
This commit is contained in:
parent
aad38c2809
commit
daa14466e5
@ -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>());
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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) {
|
||||
|
@ -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,
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user