Update layer 107.

GitOrigin-RevId: d8ab8b2016d368f6e4f03c6cf1440232ab66e7f2
This commit is contained in:
levlam 2019-12-22 02:56:51 +03:00
parent 48f5681dfd
commit 04eb931c72
4 changed files with 51 additions and 9 deletions

View File

@ -201,6 +201,7 @@ peerNotifySettings#af509d20 flags:# show_previews:flags.0?Bool silent:flags.1?Bo
peerSettings#818426cd flags:# report_spam:flags.0?true add_contact:flags.1?true block_contact:flags.2?true share_contact:flags.3?true need_contacts_exception:flags.4?true report_geo:flags.5?true = PeerSettings; peerSettings#818426cd flags:# report_spam:flags.0?true add_contact:flags.1?true block_contact:flags.2?true share_contact:flags.3?true need_contacts_exception:flags.4?true report_geo:flags.5?true = PeerSettings;
wallPaper#a437c3ed id:long flags:# creator:flags.0?true default:flags.1?true pattern:flags.3?true dark:flags.4?true access_hash:long slug:string document:Document settings:flags.2?WallPaperSettings = WallPaper; wallPaper#a437c3ed id:long flags:# creator:flags.0?true default:flags.1?true pattern:flags.3?true dark:flags.4?true access_hash:long slug:string document:Document settings:flags.2?WallPaperSettings = WallPaper;
wallPaperNoFile#8af40b25 flags:# default:flags.1?true dark:flags.4?true settings:flags.2?WallPaperSettings = WallPaper;
inputReportReasonSpam#58dbcab8 = ReportReason; inputReportReasonSpam#58dbcab8 = ReportReason;
inputReportReasonViolence#1e22c78d = ReportReason; inputReportReasonViolence#1e22c78d = ReportReason;
@ -1017,6 +1018,7 @@ chatBannedRights#9f120418 flags:# view_messages:flags.0?true send_messages:flags
inputWallPaper#e630b979 id:long access_hash:long = InputWallPaper; inputWallPaper#e630b979 id:long access_hash:long = InputWallPaper;
inputWallPaperSlug#72091c80 slug:string = InputWallPaper; inputWallPaperSlug#72091c80 slug:string = InputWallPaper;
inputWallPaperNoFile#8427bbac = InputWallPaper;
account.wallPapersNotModified#1c199183 = account.WallPapers; account.wallPapersNotModified#1c199183 = account.WallPapers;
account.wallPapers#702b65a9 hash:int wallpapers:Vector<WallPaper> = account.WallPapers; account.wallPapers#702b65a9 hash:int wallpapers:Vector<WallPaper> = account.WallPapers;

Binary file not shown.

View File

@ -537,14 +537,18 @@ Result<FileId> BackgroundManager::prepare_input_file(const tl_object_ptr<td_api:
} }
BackgroundId BackgroundManager::add_solid_background(int32 color) { BackgroundId BackgroundManager::add_solid_background(int32 color) {
return add_solid_background(color, false, (color & 0x808080) == 0);
}
BackgroundId BackgroundManager::add_solid_background(int32 color, bool is_default, bool is_dark) {
CHECK(0 <= color && color < 0x1000000); CHECK(0 <= color && color < 0x1000000);
BackgroundId background_id(static_cast<int64>(color) + 1); BackgroundId background_id(static_cast<int64>(color) + 1);
Background background; Background background;
background.id = background_id; background.id = background_id;
background.is_creator = true; background.is_creator = true;
background.is_default = false; background.is_default = is_default;
background.is_dark = (color & 0x808080) == 0; background.is_dark = is_dark;
background.type = BackgroundType(color); background.type = BackgroundType(color);
background.name = background.type.get_color_hex_string(); background.name = background.type.get_color_hex_string();
add_background(background); add_background(background);
@ -553,6 +557,12 @@ BackgroundId BackgroundManager::add_solid_background(int32 color) {
} }
BackgroundId BackgroundManager::add_gradient_background(int32 top_color, int32 bottom_color) { BackgroundId BackgroundManager::add_gradient_background(int32 top_color, int32 bottom_color) {
return add_gradient_background(top_color, bottom_color, false,
(top_color & 0x808080) == 0 && (bottom_color & 0x808080) == 0);
}
BackgroundId BackgroundManager::add_gradient_background(int32 top_color, int32 bottom_color, bool is_default,
bool is_dark) {
CHECK(0 <= top_color && top_color < 0x1000000); CHECK(0 <= top_color && top_color < 0x1000000);
CHECK(0 <= bottom_color && bottom_color < 0x1000000); CHECK(0 <= bottom_color && bottom_color < 0x1000000);
BackgroundId background_id((static_cast<int64>(top_color) << 24) + bottom_color + 1); BackgroundId background_id((static_cast<int64>(top_color) << 24) + bottom_color + 1);
@ -560,8 +570,8 @@ BackgroundId BackgroundManager::add_gradient_background(int32 top_color, int32 b
Background background; Background background;
background.id = background_id; background.id = background_id;
background.is_creator = true; background.is_creator = true;
background.is_default = false; background.is_default = is_default;
background.is_dark = (top_color & 0x808080) == 0 && (bottom_color & 0x808080) == 0; background.is_dark = is_dark;
background.type = BackgroundType(top_color, bottom_color); background.type = BackgroundType(top_color, bottom_color);
background.name = background.name =
BackgroundType::get_color_hex_string(top_color) + "-" + BackgroundType::get_color_hex_string(bottom_color); BackgroundType::get_color_hex_string(top_color) + "-" + BackgroundType::get_color_hex_string(bottom_color);
@ -769,7 +779,7 @@ void BackgroundManager::do_upload_background_file(FileId file_id, const Backgrou
} }
void BackgroundManager::on_uploaded_background_file(FileId file_id, const BackgroundType &type, bool for_dark_theme, void BackgroundManager::on_uploaded_background_file(FileId file_id, const BackgroundType &type, bool for_dark_theme,
telegram_api::object_ptr<telegram_api::wallPaper> wallpaper, telegram_api::object_ptr<telegram_api::WallPaper> wallpaper,
Promise<Unit> &&promise) { Promise<Unit> &&promise) {
CHECK(wallpaper != nullptr); CHECK(wallpaper != nullptr);
@ -781,6 +791,10 @@ void BackgroundManager::on_uploaded_background_file(FileId file_id, const Backgr
auto background = get_background(background_id); auto background = get_background(background_id);
CHECK(background != nullptr); CHECK(background != nullptr);
if (!background->file_id.is_valid()) {
td_->file_manager_->cancel_upload(file_id);
return promise.set_error(Status::Error(500, "Receive wrong uploaded background without file"));
}
LOG_STATUS(td_->file_manager_->merge(background->file_id, file_id)); LOG_STATUS(td_->file_manager_->merge(background->file_id, file_id));
set_background_id(background_id, type, for_dark_theme); set_background_id(background_id, type, for_dark_theme);
promise.set_value(Unit()); promise.set_value(Unit());
@ -937,9 +951,31 @@ string BackgroundManager::get_background_name_database_key(const string &name) {
BackgroundId BackgroundManager::on_get_background(BackgroundId expected_background_id, BackgroundId BackgroundManager::on_get_background(BackgroundId expected_background_id,
const string &expected_background_name, const string &expected_background_name,
telegram_api::object_ptr<telegram_api::wallPaper> wallpaper) { telegram_api::object_ptr<telegram_api::WallPaper> wallpaper_ptr) {
CHECK(wallpaper != nullptr); CHECK(wallpaper_ptr != nullptr);
if (wallpaper_ptr->get_id() == telegram_api::wallPaperNoFile::ID) {
auto wallpaper = move_tl_object_as<telegram_api::wallPaperNoFile>(wallpaper_ptr);
auto settings = std::move(wallpaper->settings_);
if (settings == nullptr) {
LOG(ERROR) << "Receive wallPaperNoFile without settings: " << to_string(wallpaper);
return BackgroundId();
}
bool has_color = (settings->flags_ & telegram_api::wallPaperSettings::BACKGROUND_COLOR_MASK) != 0;
auto color = has_color ? settings->background_color_ : 0;
auto is_default = (wallpaper->flags_ & telegram_api::wallPaperNoFile::DEFAULT_MASK) != 0;
auto is_dark = (wallpaper->flags_ & telegram_api::wallPaperNoFile::DARK_MASK) != 0;
if ((settings->flags_ & telegram_api::wallPaperSettings::SECOND_BACKGROUND_COLOR_MASK) != 0) {
return add_gradient_background(color, settings->second_background_color_, is_default, is_dark);
} else {
return add_solid_background(color, is_default, is_dark);
}
}
auto wallpaper = move_tl_object_as<telegram_api::wallPaper>(wallpaper_ptr);
auto id = BackgroundId(wallpaper->id_); auto id = BackgroundId(wallpaper->id_);
if (!id.is_valid()) { if (!id.is_valid()) {
LOG(ERROR) << "Receive " << to_string(wallpaper); LOG(ERROR) << "Receive " << to_string(wallpaper);

View File

@ -55,12 +55,12 @@ class BackgroundManager : public Actor {
td_api::object_ptr<td_api::backgrounds> get_backgrounds_object(bool for_dark_theme) const; td_api::object_ptr<td_api::backgrounds> get_backgrounds_object(bool for_dark_theme) const;
BackgroundId on_get_background(BackgroundId expected_background_id, const string &expected_background_name, BackgroundId on_get_background(BackgroundId expected_background_id, const string &expected_background_name,
telegram_api::object_ptr<telegram_api::wallPaper> wallpaper); telegram_api::object_ptr<telegram_api::WallPaper> wallpaper_ptr);
FileSourceId get_background_file_source_id(BackgroundId background_id, int64 access_hash); FileSourceId get_background_file_source_id(BackgroundId background_id, int64 access_hash);
void on_uploaded_background_file(FileId file_id, const BackgroundType &type, bool for_dark_theme, void on_uploaded_background_file(FileId file_id, const BackgroundType &type, bool for_dark_theme,
telegram_api::object_ptr<telegram_api::wallPaper> wallpaper, telegram_api::object_ptr<telegram_api::WallPaper> wallpaper,
Promise<Unit> &&promise); Promise<Unit> &&promise);
void get_current_state(vector<td_api::object_ptr<td_api::Update>> &updates) const; void get_current_state(vector<td_api::object_ptr<td_api::Update>> &updates) const;
@ -106,8 +106,12 @@ class BackgroundManager : public Actor {
BackgroundId add_solid_background(int32 color); BackgroundId add_solid_background(int32 color);
BackgroundId add_solid_background(int32 color, bool is_default, bool is_dark);
BackgroundId add_gradient_background(int32 top_color, int32 bottom_color); BackgroundId add_gradient_background(int32 top_color, int32 bottom_color);
BackgroundId add_gradient_background(int32 top_color, int32 bottom_color, bool is_default, bool is_dark);
void add_background(const Background &background); void add_background(const Background &background);
Background *get_background_ref(BackgroundId background_id); Background *get_background_ref(BackgroundId background_id);