From 8e669d3c2ee9f212dd2c773ceb07005398921946 Mon Sep 17 00:00:00 2001 From: levlam Date: Thu, 9 May 2019 22:27:36 +0300 Subject: [PATCH] Add BackgroundType.{cpp,h}. GitOrigin-RevId: 1945d764af4b818505960eb82cf5781fb9df973f --- CMakeLists.txt | 2 + td/telegram/BackgroundManager.cpp | 83 +--------------------------- td/telegram/BackgroundManager.h | 27 +-------- td/telegram/BackgroundType.cpp | 91 +++++++++++++++++++++++++++++++ td/telegram/BackgroundType.h | 42 ++++++++++++++ 5 files changed, 137 insertions(+), 108 deletions(-) create mode 100644 td/telegram/BackgroundType.cpp create mode 100644 td/telegram/BackgroundType.h diff --git a/CMakeLists.txt b/CMakeLists.txt index b5eb98707..b84039a5e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -355,6 +355,7 @@ set(TDLIB_SOURCE td/telegram/AudiosManager.cpp td/telegram/AuthManager.cpp td/telegram/BackgroundManager.cpp + td/telegram/BackgroundType.cpp td/telegram/CallActor.cpp td/telegram/CallDiscardReason.cpp td/telegram/CallManager.cpp @@ -485,6 +486,7 @@ set(TDLIB_SOURCE td/telegram/AuthManager.h td/telegram/BackgroundId.h td/telegram/BackgroundManager.h + td/telegram/BackgroundType.h td/telegram/CallActor.h td/telegram/CallDiscardReason.h td/telegram/CallId.h diff --git a/td/telegram/BackgroundManager.cpp b/td/telegram/BackgroundManager.cpp index ba487d6d1..298d415e1 100644 --- a/td/telegram/BackgroundManager.cpp +++ b/td/telegram/BackgroundManager.cpp @@ -103,44 +103,9 @@ void BackgroundManager::get_backgrounds(Promise &&promise) { } } -Result BackgroundManager::get_background_type( - td_api::object_ptr type) { - if (type == nullptr) { - return Status::Error(400, "Type must not be empty"); - } - - BackgroundType result; - switch (type->get_id()) { - case td_api::backgroundTypeWallpaper::ID: { - auto wallpaper = td_api::move_object_as(type); - result = BackgroundType(wallpaper->is_blurred_, wallpaper->is_moving_); - break; - } - case td_api::backgroundTypePattern::ID: { - auto pattern = td_api::move_object_as(type); - result = BackgroundType(pattern->is_moving_, pattern->color_, pattern->intensity_); - break; - } - case td_api::backgroundTypeSolid::ID: { - auto solid = td_api::move_object_as(type); - result = BackgroundType(solid->color_); - break; - } - default: - UNREACHABLE(); - } - if (result.intensity < 0 || result.intensity > 100) { - return Status::Error(400, "Wrong intensity value"); - } - if (result.color < 0 || result.color > 0xFFFFFF) { - return Status::Error(400, "Wrong color value"); - } - return result; -} - Result BackgroundManager::get_background_url(const string &name, td_api::object_ptr background_type) const { - TRY_RESULT(type, get_background_type(std::move(background_type))); + TRY_RESULT(type, get_background_type(background_type.get())); vector modes; if (type.is_blurred) { @@ -246,38 +211,6 @@ const BackgroundManager::Background *BackgroundManager::get_background(Backgroun } } -BackgroundManager::BackgroundType BackgroundManager::get_background_type( - bool is_pattern, telegram_api::object_ptr settings) { - bool is_blurred = false; - bool is_moving = false; - int32 color = 0; - int32 intensity = 0; - if (settings) { - auto flags = settings->flags_; - is_blurred = (flags & telegram_api::wallPaperSettings::BLUR_MASK) != 0; - is_moving = (flags & telegram_api::wallPaperSettings::MOTION_MASK) != 0; - if ((flags & telegram_api::wallPaperSettings::BACKGROUND_COLOR_MASK) != 0) { - color = settings->background_color_; - if (color < 0 || color > 0xFFFFFF) { - LOG(ERROR) << "Receive " << to_string(settings); - color = 0; - } - } - if ((flags & telegram_api::wallPaperSettings::INTENSITY_MASK) != 0) { - intensity = settings->intensity_; - if (intensity < 0 || intensity > 100) { - LOG(ERROR) << "Receive " << to_string(settings); - intensity = 0; - } - } - } - if (is_pattern) { - return BackgroundType(is_moving, color, intensity); - } else { - return BackgroundType(is_blurred, is_moving); - } -} - BackgroundId BackgroundManager::on_get_background(BackgroundId expected_background_id, telegram_api::object_ptr wallpaper) { CHECK(wallpaper != nullptr); @@ -379,20 +312,6 @@ void BackgroundManager::on_get_backgrounds(Result BackgroundManager::get_background_type_object(const BackgroundType &type) { - switch (type.type) { - case BackgroundType::Type::Wallpaper: - return td_api::make_object(type.is_blurred, type.is_moving); - case BackgroundType::Type::Pattern: - return td_api::make_object(type.is_moving, type.color, type.intensity); - case BackgroundType::Type::Solid: - return td_api::make_object(type.color); - default: - UNREACHABLE(); - return nullptr; - } -} - td_api::object_ptr BackgroundManager::get_background_object(BackgroundId background_id) const { auto background = get_background(background_id); if (background == nullptr) { diff --git a/td/telegram/BackgroundManager.h b/td/telegram/BackgroundManager.h index f9832b832..efb2b8475 100644 --- a/td/telegram/BackgroundManager.h +++ b/td/telegram/BackgroundManager.h @@ -7,6 +7,7 @@ #pragma once #include "td/telegram/BackgroundId.h" +#include "td/telegram/BackgroundType.h" #include "td/telegram/files/FileId.h" #include "td/telegram/files/FileSourceId.h" #include "td/telegram/Photo.h" @@ -48,25 +49,6 @@ class BackgroundManager : public Actor { FileSourceId get_background_file_source_id(BackgroundId background_id, int64 access_hash); private: - struct BackgroundType { - enum class Type : int32 { Wallpaper, Pattern, Solid }; - Type type = Type::Solid; - bool is_blurred = false; - bool is_moving = false; - int32 color = 0; - int32 intensity = 0; - - BackgroundType() = default; - BackgroundType(bool is_blurred, bool is_moving) - : type(Type::Wallpaper), is_blurred(is_blurred), is_moving(is_moving) { - } - BackgroundType(bool is_moving, int32 color, int32 intensity) - : type(Type::Pattern), is_moving(is_moving), color(color), intensity(intensity) { - } - explicit BackgroundType(int32 color) : type(Type::Solid), color(color) { - } - }; - struct Background { BackgroundId id; int64 access_hash = 0; @@ -91,15 +73,8 @@ class BackgroundManager : public Actor { const Background *get_background(BackgroundId background_id) const; - static Result get_background_type(td_api::object_ptr type); - - static BackgroundType get_background_type(bool is_pattern, - telegram_api::object_ptr settings); - void on_get_backgrounds(Result> result); - static td_api::object_ptr get_background_type_object(const BackgroundType &type); - std::unordered_map backgrounds_; std::unordered_map, BackgroundIdHash> diff --git a/td/telegram/BackgroundType.cpp b/td/telegram/BackgroundType.cpp new file mode 100644 index 000000000..dcd79fa90 --- /dev/null +++ b/td/telegram/BackgroundType.cpp @@ -0,0 +1,91 @@ +// +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2019 +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +#include "td/telegram/BackgroundType.h" + +namespace td { + +Result get_background_type(const td_api::BackgroundType *type) { + if (type == nullptr) { + return Status::Error(400, "Type must not be empty"); + } + + BackgroundType result; + switch (type->get_id()) { + case td_api::backgroundTypeWallpaper::ID: { + auto wallpaper = static_cast(type); + result = BackgroundType(wallpaper->is_blurred_, wallpaper->is_moving_); + break; + } + case td_api::backgroundTypePattern::ID: { + auto pattern = static_cast(type); + result = BackgroundType(pattern->is_moving_, pattern->color_, pattern->intensity_); + break; + } + case td_api::backgroundTypeSolid::ID: { + auto solid = static_cast(type); + result = BackgroundType(solid->color_); + break; + } + default: + UNREACHABLE(); + } + if (result.intensity < 0 || result.intensity > 100) { + return Status::Error(400, "Wrong intensity value"); + } + if (result.color < 0 || result.color > 0xFFFFFF) { + return Status::Error(400, "Wrong color value"); + } + return result; +} + +BackgroundType get_background_type(bool is_pattern, + telegram_api::object_ptr settings) { + bool is_blurred = false; + bool is_moving = false; + int32 color = 0; + int32 intensity = 0; + if (settings) { + auto flags = settings->flags_; + is_blurred = (flags & telegram_api::wallPaperSettings::BLUR_MASK) != 0; + is_moving = (flags & telegram_api::wallPaperSettings::MOTION_MASK) != 0; + if ((flags & telegram_api::wallPaperSettings::BACKGROUND_COLOR_MASK) != 0) { + color = settings->background_color_; + if (color < 0 || color > 0xFFFFFF) { + LOG(ERROR) << "Receive " << to_string(settings); + color = 0; + } + } + if ((flags & telegram_api::wallPaperSettings::INTENSITY_MASK) != 0) { + intensity = settings->intensity_; + if (intensity < 0 || intensity > 100) { + LOG(ERROR) << "Receive " << to_string(settings); + intensity = 0; + } + } + } + if (is_pattern) { + return BackgroundType(is_moving, color, intensity); + } else { + return BackgroundType(is_blurred, is_moving); + } +} + +td_api::object_ptr get_background_type_object(const BackgroundType &type) { + switch (type.type) { + case BackgroundType::Type::Wallpaper: + return td_api::make_object(type.is_blurred, type.is_moving); + case BackgroundType::Type::Pattern: + return td_api::make_object(type.is_moving, type.color, type.intensity); + case BackgroundType::Type::Solid: + return td_api::make_object(type.color); + default: + UNREACHABLE(); + return nullptr; + } +} + +} // namespace td diff --git a/td/telegram/BackgroundType.h b/td/telegram/BackgroundType.h new file mode 100644 index 000000000..c28e7ad03 --- /dev/null +++ b/td/telegram/BackgroundType.h @@ -0,0 +1,42 @@ +// +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2019 +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +#pragma once + +#include "td/telegram/td_api.h" +#include "td/telegram/telegram_api.h" + +#include "td/utils/common.h" +#include "td/utils/Status.h" + +namespace td { + +struct BackgroundType { + enum class Type : int32 { Wallpaper, Pattern, Solid }; + Type type = Type::Solid; + bool is_blurred = false; + bool is_moving = false; + int32 color = 0; + int32 intensity = 0; + + BackgroundType() = default; + BackgroundType(bool is_blurred, bool is_moving) + : type(Type::Wallpaper), is_blurred(is_blurred), is_moving(is_moving) { + } + BackgroundType(bool is_moving, int32 color, int32 intensity) + : type(Type::Pattern), is_moving(is_moving), color(color), intensity(intensity) { + } + explicit BackgroundType(int32 color) : type(Type::Solid), color(color) { + } +}; + +Result get_background_type(const td_api::BackgroundType *type); + +BackgroundType get_background_type(bool is_pattern, telegram_api::object_ptr settings); + +td_api::object_ptr get_background_type_object(const BackgroundType &type); + +} // namespace td