Add chatFilter.is_shareable.

This commit is contained in:
levlam 2023-03-30 18:23:26 +03:00
parent d1c9cacf85
commit 761bc9c992
4 changed files with 20 additions and 12 deletions

View File

@ -1295,6 +1295,7 @@ chatTypeSecret secret_chat_id:int32 user_id:int53 = ChatType;
//@icon_name The chosen icon name for short filter representation. If non-empty, must be one of "All", "Unread", "Unmuted", "Bots", "Channels", "Groups", "Private", "Custom", "Setup", "Cat", "Crown",
//-"Favorite", "Flower", "Game", "Home", "Love", "Mask", "Party", "Sport", "Study", "Trade", "Travel", "Work", "Airplane", "Book", "Light", "Like", "Money", "Note", "Palette".
//-If empty, use getChatFilterDefaultIconName to get default icon name for the filter
//@is_shareable True if at least one link has been created for the filter
//@pinned_chat_ids The chat identifiers of pinned chats in the filtered chat list. There can be up to getOption("chat_filter_chosen_chat_count_max") pinned and always included non-secret chats and the same number of secret chats, but the limit can be increased with Telegram Premium
//@included_chat_ids The chat identifiers of always included chats in the filtered chat list. There can be up to getOption("chat_filter_chosen_chat_count_max") pinned and always included non-secret chats and the same number of secret chats, but the limit can be increased with Telegram Premium
//@excluded_chat_ids The chat identifiers of always excluded chats in the filtered chat list. There can be up to getOption("chat_filter_chosen_chat_count_max") always excluded non-secret chats and the same number of secret chats, but the limit can be increased with Telegram Premium
@ -1306,7 +1307,7 @@ chatTypeSecret secret_chat_id:int32 user_id:int53 = ChatType;
//@include_bots True, if bots need to be included
//@include_groups True, if basic groups and supergroups need to be included
//@include_channels True, if channels need to be included
chatFilter title:string icon_name:string pinned_chat_ids:vector<int53> included_chat_ids:vector<int53> excluded_chat_ids:vector<int53> exclude_muted:Bool exclude_read:Bool exclude_archived:Bool include_contacts:Bool include_non_contacts:Bool include_bots:Bool include_groups:Bool include_channels:Bool = ChatFilter;
chatFilter title:string icon_name:string is_shareable:Bool pinned_chat_ids:vector<int53> included_chat_ids:vector<int53> excluded_chat_ids:vector<int53> exclude_muted:Bool exclude_read:Bool exclude_archived:Bool include_contacts:Bool include_non_contacts:Bool include_bots:Bool include_groups:Bool include_channels:Bool = ChatFilter;
//@description Contains basic information about a chat filter
//@id Unique chat filter identifier

View File

@ -135,7 +135,7 @@ Result<unique_ptr<DialogFilter>> DialogFilter::create_dialog_filter(Td *td, Dial
dialog_filter->include_bots_ = filter->include_bots_;
dialog_filter->include_groups_ = filter->include_groups_;
dialog_filter->include_channels_ = filter->include_channels_;
dialog_filter->is_shareable_ = false;
dialog_filter->is_shareable_ = filter->is_shareable_;
TRY_STATUS(dialog_filter->check_limits());
dialog_filter->sort_input_dialog_ids(td, "create_dialog_filter");
@ -280,11 +280,11 @@ Status DialogFilter::check_limits() const {
}
if (is_shareable_) {
if (!excluded_dialog_ids_.empty()) {
return Status::Error(400, "The folder can't have excluded chats");
return Status::Error(400, "Shareable folders can't have excluded chats");
}
if (include_contacts_ || include_non_contacts_ || include_bots_ || include_groups_ || include_channels_ ||
exclude_archived_ || exclude_read_ || exclude_muted_) {
return Status::Error(400, "The folder can't have chat filters");
return Status::Error(400, "Shareable folders can't have chat filters");
}
}
@ -450,7 +450,7 @@ td_api::object_ptr<td_api::chatFilter> DialogFilter::get_chat_filter_object(
};
return td_api::make_object<td_api::chatFilter>(
title_, get_icon_name(), get_chat_ids(pinned_dialog_ids_), get_chat_ids(included_dialog_ids_),
title_, get_icon_name(), is_shareable_, get_chat_ids(pinned_dialog_ids_), get_chat_ids(included_dialog_ids_),
get_chat_ids(excluded_dialog_ids_), exclude_muted_, exclude_read_, exclude_archived_, include_contacts_,
include_non_contacts_, include_bots_, include_groups_, include_channels_);
}

View File

@ -1195,6 +1195,9 @@ void DialogFilterManager::create_dialog_filter(td_api::object_ptr<td_api::chatFi
TRY_RESULT_PROMISE(promise, dialog_filter,
DialogFilter::create_dialog_filter(td_, dialog_filter_id, std::move(filter)));
if (dialog_filter->is_shareable()) {
return promise.set_error(Status::Error(400, "Can't create shareable folder"));
}
auto chat_filter_info = dialog_filter->get_chat_filter_info_object();
bool at_beginning = is_recommended_dialog_filter(dialog_filter.get());
@ -1215,12 +1218,15 @@ void DialogFilterManager::edit_dialog_filter(DialogFilterId dialog_filter_id,
CHECK(!td_->auth_manager_->is_bot());
auto old_dialog_filter = get_dialog_filter(dialog_filter_id);
if (old_dialog_filter == nullptr) {
return promise.set_error(Status::Error(400, "Chat filter not found"));
return promise.set_error(Status::Error(400, "Chat folder not found"));
}
CHECK(is_update_chat_filters_sent_);
TRY_RESULT_PROMISE(promise, new_dialog_filter,
DialogFilter::create_dialog_filter(td_, dialog_filter_id, std::move(filter)));
if (new_dialog_filter->is_shareable() != old_dialog_filter->is_shareable()) {
return promise.set_error(Status::Error(400, "Can't convert a shareable folder to a non-shareable"));
}
auto chat_filter_info = new_dialog_filter->get_chat_filter_info_object();
if (*new_dialog_filter == *old_dialog_filter) {
@ -1347,7 +1353,7 @@ void DialogFilterManager::reorder_dialog_filters(vector<DialogFilterId> dialog_f
for (auto dialog_filter_id : dialog_filter_ids) {
auto dialog_filter = get_dialog_filter(dialog_filter_id);
if (dialog_filter == nullptr) {
return promise.set_error(Status::Error(400, "Chat filter not found"));
return promise.set_error(Status::Error(400, "Chat folder not found"));
}
}
std::unordered_set<DialogFilterId, DialogFilterIdHash> new_dialog_filter_ids_set(dialog_filter_ids.begin(),
@ -1490,7 +1496,7 @@ void DialogFilterManager::create_dialog_filter_invite_link(
Promise<td_api::object_ptr<td_api::chatFilterInviteLink>> promise) {
auto dialog_filter = get_dialog_filter(dialog_filter_id);
if (dialog_filter == nullptr) {
return promise.set_error(Status::Error(400, "Chat filter not found"));
return promise.set_error(Status::Error(400, "Chat folder not found"));
}
vector<tl_object_ptr<telegram_api::InputPeer>> input_peers;
input_peers.reserve(dialog_ids.size());
@ -1512,7 +1518,7 @@ void DialogFilterManager::get_dialog_filter_invite_links(
DialogFilterId dialog_filter_id, Promise<td_api::object_ptr<td_api::chatFilterInviteLinks>> promise) {
auto dialog_filter = get_dialog_filter(dialog_filter_id);
if (dialog_filter == nullptr) {
return promise.set_error(Status::Error(400, "Chat filter not found"));
return promise.set_error(Status::Error(400, "Chat folder not found"));
}
if (!dialog_filter->is_shareable()) {
return promise.set_value(td_api::make_object<td_api::chatFilterInviteLinks>());

View File

@ -1533,9 +1533,10 @@ class CliClient final : public Actor {
string included_chat_ids;
string excluded_chat_ids;
get_args(filter, title, icon_name, pinned_chat_ids, included_chat_ids, excluded_chat_ids);
return td_api::make_object<td_api::chatFilter>(
title, icon_name, as_chat_ids(pinned_chat_ids), as_chat_ids(included_chat_ids), as_chat_ids(excluded_chat_ids),
rand_bool(), rand_bool(), rand_bool(), rand_bool(), rand_bool(), rand_bool(), rand_bool(), rand_bool());
return td_api::make_object<td_api::chatFilter>(title, icon_name, false, as_chat_ids(pinned_chat_ids),
as_chat_ids(included_chat_ids), as_chat_ids(excluded_chat_ids),
rand_bool(), rand_bool(), rand_bool(), rand_bool(), rand_bool(),
rand_bool(), rand_bool(), rand_bool());
}
static td_api::object_ptr<td_api::chatAdministratorRights> as_chat_administrator_rights(