Save accent colors to binlog.
This commit is contained in:
parent
4489ef54aa
commit
3f8362a4bb
@ -138,6 +138,49 @@ void ThemeManager::ChatThemes::parse(ParserT &parser) {
|
|||||||
td::parse(themes, parser);
|
td::parse(themes, parser);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class StorerT>
|
||||||
|
void ThemeManager::AccentColors::store(StorerT &storer) const {
|
||||||
|
BEGIN_STORE_FLAGS();
|
||||||
|
END_STORE_FLAGS();
|
||||||
|
td::store(static_cast<int32>(light_colors_.size()), storer);
|
||||||
|
for (auto &it : light_colors_) {
|
||||||
|
td::store(it.first, storer);
|
||||||
|
td::store(it.second, storer);
|
||||||
|
}
|
||||||
|
td::store(static_cast<int32>(dark_colors_.size()), storer);
|
||||||
|
for (auto &it : dark_colors_) {
|
||||||
|
td::store(it.first, storer);
|
||||||
|
td::store(it.second, storer);
|
||||||
|
}
|
||||||
|
td::store(accent_color_ids_, storer);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class ParserT>
|
||||||
|
void ThemeManager::AccentColors::parse(ParserT &parser) {
|
||||||
|
BEGIN_PARSE_FLAGS();
|
||||||
|
END_PARSE_FLAGS();
|
||||||
|
int32 size;
|
||||||
|
td::parse(size, parser);
|
||||||
|
for (int32 i = 0; i < size; i++) {
|
||||||
|
AccentColorId accent_color_id;
|
||||||
|
vector<int32> colors;
|
||||||
|
td::parse(accent_color_id, parser);
|
||||||
|
td::parse(colors, parser);
|
||||||
|
CHECK(accent_color_id.is_valid());
|
||||||
|
light_colors_.emplace(accent_color_id, std::move(colors));
|
||||||
|
}
|
||||||
|
td::parse(size, parser);
|
||||||
|
for (int32 i = 0; i < size; i++) {
|
||||||
|
AccentColorId accent_color_id;
|
||||||
|
vector<int32> colors;
|
||||||
|
td::parse(accent_color_id, parser);
|
||||||
|
td::parse(colors, parser);
|
||||||
|
CHECK(accent_color_id.is_valid());
|
||||||
|
dark_colors_.emplace(accent_color_id, std::move(colors));
|
||||||
|
}
|
||||||
|
td::parse(accent_color_ids_, parser);
|
||||||
|
}
|
||||||
|
|
||||||
ThemeManager::ThemeManager(Td *td, ActorShared<> parent) : td_(td), parent_(std::move(parent)) {
|
ThemeManager::ThemeManager(Td *td, ActorShared<> parent) : td_(td), parent_(std::move(parent)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,6 +204,18 @@ void ThemeManager::init() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
chat_themes_.next_reload_time = Time::now();
|
chat_themes_.next_reload_time = Time::now();
|
||||||
|
|
||||||
|
log_event_string = G()->td_db()->get_binlog_pmc()->get(get_accent_colors_database_key());
|
||||||
|
if (!log_event_string.empty()) {
|
||||||
|
auto status = log_event_parse(accent_colors_, log_event_string);
|
||||||
|
if (status.is_ok()) {
|
||||||
|
send_update_accent_colors();
|
||||||
|
} else {
|
||||||
|
LOG(ERROR) << "Failed to parse accent colors from binlog: " << status;
|
||||||
|
accent_colors_ = AccentColors();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
loop();
|
loop();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -264,6 +319,7 @@ void ThemeManager::on_update_accent_colors(FlatHashMap<AccentColorId, vector<int
|
|||||||
}
|
}
|
||||||
accent_colors_.accent_color_ids_ = std::move(accent_color_ids);
|
accent_colors_.accent_color_ids_ = std::move(accent_color_ids);
|
||||||
|
|
||||||
|
save_accent_colors();
|
||||||
send_update_accent_colors();
|
send_update_accent_colors();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -371,10 +427,19 @@ string ThemeManager::get_chat_themes_database_key() {
|
|||||||
return "chat_themes";
|
return "chat_themes";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
string ThemeManager::get_accent_colors_database_key() {
|
||||||
|
return "accent_colors";
|
||||||
|
}
|
||||||
|
|
||||||
void ThemeManager::save_chat_themes() {
|
void ThemeManager::save_chat_themes() {
|
||||||
G()->td_db()->get_binlog_pmc()->set(get_chat_themes_database_key(), log_event_store(chat_themes_).as_slice().str());
|
G()->td_db()->get_binlog_pmc()->set(get_chat_themes_database_key(), log_event_store(chat_themes_).as_slice().str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ThemeManager::save_accent_colors() {
|
||||||
|
G()->td_db()->get_binlog_pmc()->set(get_accent_colors_database_key(),
|
||||||
|
log_event_store(accent_colors_).as_slice().str());
|
||||||
|
}
|
||||||
|
|
||||||
void ThemeManager::send_update_chat_themes() const {
|
void ThemeManager::send_update_chat_themes() const {
|
||||||
send_closure(G()->td(), &Td::send_update, get_update_chat_themes_object());
|
send_closure(G()->td(), &Td::send_update, get_update_chat_themes_object());
|
||||||
}
|
}
|
||||||
|
@ -95,6 +95,12 @@ class ThemeManager final : public Actor {
|
|||||||
vector<AccentColorId> accent_color_ids_;
|
vector<AccentColorId> accent_color_ids_;
|
||||||
|
|
||||||
td_api::object_ptr<td_api::updateAccentColors> get_update_accent_colors_object() const;
|
td_api::object_ptr<td_api::updateAccentColors> get_update_accent_colors_object() const;
|
||||||
|
|
||||||
|
template <class StorerT>
|
||||||
|
void store(StorerT &storer) const;
|
||||||
|
|
||||||
|
template <class ParserT>
|
||||||
|
void parse(ParserT &parser);
|
||||||
};
|
};
|
||||||
|
|
||||||
void start_up() final;
|
void start_up() final;
|
||||||
@ -115,8 +121,12 @@ class ThemeManager final : public Actor {
|
|||||||
|
|
||||||
static string get_chat_themes_database_key();
|
static string get_chat_themes_database_key();
|
||||||
|
|
||||||
|
string get_accent_colors_database_key();
|
||||||
|
|
||||||
void save_chat_themes();
|
void save_chat_themes();
|
||||||
|
|
||||||
|
void save_accent_colors();
|
||||||
|
|
||||||
void send_update_chat_themes() const;
|
void send_update_chat_themes() const;
|
||||||
|
|
||||||
static BaseTheme get_base_theme(const telegram_api::object_ptr<telegram_api::BaseTheme> &base_theme);
|
static BaseTheme get_base_theme(const telegram_api::object_ptr<telegram_api::BaseTheme> &base_theme);
|
||||||
|
Loading…
Reference in New Issue
Block a user