Allow to set chat background for both sides.
This commit is contained in:
parent
65e474ef49
commit
aa7a0a6ee3
@ -7706,7 +7706,8 @@ setChatPermissions chat_id:int53 permissions:chatPermissions = Ok;
|
|||||||
//@background The input background to use; pass null to create a new filled background or to remove the current background
|
//@background The input background to use; pass null to create a new filled background or to remove the current background
|
||||||
//@type Background type; pass null to remove the current background
|
//@type Background type; pass null to remove the current background
|
||||||
//@dark_theme_dimming Dimming of the background in dark themes, as a percentage; 0-100
|
//@dark_theme_dimming Dimming of the background in dark themes, as a percentage; 0-100
|
||||||
setChatBackground chat_id:int53 background:InputBackground type:BackgroundType dark_theme_dimming:int32 = Ok;
|
//@only_for_self Pass true to set background only for self; pass false to set background for both chat users. Background can be set for both users only by Telegram Premium users
|
||||||
|
setChatBackground chat_id:int53 background:InputBackground type:BackgroundType dark_theme_dimming:int32 only_for_self:Bool = Ok;
|
||||||
|
|
||||||
//@description Changes the chat theme. Supported only in private and secret chats @chat_id Chat identifier @theme_name Name of the new chat theme; pass an empty string to return the default theme
|
//@description Changes the chat theme. Supported only in private and secret chats @chat_id Chat identifier @theme_name Name of the new chat theme; pass an empty string to return the default theme
|
||||||
setChatTheme chat_id:int53 theme_name:string = Ok;
|
setChatTheme chat_id:int53 theme_name:string = Ok;
|
||||||
|
@ -111,7 +111,8 @@ class SetChatWallPaperQuery final : public Td::ResultHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void send(DialogId dialog_id, telegram_api::object_ptr<telegram_api::InputWallPaper> input_wallpaper,
|
void send(DialogId dialog_id, telegram_api::object_ptr<telegram_api::InputWallPaper> input_wallpaper,
|
||||||
telegram_api::object_ptr<telegram_api::wallPaperSettings> settings, MessageId old_message_id) {
|
telegram_api::object_ptr<telegram_api::wallPaperSettings> settings, MessageId old_message_id,
|
||||||
|
bool for_both) {
|
||||||
dialog_id_ = dialog_id;
|
dialog_id_ = dialog_id;
|
||||||
is_remove_ = input_wallpaper == nullptr && settings == nullptr;
|
is_remove_ = input_wallpaper == nullptr && settings == nullptr;
|
||||||
if (is_remove_) {
|
if (is_remove_) {
|
||||||
@ -132,6 +133,9 @@ class SetChatWallPaperQuery final : public Td::ResultHandler {
|
|||||||
if (old_message_id.is_valid()) {
|
if (old_message_id.is_valid()) {
|
||||||
flags |= telegram_api::messages_setChatWallPaper::ID_MASK;
|
flags |= telegram_api::messages_setChatWallPaper::ID_MASK;
|
||||||
}
|
}
|
||||||
|
if (for_both) {
|
||||||
|
flags |= telegram_api::messages_setChatWallPaper::FOR_BOTH_MASK;
|
||||||
|
}
|
||||||
send_query(G()->net_query_creator().create(telegram_api::messages_setChatWallPaper(
|
send_query(G()->net_query_creator().create(telegram_api::messages_setChatWallPaper(
|
||||||
flags, false /*ignored*/, false /*ignored*/, std::move(input_peer), std::move(input_wallpaper),
|
flags, false /*ignored*/, false /*ignored*/, std::move(input_peer), std::move(input_wallpaper),
|
||||||
std::move(settings), old_message_id.get_server_message_id().get())));
|
std::move(settings), old_message_id.get_server_message_id().get())));
|
||||||
@ -722,7 +726,7 @@ void BackgroundManager::set_background(const td_api::InputBackground *input_back
|
|||||||
|
|
||||||
void BackgroundManager::set_dialog_background(DialogId dialog_id, const td_api::InputBackground *input_background,
|
void BackgroundManager::set_dialog_background(DialogId dialog_id, const td_api::InputBackground *input_background,
|
||||||
const td_api::BackgroundType *background_type, int32 dark_theme_dimming,
|
const td_api::BackgroundType *background_type, int32 dark_theme_dimming,
|
||||||
Promise<Unit> &&promise) {
|
bool for_both, Promise<Unit> &&promise) {
|
||||||
if (!td_->messages_manager_->have_dialog_force(dialog_id, "set_dialog_background")) {
|
if (!td_->messages_manager_->have_dialog_force(dialog_id, "set_dialog_background")) {
|
||||||
return promise.set_error(Status::Error(400, "Chat not found"));
|
return promise.set_error(Status::Error(400, "Chat not found"));
|
||||||
}
|
}
|
||||||
@ -756,11 +760,11 @@ void BackgroundManager::set_dialog_background(DialogId dialog_id, const td_api::
|
|||||||
return promise.set_error(Status::Error(400, "Input background must be non-empty for the background type"));
|
return promise.set_error(Status::Error(400, "Input background must be non-empty for the background type"));
|
||||||
}
|
}
|
||||||
if (background_type == nullptr) {
|
if (background_type == nullptr) {
|
||||||
return send_set_dialog_background_query(dialog_id, nullptr, nullptr, MessageId(), std::move(promise));
|
return send_set_dialog_background_query(dialog_id, nullptr, nullptr, MessageId(), for_both, std::move(promise));
|
||||||
} else {
|
} else {
|
||||||
return send_set_dialog_background_query(dialog_id,
|
return send_set_dialog_background_query(
|
||||||
telegram_api::make_object<telegram_api::inputWallPaperNoFile>(0),
|
dialog_id, telegram_api::make_object<telegram_api::inputWallPaperNoFile>(0),
|
||||||
type.get_input_wallpaper_settings(), MessageId(), std::move(promise));
|
type.get_input_wallpaper_settings(), MessageId(), for_both, std::move(promise));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -778,17 +782,17 @@ void BackgroundManager::set_dialog_background(DialogId dialog_id, const td_api::
|
|||||||
|
|
||||||
auto it = file_id_to_background_id_.find(file_id);
|
auto it = file_id_to_background_id_.find(file_id);
|
||||||
if (it != file_id_to_background_id_.end()) {
|
if (it != file_id_to_background_id_.end()) {
|
||||||
return do_set_dialog_background(dialog_id, it->second, type, std::move(promise));
|
return do_set_dialog_background(dialog_id, it->second, type, for_both, std::move(promise));
|
||||||
}
|
}
|
||||||
|
|
||||||
auto upload_promise =
|
auto upload_promise =
|
||||||
PromiseCreator::lambda([actor_id = actor_id(this), dialog_id, type, promise = std::move(promise)](
|
PromiseCreator::lambda([actor_id = actor_id(this), dialog_id, type, for_both, promise = std::move(promise)](
|
||||||
Result<td_api::object_ptr<td_api::background>> &&result) mutable {
|
Result<td_api::object_ptr<td_api::background>> &&result) mutable {
|
||||||
if (result.is_error()) {
|
if (result.is_error()) {
|
||||||
return promise.set_error(result.move_as_error());
|
return promise.set_error(result.move_as_error());
|
||||||
}
|
}
|
||||||
send_closure(actor_id, &BackgroundManager::do_set_dialog_background, dialog_id,
|
send_closure(actor_id, &BackgroundManager::do_set_dialog_background, dialog_id,
|
||||||
BackgroundId(result.ok()->id_), std::move(type), std::move(promise));
|
BackgroundId(result.ok()->id_), std::move(type), for_both, std::move(promise));
|
||||||
});
|
});
|
||||||
upload_background_file(file_id, type, dialog_id, false, std::move(upload_promise));
|
upload_background_file(file_id, type, dialog_id, false, std::move(upload_promise));
|
||||||
break;
|
break;
|
||||||
@ -796,7 +800,7 @@ void BackgroundManager::set_dialog_background(DialogId dialog_id, const td_api::
|
|||||||
case td_api::inputBackgroundRemote::ID: {
|
case td_api::inputBackgroundRemote::ID: {
|
||||||
auto background_remote = static_cast<const td_api::inputBackgroundRemote *>(input_background);
|
auto background_remote = static_cast<const td_api::inputBackgroundRemote *>(input_background);
|
||||||
return do_set_dialog_background(dialog_id, BackgroundId(background_remote->background_id_), std::move(type),
|
return do_set_dialog_background(dialog_id, BackgroundId(background_remote->background_id_), std::move(type),
|
||||||
std::move(promise));
|
for_both, std::move(promise));
|
||||||
}
|
}
|
||||||
case td_api::inputBackgroundPrevious::ID: {
|
case td_api::inputBackgroundPrevious::ID: {
|
||||||
auto background_previous = static_cast<const td_api::inputBackgroundPrevious *>(input_background);
|
auto background_previous = static_cast<const td_api::inputBackgroundPrevious *>(input_background);
|
||||||
@ -806,7 +810,7 @@ void BackgroundManager::set_dialog_background(DialogId dialog_id, const td_api::
|
|||||||
}
|
}
|
||||||
return send_set_dialog_background_query(
|
return send_set_dialog_background_query(
|
||||||
dialog_id, nullptr, background_type == nullptr ? nullptr : type.get_input_wallpaper_settings(), message_id,
|
dialog_id, nullptr, background_type == nullptr ? nullptr : type.get_input_wallpaper_settings(), message_id,
|
||||||
std::move(promise));
|
for_both, std::move(promise));
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
UNREACHABLE();
|
UNREACHABLE();
|
||||||
@ -814,7 +818,7 @@ void BackgroundManager::set_dialog_background(DialogId dialog_id, const td_api::
|
|||||||
}
|
}
|
||||||
|
|
||||||
void BackgroundManager::do_set_dialog_background(DialogId dialog_id, BackgroundId background_id, BackgroundType type,
|
void BackgroundManager::do_set_dialog_background(DialogId dialog_id, BackgroundId background_id, BackgroundType type,
|
||||||
Promise<Unit> &&promise) {
|
bool for_both, Promise<Unit> &&promise) {
|
||||||
TRY_STATUS_PROMISE(promise, G()->close_status());
|
TRY_STATUS_PROMISE(promise, G()->close_status());
|
||||||
const auto *background = get_background(background_id);
|
const auto *background = get_background(background_id);
|
||||||
if (background == nullptr) {
|
if (background == nullptr) {
|
||||||
@ -828,15 +832,15 @@ void BackgroundManager::do_set_dialog_background(DialogId dialog_id, BackgroundI
|
|||||||
|
|
||||||
send_set_dialog_background_query(
|
send_set_dialog_background_query(
|
||||||
dialog_id, telegram_api::make_object<telegram_api::inputWallPaper>(background_id.get(), background->access_hash),
|
dialog_id, telegram_api::make_object<telegram_api::inputWallPaper>(background_id.get(), background->access_hash),
|
||||||
type.get_input_wallpaper_settings(), MessageId(), std::move(promise));
|
type.get_input_wallpaper_settings(), MessageId(), for_both, std::move(promise));
|
||||||
}
|
}
|
||||||
|
|
||||||
void BackgroundManager::send_set_dialog_background_query(
|
void BackgroundManager::send_set_dialog_background_query(
|
||||||
DialogId dialog_id, telegram_api::object_ptr<telegram_api::InputWallPaper> input_wallpaper,
|
DialogId dialog_id, telegram_api::object_ptr<telegram_api::InputWallPaper> input_wallpaper,
|
||||||
telegram_api::object_ptr<telegram_api::wallPaperSettings> settings, MessageId old_message_id,
|
telegram_api::object_ptr<telegram_api::wallPaperSettings> settings, MessageId old_message_id, bool for_both,
|
||||||
Promise<Unit> &&promise) {
|
Promise<Unit> &&promise) {
|
||||||
td_->create_handler<SetChatWallPaperQuery>(std::move(promise))
|
td_->create_handler<SetChatWallPaperQuery>(std::move(promise))
|
||||||
->send(dialog_id, std::move(input_wallpaper), std::move(settings), old_message_id);
|
->send(dialog_id, std::move(input_wallpaper), std::move(settings), old_message_id, for_both);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BackgroundManager::set_background(BackgroundId background_id, BackgroundType type, bool for_dark_theme,
|
void BackgroundManager::set_background(BackgroundId background_id, BackgroundType type, bool for_dark_theme,
|
||||||
|
@ -49,7 +49,7 @@ class BackgroundManager final : public Actor {
|
|||||||
void reset_backgrounds(Promise<Unit> &&promise);
|
void reset_backgrounds(Promise<Unit> &&promise);
|
||||||
|
|
||||||
void set_dialog_background(DialogId dialog_id, const td_api::InputBackground *input_background,
|
void set_dialog_background(DialogId dialog_id, const td_api::InputBackground *input_background,
|
||||||
const td_api::BackgroundType *background_type, int32 dark_theme_dimming,
|
const td_api::BackgroundType *background_type, int32 dark_theme_dimming, bool for_both,
|
||||||
Promise<Unit> &&promise);
|
Promise<Unit> &&promise);
|
||||||
|
|
||||||
td_api::object_ptr<td_api::background> get_background_object(BackgroundId background_id, bool for_dark_theme,
|
td_api::object_ptr<td_api::background> get_background_object(BackgroundId background_id, bool for_dark_theme,
|
||||||
@ -140,13 +140,13 @@ class BackgroundManager final : public Actor {
|
|||||||
|
|
||||||
Result<FileId> prepare_input_file(const tl_object_ptr<td_api::InputFile> &input_file);
|
Result<FileId> prepare_input_file(const tl_object_ptr<td_api::InputFile> &input_file);
|
||||||
|
|
||||||
void do_set_dialog_background(DialogId dialog_id, BackgroundId background_id, BackgroundType type,
|
void do_set_dialog_background(DialogId dialog_id, BackgroundId background_id, BackgroundType type, bool for_both,
|
||||||
Promise<Unit> &&promise);
|
Promise<Unit> &&promise);
|
||||||
|
|
||||||
void send_set_dialog_background_query(DialogId dialog_id,
|
void send_set_dialog_background_query(DialogId dialog_id,
|
||||||
telegram_api::object_ptr<telegram_api::InputWallPaper> input_wallpaper,
|
telegram_api::object_ptr<telegram_api::InputWallPaper> input_wallpaper,
|
||||||
telegram_api::object_ptr<telegram_api::wallPaperSettings> settings,
|
telegram_api::object_ptr<telegram_api::wallPaperSettings> settings,
|
||||||
MessageId old_message_id, Promise<Unit> &&promise);
|
MessageId old_message_id, bool for_both, Promise<Unit> &&promise);
|
||||||
|
|
||||||
void set_background(BackgroundId background_id, BackgroundType type, bool for_dark_theme,
|
void set_background(BackgroundId background_id, BackgroundType type, bool for_dark_theme,
|
||||||
Promise<td_api::object_ptr<td_api::background>> &&promise);
|
Promise<td_api::object_ptr<td_api::background>> &&promise);
|
||||||
|
@ -6496,7 +6496,7 @@ void Td::on_request(uint64 id, td_api::setChatBackground &request) {
|
|||||||
CHECK_IS_USER();
|
CHECK_IS_USER();
|
||||||
CREATE_OK_REQUEST_PROMISE();
|
CREATE_OK_REQUEST_PROMISE();
|
||||||
background_manager_->set_dialog_background(DialogId(request.chat_id_), request.background_.get(), request.type_.get(),
|
background_manager_->set_dialog_background(DialogId(request.chat_id_), request.background_.get(), request.type_.get(),
|
||||||
request.dark_theme_dimming_, std::move(promise));
|
request.dark_theme_dimming_, !request.only_for_self_, std::move(promise));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Td::on_request(uint64 id, td_api::setChatTheme &request) {
|
void Td::on_request(uint64 id, td_api::setChatTheme &request) {
|
||||||
|
@ -3101,14 +3101,14 @@ class CliClient final : public Actor {
|
|||||||
send_request(td_api::make_object<td_api::removeBackground>(background_id));
|
send_request(td_api::make_object<td_api::removeBackground>(background_id));
|
||||||
} else if (op == "rbgs") {
|
} else if (op == "rbgs") {
|
||||||
send_request(td_api::make_object<td_api::resetBackgrounds>());
|
send_request(td_api::make_object<td_api::resetBackgrounds>());
|
||||||
} else if (op == "scbg") {
|
} else if (op == "scbg" || op == "scbgs") {
|
||||||
ChatId chat_id;
|
ChatId chat_id;
|
||||||
InputBackground input_background;
|
InputBackground input_background;
|
||||||
BackgroundType background_type;
|
BackgroundType background_type;
|
||||||
int32 dark_theme_dimming;
|
int32 dark_theme_dimming;
|
||||||
get_args(args, chat_id, input_background, background_type, dark_theme_dimming);
|
get_args(args, chat_id, input_background, background_type, dark_theme_dimming);
|
||||||
send_request(td_api::make_object<td_api::setChatBackground>(chat_id, input_background, background_type,
|
send_request(td_api::make_object<td_api::setChatBackground>(chat_id, input_background, background_type,
|
||||||
dark_theme_dimming));
|
dark_theme_dimming, op == "scbgs"));
|
||||||
} else if (op == "gcos") {
|
} else if (op == "gcos") {
|
||||||
send_request(td_api::make_object<td_api::getCountries>());
|
send_request(td_api::make_object<td_api::getCountries>());
|
||||||
} else if (op == "gcoc") {
|
} else if (op == "gcoc") {
|
||||||
|
Loading…
Reference in New Issue
Block a user