From 77f3b9d40034031beb5fd1ea8257b23ff312c8b4 Mon Sep 17 00:00:00 2001 From: levlam Date: Sun, 22 Jul 2018 01:59:13 +0300 Subject: [PATCH] Save only SqliteDb in LanguageDatabase. GitOrigin-RevId: 7bac17996ad17d9e895a4fb21ed41d53f77a8539 --- td/telegram/LanguagePackManager.cpp | 55 +++++++++++++++++++++-------- td/telegram/LanguagePackManager.h | 27 ++------------ 2 files changed, 43 insertions(+), 39 deletions(-) diff --git a/td/telegram/LanguagePackManager.cpp b/td/telegram/LanguagePackManager.cpp index a5395dc0..40aebce4 100644 --- a/td/telegram/LanguagePackManager.cpp +++ b/td/telegram/LanguagePackManager.cpp @@ -15,31 +15,55 @@ #include "td/telegram/td_api.h" #include "td/telegram/telegram_api.h" +#include "td/db/SqliteDb.h" #include "td/db/SqliteKeyValue.h" #include "td/utils/logging.h" #include "td/utils/Status.h" +#include + namespace td { +struct LanguagePackManager::PluralizedString { + string zero_value_; + string one_value_; + string two_value_; + string few_value_; + string many_value_; + string other_value_; +}; + +struct LanguagePackManager::Language { + std::mutex mutex_; + std::atomic version_{-1}; + bool has_get_difference_query_ = false; + std::unordered_map ordinary_strings_; + std::unordered_map pluralized_strings_; + std::unordered_set deleted_strings_; +}; + +struct LanguagePackManager::LanguagePack { + std::mutex mutex_; + std::unordered_map> languages_; +}; + struct LanguagePackManager::LanguageDatabase { std::mutex mutex_; string path_; - SqliteKeyValue kv_; + SqliteDb database_; std::unordered_map> language_packs_; }; LanguagePackManager::~LanguagePackManager() = default; -static Result open_database(const string &path) { - TRY_RESULT(db, SqliteDb::open_with_key(path, DbKey::empty())); - TRY_STATUS(db.exec("PRAGMA synchronous=NORMAL")); - TRY_STATUS(db.exec("PRAGMA temp_store=MEMORY")); - TRY_STATUS(db.exec("PRAGMA encoding=\"UTF-8\"")); - TRY_STATUS(db.exec("PRAGMA journal_mode=WAL")); - SqliteKeyValue kv; - TRY_STATUS(kv.init_with_connection(std::move(db), "lang")); - return std::move(kv); +static Result open_database(const string &path) { + TRY_RESULT(database, SqliteDb::open_with_key(path, DbKey::empty())); + TRY_STATUS(database.exec("PRAGMA synchronous=NORMAL")); + TRY_STATUS(database.exec("PRAGMA temp_store=MEMORY")); + TRY_STATUS(database.exec("PRAGMA encoding=\"UTF-8\"")); + TRY_STATUS(database.exec("PRAGMA journal_mode=WAL")); + return std::move(database); } void LanguagePackManager::start_up() { @@ -51,21 +75,22 @@ void LanguagePackManager::start_up() { string database_path = G()->shared_config().get_option_string("language_database_path"); auto it = language_databases_.find(database_path); if (it == language_databases_.end()) { - SqliteKeyValue kv; + SqliteDb database; if (!database_path.empty()) { - auto r_kv = open_database(database_path); - if (r_kv.is_error()) { - LOG(ERROR) << "Can't open language database " << database_path << ": " << r_kv.error(); + auto r_database = open_database(database_path); + if (r_database.is_error()) { + LOG(ERROR) << "Can't open language database " << database_path << ": " << r_database.error(); database_path = string(); it = language_databases_.find(database_path); } else { - kv = r_kv.move_as_ok(); + database = r_database.move_as_ok(); } } if (it == language_databases_.end()) { it = language_databases_.emplace(database_path, make_unique()).first; it->second->path_ = std::move(database_path); + it->second->database_ = std::move(database); } } database_ = it->second.get(); diff --git a/td/telegram/LanguagePackManager.h b/td/telegram/LanguagePackManager.h index 32a48372..4064f505 100644 --- a/td/telegram/LanguagePackManager.h +++ b/td/telegram/LanguagePackManager.h @@ -17,7 +17,6 @@ #include "td/utils/Container.h" #include "td/utils/Status.h" -#include #include #include #include @@ -49,29 +48,9 @@ class LanguagePackManager : public NetQueryCallback { void on_update_language_pack(tl_object_ptr difference); private: - struct PluralizedString { - string zero_value_; - string one_value_; - string two_value_; - string few_value_; - string many_value_; - string other_value_; - }; - - struct Language { - std::mutex mutex_; - std::atomic version_{-1}; - bool has_get_difference_query_ = false; - std::unordered_map ordinary_strings_; - std::unordered_map pluralized_strings_; - std::unordered_set deleted_strings_; - }; - - struct LanguagePack { - std::mutex mutex_; - std::unordered_map> languages_; - }; - + struct PluralizedString; + struct Language; + struct LanguagePack; struct LanguageDatabase; ActorShared<> parent_;