From 30220468583b04399f96d243f89326645748ce6a Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 31 Aug 2018 20:18:12 +0300 Subject: [PATCH] Add td_api::editCustomLanguageInfo. GitOrigin-RevId: df4919a0b4b781751be4f6eb60063ddd48560741 --- td/generate/scheme/td_api.tl | 3 +++ td/generate/scheme/td_api.tlo | Bin 133812 -> 133908 bytes td/telegram/LanguagePackManager.cpp | 36 +++++++++++++++++++++++++--- td/telegram/LanguagePackManager.h | 3 +++ td/telegram/Td.cpp | 14 +++++++++++ td/telegram/Td.h | 2 ++ td/telegram/cli.cpp | 10 ++++++++ 7 files changed, 65 insertions(+), 3 deletions(-) diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl index 05a98944..3f4a3e8a 100644 --- a/td/generate/scheme/td_api.tl +++ b/td/generate/scheme/td_api.tl @@ -3139,6 +3139,9 @@ getLanguagePackStrings language_code:string keys:vector = LanguagePackSt //@description Adds or changes a custom language to the used language pack @info Information about the language. Language code must start with 'X', consist only of English letters, digits and hyphens and be not longer than 64 characters @strings New language pack strings setCustomLanguage info:languageInfo strings:vector = Ok; +//@description Edits informatioan about a custom language @info New information about the custom language +editCustomLanguageInfo info:languageInfo = Ok; + //@description Sets new value for a string in a custom language in the used language pack @language_code The code of previously added custom language, must start with 'X' @new_string New language pack string setCustomLanguageString language_code:string new_string:languagePackString = Ok; diff --git a/td/generate/scheme/td_api.tlo b/td/generate/scheme/td_api.tlo index 2db87bff798659fc90a6865c3ee11c8ed3ea876e..7f0b6bc7f7caf5494174bf9e24485f719588a87b 100644 GIT binary patch delta 77 zcmV-T0J8tIl?arU2!ON!baeqPw{>*^10p4HLBx<2Wn^h|Lv?d>Z*5FrZfA92XJtul jW^Vv#zU|c6#u7{cm)-CIBalanguage_packs_.end()); LanguagePack *pack = pack_it->second.get(); auto &info = pack->language_infos_[language_code]; - info.name = language_name; - info.native_name = language_native_name; + info.name = std::move(language_name); + info.native_name = std::move(language_native_name); if (!pack->pack_kv_.empty()) { - pack->pack_kv_.set(language_code, PSLICE() << language_name << '\x00' << language_native_name); + pack->pack_kv_.set(language_code, PSLICE() << info.name << '\x00' << info.native_name); + } + + promise.set_value(Unit()); +} + +void LanguagePackManager::edit_custom_language_info(string language_code, string language_name, + string language_native_name, Promise &&promise) { + if (language_pack_.empty()) { + return promise.set_error(Status::Error(400, "Option \"language_pack\" needs to be set first")); + } + if (!check_language_code_name(language_code)) { + return promise.set_error(Status::Error(400, "Language code name must contain only letters and hyphen")); + } + if (!is_custom_language_code(language_code)) { + return promise.set_error(Status::Error(400, "Custom language code must begin with 'X'")); + } + + std::lock_guard packs_lock(database_->mutex_); + auto pack_it = database_->language_packs_.find(language_pack_); + CHECK(pack_it != database_->language_packs_.end()); + LanguagePack *pack = pack_it->second.get(); + auto language_info_it = pack->language_infos_.find(language_code); + if (language_info_it == pack->language_infos_.end()) { + return promise.set_error(Status::Error(400, "Custom language pack is not found")); + } + auto &info = language_info_it->second; + info.name = std::move(language_name); + info.native_name = std::move(language_native_name); + if (!pack->pack_kv_.empty()) { + pack->pack_kv_.set(language_code, PSLICE() << info.name << '\x00' << info.native_name); } promise.set_value(Unit()); diff --git a/td/telegram/LanguagePackManager.h b/td/telegram/LanguagePackManager.h index c42e3b50..2cf23fff 100644 --- a/td/telegram/LanguagePackManager.h +++ b/td/telegram/LanguagePackManager.h @@ -62,6 +62,9 @@ class LanguagePackManager : public NetQueryCallback { void set_custom_language(string language_code, string language_name, string language_native_name, vector> strings, Promise &&promise); + void edit_custom_language_info(string language_code, string language_name, string language_native_name, + Promise &&promise); + void set_custom_language_string(string language_code, tl_object_ptr str, Promise &&promise); diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index 1e30b62e..5edef61e 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -3268,6 +3268,7 @@ bool Td::is_preauthentication_request(int32 id) { case td_api::getLanguagePackInfo::ID: case td_api::getLanguagePackStrings::ID: case td_api::setCustomLanguage::ID: + case td_api::editCustomLanguageInfo::ID: case td_api::setCustomLanguageString::ID: case td_api::deleteLanguage::ID: case td_api::getOption::ID: @@ -6054,6 +6055,19 @@ void Td::on_request(uint64 id, td_api::setCustomLanguage &request) { std::move(promise)); } +void Td::on_request(uint64 id, td_api::editCustomLanguageInfo &request) { + CHECK_IS_USER(); + if (request.info_ == nullptr) { + return send_error_raw(id, 400, "Language info must not be empty"); + } + CLEAN_INPUT_STRING(request.info_->code_); + CLEAN_INPUT_STRING(request.info_->name_); + CLEAN_INPUT_STRING(request.info_->native_name_); + CREATE_OK_REQUEST_PROMISE(); + send_closure(language_pack_manager_, &LanguagePackManager::edit_custom_language_info, std::move(request.info_->code_), + std::move(request.info_->name_), std::move(request.info_->native_name_), std::move(promise)); +} + void Td::on_request(uint64 id, td_api::setCustomLanguageString &request) { CHECK_IS_USER(); CLEAN_INPUT_STRING(request.language_code_); diff --git a/td/telegram/Td.h b/td/telegram/Td.h index 0c992d26..3eb800f8 100644 --- a/td/telegram/Td.h +++ b/td/telegram/Td.h @@ -769,6 +769,8 @@ class Td final : public NetQueryCallback { void on_request(uint64 id, td_api::setCustomLanguage &request); + void on_request(uint64 id, td_api::editCustomLanguageInfo &request); + void on_request(uint64 id, td_api::setCustomLanguageString &request); void on_request(uint64 id, td_api::deleteLanguage &request); diff --git a/td/telegram/cli.cpp b/td/telegram/cli.cpp index c88e7a98..ef491a51 100644 --- a/td/telegram/cli.cpp +++ b/td/telegram/cli.cpp @@ -1790,6 +1790,16 @@ class CliClient final : public Actor { send_request(make_tl_object( make_tl_object(language_code, name, native_name, 3), std::move(strings))); + } else if (op == "ecli") { + string language_code; + string name; + string native_name; + + std::tie(language_code, args) = split(args); + std::tie(name, native_name) = split(args); + + send_request(make_tl_object( + make_tl_object(language_code, name, native_name, 3))); } else if (op == "sclsv" || op == "sclsp" || op == "sclsd") { string language_code; string key;