diff --git a/td/telegram/BackgroundManager.cpp b/td/telegram/BackgroundManager.cpp index 32479f2f0..b260a2497 100644 --- a/td/telegram/BackgroundManager.cpp +++ b/td/telegram/BackgroundManager.cpp @@ -432,6 +432,7 @@ void BackgroundManager::start_up() { background.id.get() > max_local_background_id_.get()) { set_max_local_background_id(background.id); } + add_local_background_to_cache(background); } } @@ -450,6 +451,7 @@ void BackgroundManager::start_up() { if (background.id.get() > max_local_background_id_.get()) { set_max_local_background_id(background.id); } + add_local_background_to_cache(background); add_background(background, true); local_background_ids_[for_dark_theme].push_back(background.id); } @@ -518,6 +520,7 @@ void BackgroundManager::parse_background(BackgroundId &background_id, LogEventPa set_max_local_background_id(background.id); } background_id = background.id; + add_local_background_to_cache(background); add_background(background, false); } @@ -626,6 +629,7 @@ void BackgroundManager::on_load_background_from_database(string name, string val LOG(ERROR) << "Expected background " << name << ", but received " << background.name; name_to_background_id_.emplace(std::move(name), background.id); } + add_local_background_to_cache(background); add_background(background, false); } } @@ -671,6 +675,7 @@ BackgroundId BackgroundManager::get_next_local_background_id() { void BackgroundManager::set_local_background_id(Background &background) { CHECK(!background.name.empty() || background.type != BackgroundType()); + CHECK(background.has_new_local_id); auto &background_id = local_backgrounds_[background]; if (!background_id.is_valid()) { background_id = get_next_local_background_id(); @@ -678,6 +683,16 @@ void BackgroundManager::set_local_background_id(Background &background) { background.id = background_id; } +void BackgroundManager::add_local_background_to_cache(const Background &background) { + if (!background.has_new_local_id || !background.id.is_local()) { + return; + } + auto &background_id = local_backgrounds_[background]; + if (!background_id.is_valid()) { + background_id = background.id; + } +} + BackgroundId BackgroundManager::add_local_background(const BackgroundType &type) { Background background; background.is_creator = true; diff --git a/td/telegram/BackgroundManager.h b/td/telegram/BackgroundManager.h index ebccc4c55..db811a8ad 100644 --- a/td/telegram/BackgroundManager.h +++ b/td/telegram/BackgroundManager.h @@ -144,6 +144,8 @@ class BackgroundManager final : public Actor { void set_local_background_id(Background &background); + void add_local_background_to_cache(const Background &background); + BackgroundId add_local_background(const BackgroundType &type); void add_background(const Background &background, bool replace_type);