mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Replaced observable in Lang::CloudManager with rpl.
This commit is contained in:
parent
aad38c2809
commit
daa14466e5
6 changed files with 33 additions and 24 deletions
|
@ -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>());
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue