mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2026-07-25 06:54:43 +00:00
Added ability to get value of phrase for specific language.
This commit is contained in:
@@ -620,6 +620,62 @@ void CloudManager::changeIdAndReInitConnection(const Language &data) {
|
||||
}
|
||||
}
|
||||
|
||||
void CloudManager::getValueForLang(
|
||||
const QString &key,
|
||||
const QString &langId,
|
||||
Fn<void(const QString &)> callback) {
|
||||
const auto requestKey = langId + ':' + key;
|
||||
auto &request = _getValueForLangRequests[requestKey];
|
||||
request.callback = std::move(callback);
|
||||
if (!_api) {
|
||||
request.requestId = -1;
|
||||
return;
|
||||
}
|
||||
_api->request(base::take(request.requestId)).cancel();
|
||||
request.requestId = _api->request(
|
||||
MTPlangpack_GetStrings(
|
||||
MTP_string(Lang::CloudLangPackName()),
|
||||
MTP_string(langId),
|
||||
MTP_vector<MTPstring>(1, MTP_string(key))
|
||||
)).done([=](const MTPVector<MTPLangPackString> &result) {
|
||||
const auto it = _getValueForLangRequests.find(requestKey);
|
||||
if (it != _getValueForLangRequests.end()) {
|
||||
const auto onstack = it->second.callback;
|
||||
_getValueForLangRequests.erase(it);
|
||||
const auto values = Instance::ParseStrings(result);
|
||||
for (const auto &[k, v] : values) {
|
||||
onstack(v);
|
||||
return;
|
||||
}
|
||||
onstack(QString());
|
||||
}
|
||||
}).fail([=] {
|
||||
const auto it = _getValueForLangRequests.find(requestKey);
|
||||
if (it != _getValueForLangRequests.end()) {
|
||||
const auto onstack = it->second.callback;
|
||||
_getValueForLangRequests.erase(it);
|
||||
onstack(QString());
|
||||
}
|
||||
}).send();
|
||||
}
|
||||
|
||||
void CloudManager::resendPendingValueRequests() {
|
||||
if (!_api) {
|
||||
return;
|
||||
}
|
||||
for (const auto &[requestKey, request] : _getValueForLangRequests) {
|
||||
if (request.requestId == -1) {
|
||||
const auto colonPos = requestKey.indexOf(':');
|
||||
if (colonPos > 0) {
|
||||
getValueForLang(
|
||||
requestKey.mid(colonPos + 1),
|
||||
requestKey.left(colonPos),
|
||||
request.callback);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CloudManager::resendRequests() {
|
||||
if (packRequestId(Pack::Base)) {
|
||||
requestLangPackDifference(Pack::Base);
|
||||
@@ -633,6 +689,7 @@ void CloudManager::resendRequests() {
|
||||
if (_switchingToLanguageRequest) {
|
||||
sendSwitchingToLanguageRequest();
|
||||
}
|
||||
resendPendingValueRequests();
|
||||
}
|
||||
|
||||
CloudManager &CurrentCloudManager() {
|
||||
|
||||
@@ -48,6 +48,11 @@ public:
|
||||
return _suggestedLanguage;
|
||||
}
|
||||
|
||||
void getValueForLang(
|
||||
const QString &key,
|
||||
const QString &langId,
|
||||
Fn<void(const QString &)> callback);
|
||||
|
||||
private:
|
||||
mtpRequestId &packRequestId(Pack pack);
|
||||
mtpRequestId packRequestId(Pack pack) const;
|
||||
@@ -69,6 +74,7 @@ private:
|
||||
void changeIdAndReInitConnection(const Language &data);
|
||||
|
||||
void sendSwitchingToLanguageRequest();
|
||||
void resendPendingValueRequests();
|
||||
void resendRequests();
|
||||
|
||||
std::optional<MTP::Sender> _api;
|
||||
@@ -90,6 +96,12 @@ private:
|
||||
|
||||
mtpRequestId _getKeysForSwitchRequestId = 0;
|
||||
|
||||
struct ValueRequest {
|
||||
mtpRequestId requestId = 0;
|
||||
Fn<void(const QString &)> callback;
|
||||
};
|
||||
base::flat_map<QString, ValueRequest> _getValueForLangRequests;
|
||||
|
||||
rpl::event_stream<> _languageListChanged;
|
||||
rpl::event_stream<> _firstLanguageSuggestion;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user