Add and use DialogFilter::is_dialog_included.

This commit is contained in:
levlam 2023-03-22 22:30:00 +03:00
parent 314dca6757
commit dc18ce7b0e
3 changed files with 12 additions and 17 deletions

View File

@ -172,10 +172,13 @@ bool DialogFilter::is_empty(bool for_server) const {
}
}
bool DialogFilter::is_dialog_included(DialogId dialog_id) const {
return InputDialogId::contains(included_dialog_ids, dialog_id) ||
InputDialogId::contains(pinned_dialog_ids, dialog_id);
}
bool DialogFilter::can_include_dialog(DialogId dialog_id) const {
if (InputDialogId::contains(included_dialog_ids, dialog_id) ||
InputDialogId::contains(pinned_dialog_ids, dialog_id)) {
// the dialog is already included
if (is_dialog_included(dialog_id)) {
return false;
}
@ -579,10 +582,7 @@ vector<FolderId> DialogFilter::get_folder_ids() const {
bool DialogFilter::need_dialog(const Td *td, DialogId dialog_id, bool has_unread_mentions, bool is_muted,
bool has_unread_messages, FolderId folder_id) const {
if (InputDialogId::contains(pinned_dialog_ids, dialog_id)) {
return true;
}
if (InputDialogId::contains(included_dialog_ids, dialog_id)) {
if (is_dialog_included(dialog_id)) {
return true;
}
if (InputDialogId::contains(excluded_dialog_ids, dialog_id)) {
@ -592,10 +592,7 @@ bool DialogFilter::need_dialog(const Td *td, DialogId dialog_id, bool has_unread
auto user_id = td->contacts_manager_->get_secret_chat_user_id(dialog_id.get_secret_chat_id());
if (user_id.is_valid()) {
auto user_dialog_id = DialogId(user_id);
if (InputDialogId::contains(pinned_dialog_ids, user_dialog_id)) {
return true;
}
if (InputDialogId::contains(included_dialog_ids, user_dialog_id)) {
if (is_dialog_included(user_dialog_id)) {
return true;
}
if (InputDialogId::contains(excluded_dialog_ids, user_dialog_id)) {

View File

@ -70,6 +70,8 @@ class DialogFilter {
return dialog_filter_id;
}
bool is_dialog_included(DialogId dialog_id) const;
bool can_include_dialog(DialogId dialog_id) const;
Status check_limits() const;

View File

@ -34489,17 +34489,13 @@ void MessagesManager::add_dialog_to_list(DialogId dialog_id, DialogListId dialog
auto dialog_filter_id = dialog_list_id.get_filter_id();
auto old_dialog_filter = get_dialog_filter(dialog_filter_id);
CHECK(old_dialog_filter != nullptr);
if (InputDialogId::contains(old_dialog_filter->included_dialog_ids, dialog_id) ||
InputDialogId::contains(old_dialog_filter->pinned_dialog_ids, dialog_id)) {
if (old_dialog_filter->is_dialog_included(dialog_id)) {
return promise.set_value(Unit());
}
auto new_dialog_filter = make_unique<DialogFilter>(*old_dialog_filter);
new_dialog_filter->include_dialog(get_input_dialog_id(dialog_id));
auto status = new_dialog_filter->check_limits();
if (status.is_error()) {
return promise.set_error(std::move(status));
}
TRY_STATUS_PROMISE(promise, new_dialog_filter->check_limits());
new_dialog_filter->sort_input_dialog_ids(td_, "add_dialog_to_list");
edit_dialog_filter(std::move(new_dialog_filter), "add_dialog_to_list");