From d51fd7b3ad2b54143ef0229c20a2b0e68248049d Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 30 May 2017 19:58:13 +0300 Subject: [PATCH] Update intro change language link. Also now MTP::Sender isn't bound to MTP::Instance, because Intro Widget is MTP::Sender, but Intro::PhoneWidget destroys current MTP::Instance. --- Telegram/SourceFiles/intro/introwidget.cpp | 8 ++++--- .../SourceFiles/lang/lang_cloud_manager.cpp | 2 +- Telegram/SourceFiles/lang/lang_keys.cpp | 2 +- Telegram/SourceFiles/mtproto/mtp_instance.cpp | 2 +- Telegram/SourceFiles/mtproto/sender.h | 22 +++++++------------ 5 files changed, 16 insertions(+), 20 deletions(-) diff --git a/Telegram/SourceFiles/intro/introwidget.cpp b/Telegram/SourceFiles/intro/introwidget.cpp index 0de491d74e..18f50e6a4d 100644 --- a/Telegram/SourceFiles/intro/introwidget.cpp +++ b/Telegram/SourceFiles/intro/introwidget.cpp @@ -98,6 +98,8 @@ Widget::Widget(QWidget *parent) : TWidget(parent) } void Widget::refreshLang() { + _changeLanguage.destroy(); + createLanguageLink(); InvokeQueued(this, [this] { updateControlsGeometry(); }); } @@ -118,7 +120,9 @@ void Widget::createLanguageLink() { auto currentId = Lang::Current().id(); auto defaultId = Lang::DefaultLanguageId(); auto suggestedId = Lang::CurrentCloudManager().suggestedLanguage(); - if (!suggestedId.isEmpty() && suggestedId != currentId) { + if (!currentId.isEmpty() && currentId != defaultId) { + createLink(Lang::GetOriginalValue(lng_switch_to_this), defaultId); + } else if (!suggestedId.isEmpty() && suggestedId != currentId) { request(MTPlangpack_GetStrings(MTP_string(suggestedId), MTP_vector(1, MTP_string("lng_switch_to_this")))).done([this, suggestedId, createLink](const MTPVector &result) { auto strings = Lang::Instance::ParseStrings(result); auto it = strings.find(lng_switch_to_this); @@ -126,8 +130,6 @@ void Widget::createLanguageLink() { createLink(it->second, suggestedId); } }).send(); - } else if (!currentId.isEmpty() && currentId != defaultId) { - createLink(Lang::GetOriginalValue(lng_switch_to_this), defaultId); } } diff --git a/Telegram/SourceFiles/lang/lang_cloud_manager.cpp b/Telegram/SourceFiles/lang/lang_cloud_manager.cpp index 8410ba5bfc..72782ed88f 100644 --- a/Telegram/SourceFiles/lang/lang_cloud_manager.cpp +++ b/Telegram/SourceFiles/lang/lang_cloud_manager.cpp @@ -30,7 +30,7 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org namespace Lang { -CloudManager::CloudManager(Instance &langpack, gsl::not_null mtproto) : MTP::Sender(mtproto) +CloudManager::CloudManager(Instance &langpack, gsl::not_null mtproto) : MTP::Sender() , _langpack(langpack) { requestLangPackDifference(); } diff --git a/Telegram/SourceFiles/lang/lang_keys.cpp b/Telegram/SourceFiles/lang/lang_keys.cpp index 7e73d65107..33d5001085 100644 --- a/Telegram/SourceFiles/lang/lang_keys.cpp +++ b/Telegram/SourceFiles/lang/lang_keys.cpp @@ -38,7 +38,7 @@ QString langNewVersionText() { bool langFirstNameGoesSecond() { auto fullname = lang(lng_full_name__tagged); - for (auto begin = fullname.constData(), ch = begin, end = ch + fullname.size(); ch != end;) { + for (auto begin = fullname.constData(), ch = begin, end = ch + fullname.size(); ch != end; ++ch) { if (*ch == TextCommand) { if (ch + 3 < end && (ch + 1)->unicode() == TextCommandLangTag && *(ch + 3) == TextCommand) { if ((ch + 2)->unicode() == 0x0020 + lt_last_name) { diff --git a/Telegram/SourceFiles/mtproto/mtp_instance.cpp b/Telegram/SourceFiles/mtproto/mtp_instance.cpp index 95fa8ad9ba..5f7e95f55e 100644 --- a/Telegram/SourceFiles/mtproto/mtp_instance.cpp +++ b/Telegram/SourceFiles/mtproto/mtp_instance.cpp @@ -186,7 +186,7 @@ private: }; -Instance::Private::Private(Instance *instance, DcOptions *options, Instance::Mode mode) : Sender(instance), _instance(instance) +Instance::Private::Private(Instance *instance, DcOptions *options, Instance::Mode mode) : Sender(), _instance(instance) , _dcOptions(options) , _mode(mode) { } diff --git a/Telegram/SourceFiles/mtproto/sender.h b/Telegram/SourceFiles/mtproto/sender.h index 14f9e0f452..0334cabea4 100644 --- a/Telegram/SourceFiles/mtproto/sender.h +++ b/Telegram/SourceFiles/mtproto/sender.h @@ -186,9 +186,6 @@ class Sender { gsl::not_null sender() const noexcept { return _sender; } - gsl::not_null instance() const noexcept { - return _sender->_instance; - } void registerRequest(mtpRequestId requestId) { _sender->requestRegister(requestId); } @@ -205,7 +202,7 @@ class Sender { }; public: - Sender(gsl::not_null instance = MainInstance()) noexcept : _instance(instance) { + Sender() noexcept { } template @@ -255,7 +252,7 @@ public: } mtpRequestId send() { - auto id = instance()->send(_request, takeOnDone(), takeOnFail(), takeDcId(), takeCanWait(), takeAfter()); + auto id = MainInstance()->send(_request, takeOnDone(), takeOnFail(), takeDcId(), takeCanWait(), takeAfter()); registerRequest(id); return id; } @@ -288,7 +285,7 @@ public: SentRequestWrap request(mtpRequestId requestId) noexcept WARN_UNUSED_RESULT; void requestSendDelayed() { - _instance->sendAnything(); + MainInstance()->sendAnything(); } void requestCancellingDiscard() { for (auto &request : _requests) { @@ -296,30 +293,28 @@ public: } } gsl::not_null requestMTP() const { - return _instance; + return MainInstance(); } private: class RequestWrap { public: - RequestWrap(Instance *instance, mtpRequestId requestId) noexcept : _instance(instance), _id(requestId) { + RequestWrap(Instance *instance, mtpRequestId requestId) noexcept : _id(requestId) { } mtpRequestId id() const noexcept { return _id; } void handled() const noexcept { - _instance = nullptr; } ~RequestWrap() { - if (_instance) { - _instance->cancel(_id); + if (auto instance = MainInstance()) { + instance->cancel(_id); } } private: - mutable Instance *_instance = nullptr; mtpRequestId _id = 0; }; @@ -353,7 +348,7 @@ private: friend class SentRequestWrap; void requestRegister(mtpRequestId requestId) { - _requests.emplace(_instance, requestId); + _requests.emplace(MainInstance(), requestId); } void requestHandled(mtpRequestId requestId) { auto it = _requests.find(requestId); @@ -369,7 +364,6 @@ private: } } - gsl::not_null _instance; std::set _requests; // Better to use flatmap. };