Improve field names in DialogFilter.

This commit is contained in:
levlam 2023-03-23 17:26:24 +03:00
parent b718933607
commit a511f1c56f
3 changed files with 213 additions and 208 deletions

View File

@ -45,22 +45,22 @@ unique_ptr<DialogFilter> DialogFilter::get_dialog_filter(
dialog_filter_id = DialogFilterId(); dialog_filter_id = DialogFilterId();
} }
auto dialog_filter = make_unique<DialogFilter>(); auto dialog_filter = make_unique<DialogFilter>();
dialog_filter->dialog_filter_id = dialog_filter_id; dialog_filter->dialog_filter_id_ = dialog_filter_id;
dialog_filter->title = std::move(filter->title_); dialog_filter->title_ = std::move(filter->title_);
dialog_filter->emoji = std::move(filter->emoticon_); dialog_filter->emoji_ = std::move(filter->emoticon_);
FlatHashSet<DialogId, DialogIdHash> added_dialog_ids; FlatHashSet<DialogId, DialogIdHash> added_dialog_ids;
dialog_filter->pinned_dialog_ids = InputDialogId::get_input_dialog_ids(filter->pinned_peers_, &added_dialog_ids); dialog_filter->pinned_dialog_ids_ = InputDialogId::get_input_dialog_ids(filter->pinned_peers_, &added_dialog_ids);
dialog_filter->included_dialog_ids = InputDialogId::get_input_dialog_ids(filter->include_peers_, &added_dialog_ids); dialog_filter->included_dialog_ids_ = InputDialogId::get_input_dialog_ids(filter->include_peers_, &added_dialog_ids);
dialog_filter->excluded_dialog_ids = InputDialogId::get_input_dialog_ids(filter->exclude_peers_, &added_dialog_ids); dialog_filter->excluded_dialog_ids_ = InputDialogId::get_input_dialog_ids(filter->exclude_peers_, &added_dialog_ids);
auto flags = filter->flags_; auto flags = filter->flags_;
dialog_filter->exclude_muted = (flags & telegram_api::dialogFilter::EXCLUDE_MUTED_MASK) != 0; dialog_filter->exclude_muted_ = (flags & telegram_api::dialogFilter::EXCLUDE_MUTED_MASK) != 0;
dialog_filter->exclude_read = (flags & telegram_api::dialogFilter::EXCLUDE_READ_MASK) != 0; dialog_filter->exclude_read_ = (flags & telegram_api::dialogFilter::EXCLUDE_READ_MASK) != 0;
dialog_filter->exclude_archived = (flags & telegram_api::dialogFilter::EXCLUDE_ARCHIVED_MASK) != 0; dialog_filter->exclude_archived_ = (flags & telegram_api::dialogFilter::EXCLUDE_ARCHIVED_MASK) != 0;
dialog_filter->include_contacts = (flags & telegram_api::dialogFilter::CONTACTS_MASK) != 0; dialog_filter->include_contacts_ = (flags & telegram_api::dialogFilter::CONTACTS_MASK) != 0;
dialog_filter->include_non_contacts = (flags & telegram_api::dialogFilter::NON_CONTACTS_MASK) != 0; dialog_filter->include_non_contacts_ = (flags & telegram_api::dialogFilter::NON_CONTACTS_MASK) != 0;
dialog_filter->include_bots = (flags & telegram_api::dialogFilter::BOTS_MASK) != 0; dialog_filter->include_bots_ = (flags & telegram_api::dialogFilter::BOTS_MASK) != 0;
dialog_filter->include_groups = (flags & telegram_api::dialogFilter::GROUPS_MASK) != 0; dialog_filter->include_groups_ = (flags & telegram_api::dialogFilter::GROUPS_MASK) != 0;
dialog_filter->include_channels = (flags & telegram_api::dialogFilter::BROADCASTS_MASK) != 0; dialog_filter->include_channels_ = (flags & telegram_api::dialogFilter::BROADCASTS_MASK) != 0;
return dialog_filter; return dialog_filter;
} }
@ -69,7 +69,7 @@ Result<unique_ptr<DialogFilter>> DialogFilter::create_dialog_filter(Td *td, Dial
CHECK(filter != nullptr); CHECK(filter != nullptr);
auto dialog_filter = make_unique<DialogFilter>(); auto dialog_filter = make_unique<DialogFilter>();
dialog_filter->dialog_filter_id = dialog_filter_id; dialog_filter->dialog_filter_id_ = dialog_filter_id;
FlatHashSet<int64> added_dialog_ids; FlatHashSet<int64> added_dialog_ids;
auto add_chats = [td, &added_dialog_ids](vector<InputDialogId> &input_dialog_ids, const vector<int64> &chat_ids) { auto add_chats = [td, &added_dialog_ids](vector<InputDialogId> &input_dialog_ids, const vector<int64> &chat_ids) {
@ -82,27 +82,27 @@ Result<unique_ptr<DialogFilter>> DialogFilter::create_dialog_filter(Td *td, Dial
input_dialog_ids.push_back(td->messages_manager_->get_input_dialog_id(DialogId(chat_id))); input_dialog_ids.push_back(td->messages_manager_->get_input_dialog_id(DialogId(chat_id)));
} }
}; };
add_chats(dialog_filter->pinned_dialog_ids, filter->pinned_chat_ids_); add_chats(dialog_filter->pinned_dialog_ids_, filter->pinned_chat_ids_);
add_chats(dialog_filter->included_dialog_ids, filter->included_chat_ids_); add_chats(dialog_filter->included_dialog_ids_, filter->included_chat_ids_);
add_chats(dialog_filter->excluded_dialog_ids, filter->excluded_chat_ids_); add_chats(dialog_filter->excluded_dialog_ids_, filter->excluded_chat_ids_);
constexpr size_t MAX_TITLE_LENGTH = 12; // server-side limit for dialog filter title constexpr size_t MAX_TITLE_LENGTH = 12; // server-side limit for dialog filter title
dialog_filter->title = clean_name(std::move(filter->title_), MAX_TITLE_LENGTH); dialog_filter->title_ = clean_name(std::move(filter->title_), MAX_TITLE_LENGTH);
if (dialog_filter->title.empty()) { if (dialog_filter->title_.empty()) {
return Status::Error(400, "Title must be non-empty"); return Status::Error(400, "Title must be non-empty");
} }
dialog_filter->emoji = get_emoji_by_icon_name(filter->icon_name_); dialog_filter->emoji_ = get_emoji_by_icon_name(filter->icon_name_);
if (dialog_filter->emoji.empty() && !filter->icon_name_.empty()) { if (dialog_filter->emoji_.empty() && !filter->icon_name_.empty()) {
return Status::Error(400, "Invalid icon name specified"); return Status::Error(400, "Invalid icon name specified");
} }
dialog_filter->exclude_muted = filter->exclude_muted_; dialog_filter->exclude_muted_ = filter->exclude_muted_;
dialog_filter->exclude_read = filter->exclude_read_; dialog_filter->exclude_read_ = filter->exclude_read_;
dialog_filter->exclude_archived = filter->exclude_archived_; dialog_filter->exclude_archived_ = filter->exclude_archived_;
dialog_filter->include_contacts = filter->include_contacts_; dialog_filter->include_contacts_ = filter->include_contacts_;
dialog_filter->include_non_contacts = filter->include_non_contacts_; dialog_filter->include_non_contacts_ = filter->include_non_contacts_;
dialog_filter->include_bots = filter->include_bots_; dialog_filter->include_bots_ = filter->include_bots_;
dialog_filter->include_groups = filter->include_groups_; dialog_filter->include_groups_ = filter->include_groups_;
dialog_filter->include_channels = filter->include_channels_; dialog_filter->include_channels_ = filter->include_channels_;
TRY_STATUS(dialog_filter->check_limits()); TRY_STATUS(dialog_filter->check_limits());
dialog_filter->sort_input_dialog_ids(td, "create_dialog_filter"); dialog_filter->sort_input_dialog_ids(td, "create_dialog_filter");
@ -113,13 +113,13 @@ Result<unique_ptr<DialogFilter>> DialogFilter::create_dialog_filter(Td *td, Dial
void DialogFilter::set_dialog_is_pinned(InputDialogId input_dialog_id, bool is_pinned) { void DialogFilter::set_dialog_is_pinned(InputDialogId input_dialog_id, bool is_pinned) {
auto dialog_id = input_dialog_id.get_dialog_id(); auto dialog_id = input_dialog_id.get_dialog_id();
if (is_pinned) { if (is_pinned) {
pinned_dialog_ids.insert(pinned_dialog_ids.begin(), input_dialog_id); pinned_dialog_ids_.insert(pinned_dialog_ids_.begin(), input_dialog_id);
InputDialogId::remove(included_dialog_ids, dialog_id); InputDialogId::remove(included_dialog_ids_, dialog_id);
InputDialogId::remove(excluded_dialog_ids, dialog_id); InputDialogId::remove(excluded_dialog_ids_, dialog_id);
} else { } else {
bool is_removed = InputDialogId::remove(pinned_dialog_ids, dialog_id); bool is_removed = InputDialogId::remove(pinned_dialog_ids_, dialog_id);
CHECK(is_removed); CHECK(is_removed);
included_dialog_ids.push_back(input_dialog_id); included_dialog_ids_.push_back(input_dialog_id);
} }
} }
@ -129,20 +129,20 @@ void DialogFilter::set_pinned_dialog_ids(vector<InputDialogId> &&input_dialog_id
new_pinned_dialog_ids.insert(input_dialog_id.get_dialog_id()); new_pinned_dialog_ids.insert(input_dialog_id.get_dialog_id());
} }
auto old_pinned_dialog_ids = std::move(pinned_dialog_ids); auto old_pinned_dialog_ids = std::move(pinned_dialog_ids_);
pinned_dialog_ids = std::move(input_dialog_ids); pinned_dialog_ids_ = std::move(input_dialog_ids);
auto is_new_pinned = [&new_pinned_dialog_ids](InputDialogId input_dialog_id) { auto is_new_pinned = [&new_pinned_dialog_ids](InputDialogId input_dialog_id) {
return new_pinned_dialog_ids.count(input_dialog_id.get_dialog_id()) > 0; return new_pinned_dialog_ids.count(input_dialog_id.get_dialog_id()) > 0;
}; };
td::remove_if(old_pinned_dialog_ids, is_new_pinned); td::remove_if(old_pinned_dialog_ids, is_new_pinned);
td::remove_if(included_dialog_ids, is_new_pinned); td::remove_if(included_dialog_ids_, is_new_pinned);
td::remove_if(excluded_dialog_ids, is_new_pinned); td::remove_if(excluded_dialog_ids_, is_new_pinned);
append(included_dialog_ids, old_pinned_dialog_ids); append(included_dialog_ids_, old_pinned_dialog_ids);
} }
void DialogFilter::include_dialog(InputDialogId input_dialog_id) { void DialogFilter::include_dialog(InputDialogId input_dialog_id) {
included_dialog_ids.push_back(input_dialog_id); included_dialog_ids_.push_back(input_dialog_id);
InputDialogId::remove(excluded_dialog_ids, input_dialog_id.get_dialog_id()); InputDialogId::remove(excluded_dialog_ids_, input_dialog_id.get_dialog_id());
} }
void DialogFilter::remove_secret_chat_dialog_ids() { void DialogFilter::remove_secret_chat_dialog_ids() {
@ -151,37 +151,37 @@ void DialogFilter::remove_secret_chat_dialog_ids() {
return input_dialog_id.get_dialog_id().get_type() == DialogType::SecretChat; return input_dialog_id.get_dialog_id().get_type() == DialogType::SecretChat;
}); });
}; };
remove_secret_chats(pinned_dialog_ids); remove_secret_chats(pinned_dialog_ids_);
remove_secret_chats(included_dialog_ids); remove_secret_chats(included_dialog_ids_);
remove_secret_chats(excluded_dialog_ids); remove_secret_chats(excluded_dialog_ids_);
} }
void DialogFilter::remove_dialog_id(DialogId dialog_id) { void DialogFilter::remove_dialog_id(DialogId dialog_id) {
InputDialogId::remove(pinned_dialog_ids, dialog_id); InputDialogId::remove(pinned_dialog_ids_, dialog_id);
InputDialogId::remove(included_dialog_ids, dialog_id); InputDialogId::remove(included_dialog_ids_, dialog_id);
InputDialogId::remove(excluded_dialog_ids, dialog_id); InputDialogId::remove(excluded_dialog_ids_, dialog_id);
} }
bool DialogFilter::is_empty(bool for_server) const { bool DialogFilter::is_empty(bool for_server) const {
if (include_contacts || include_non_contacts || include_bots || include_groups || include_channels) { if (include_contacts_ || include_non_contacts_ || include_bots_ || include_groups_ || include_channels_) {
return false; return false;
} }
if (for_server) { if (for_server) {
vector<InputDialogId> empty_input_dialog_ids; vector<InputDialogId> empty_input_dialog_ids;
return InputDialogId::are_equivalent(pinned_dialog_ids, empty_input_dialog_ids) && return InputDialogId::are_equivalent(pinned_dialog_ids_, empty_input_dialog_ids) &&
InputDialogId::are_equivalent(included_dialog_ids, empty_input_dialog_ids); InputDialogId::are_equivalent(included_dialog_ids_, empty_input_dialog_ids);
} else { } else {
return pinned_dialog_ids.empty() && included_dialog_ids.empty(); return pinned_dialog_ids_.empty() && included_dialog_ids_.empty();
} }
} }
bool DialogFilter::is_dialog_pinned(DialogId dialog_id) const { bool DialogFilter::is_dialog_pinned(DialogId dialog_id) const {
return InputDialogId::contains(pinned_dialog_ids, dialog_id); return InputDialogId::contains(pinned_dialog_ids_, dialog_id);
} }
bool DialogFilter::is_dialog_included(DialogId dialog_id) const { bool DialogFilter::is_dialog_included(DialogId dialog_id) const {
return InputDialogId::contains(included_dialog_ids, dialog_id) || is_dialog_pinned(dialog_id); return InputDialogId::contains(included_dialog_ids_, dialog_id) || is_dialog_pinned(dialog_id);
} }
bool DialogFilter::can_include_dialog(DialogId dialog_id) const { bool DialogFilter::can_include_dialog(DialogId dialog_id) const {
@ -189,7 +189,7 @@ bool DialogFilter::can_include_dialog(DialogId dialog_id) const {
return false; return false;
} }
if (included_dialog_ids.size() + pinned_dialog_ids.size() < narrow_cast<size_t>(get_max_filter_dialogs())) { if (included_dialog_ids_.size() + pinned_dialog_ids_.size() < narrow_cast<size_t>(get_max_filter_dialogs())) {
// fast path // fast path
return true; return true;
} }
@ -210,13 +210,13 @@ Status DialogFilter::check_limits() const {
return result; return result;
}; };
auto excluded_server_dialog_count = get_server_dialog_count(excluded_dialog_ids); auto excluded_server_dialog_count = get_server_dialog_count(excluded_dialog_ids_);
auto included_server_dialog_count = get_server_dialog_count(included_dialog_ids); auto included_server_dialog_count = get_server_dialog_count(included_dialog_ids_);
auto pinned_server_dialog_count = get_server_dialog_count(pinned_dialog_ids); auto pinned_server_dialog_count = get_server_dialog_count(pinned_dialog_ids_);
auto excluded_secret_dialog_count = static_cast<int32>(excluded_dialog_ids.size()) - excluded_server_dialog_count; auto excluded_secret_dialog_count = static_cast<int32>(excluded_dialog_ids_.size()) - excluded_server_dialog_count;
auto included_secret_dialog_count = static_cast<int32>(included_dialog_ids.size()) - included_server_dialog_count; auto included_secret_dialog_count = static_cast<int32>(included_dialog_ids_.size()) - included_server_dialog_count;
auto pinned_secret_dialog_count = static_cast<int32>(pinned_dialog_ids.size()) - pinned_server_dialog_count; auto pinned_secret_dialog_count = static_cast<int32>(pinned_dialog_ids_.size()) - pinned_server_dialog_count;
auto limit = get_max_filter_dialogs(); auto limit = get_max_filter_dialogs();
if (excluded_server_dialog_count > limit || excluded_secret_dialog_count > limit) { if (excluded_server_dialog_count > limit || excluded_secret_dialog_count > limit) {
@ -234,8 +234,8 @@ Status DialogFilter::check_limits() const {
return Status::Error(400, "Folder must contain at least 1 chat"); return Status::Error(400, "Folder must contain at least 1 chat");
} }
if (include_contacts && include_non_contacts && include_bots && include_groups && include_channels && if (include_contacts_ && include_non_contacts_ && include_bots_ && include_groups_ && include_channels_ &&
exclude_archived && !exclude_read && !exclude_muted) { exclude_archived_ && !exclude_read_ && !exclude_muted_) {
return Status::Error(400, "Folder must be different from the main chat list"); return Status::Error(400, "Folder must be different from the main chat list");
} }
@ -253,7 +253,7 @@ string DialogFilter::get_emoji_by_icon_name(const string &icon_name) {
string DialogFilter::get_icon_name() const { string DialogFilter::get_icon_name() const {
init_icon_names(); init_icon_names();
auto it = emoji_to_icon_name_.find(emoji); auto it = emoji_to_icon_name_.find(emoji_);
if (it != emoji_to_icon_name_.end()) { if (it != emoji_to_icon_name_.end()) {
return it->second; return it->second;
} }
@ -266,33 +266,33 @@ string DialogFilter::get_chosen_or_default_icon_name() const {
return icon_name; return icon_name;
} }
if (!pinned_dialog_ids.empty() || !included_dialog_ids.empty() || !excluded_dialog_ids.empty()) { if (!pinned_dialog_ids_.empty() || !included_dialog_ids_.empty() || !excluded_dialog_ids_.empty()) {
return "Custom"; return "Custom";
} }
if (include_contacts || include_non_contacts) { if (include_contacts_ || include_non_contacts_) {
if (!include_bots && !include_groups && !include_channels) { if (!include_bots_ && !include_groups_ && !include_channels_) {
return "Private"; return "Private";
} }
} else { } else {
if (!include_bots && !include_channels) { if (!include_bots_ && !include_channels_) {
if (!include_groups) { if (!include_groups_) {
// just in case // just in case
return "Custom"; return "Custom";
} }
return "Groups"; return "Groups";
} }
if (!include_bots && !include_groups) { if (!include_bots_ && !include_groups_) {
return "Channels"; return "Channels";
} }
if (!include_groups && !include_channels) { if (!include_groups_ && !include_channels_) {
return "Bots"; return "Bots";
} }
} }
if (exclude_read && !exclude_muted) { if (exclude_read_ && !exclude_muted_) {
return "Unread"; return "Unread";
} }
if (exclude_muted && !exclude_read) { if (exclude_muted_ && !exclude_read_) {
return "Unmuted"; return "Unmuted";
} }
return "Custom"; return "Custom";
@ -337,39 +337,39 @@ string DialogFilter::get_default_icon_name(const td_api::chatFilter *filter) {
telegram_api::object_ptr<telegram_api::DialogFilter> DialogFilter::get_input_dialog_filter() const { telegram_api::object_ptr<telegram_api::DialogFilter> DialogFilter::get_input_dialog_filter() const {
int32 flags = 0; int32 flags = 0;
if (!emoji.empty()) { if (!emoji_.empty()) {
flags |= telegram_api::dialogFilter::EMOTICON_MASK; flags |= telegram_api::dialogFilter::EMOTICON_MASK;
} }
if (exclude_muted) { if (exclude_muted_) {
flags |= telegram_api::dialogFilter::EXCLUDE_MUTED_MASK; flags |= telegram_api::dialogFilter::EXCLUDE_MUTED_MASK;
} }
if (exclude_read) { if (exclude_read_) {
flags |= telegram_api::dialogFilter::EXCLUDE_READ_MASK; flags |= telegram_api::dialogFilter::EXCLUDE_READ_MASK;
} }
if (exclude_archived) { if (exclude_archived_) {
flags |= telegram_api::dialogFilter::EXCLUDE_ARCHIVED_MASK; flags |= telegram_api::dialogFilter::EXCLUDE_ARCHIVED_MASK;
} }
if (include_contacts) { if (include_contacts_) {
flags |= telegram_api::dialogFilter::CONTACTS_MASK; flags |= telegram_api::dialogFilter::CONTACTS_MASK;
} }
if (include_non_contacts) { if (include_non_contacts_) {
flags |= telegram_api::dialogFilter::NON_CONTACTS_MASK; flags |= telegram_api::dialogFilter::NON_CONTACTS_MASK;
} }
if (include_bots) { if (include_bots_) {
flags |= telegram_api::dialogFilter::BOTS_MASK; flags |= telegram_api::dialogFilter::BOTS_MASK;
} }
if (include_groups) { if (include_groups_) {
flags |= telegram_api::dialogFilter::GROUPS_MASK; flags |= telegram_api::dialogFilter::GROUPS_MASK;
} }
if (include_channels) { if (include_channels_) {
flags |= telegram_api::dialogFilter::BROADCASTS_MASK; flags |= telegram_api::dialogFilter::BROADCASTS_MASK;
} }
return telegram_api::make_object<telegram_api::dialogFilter>( return telegram_api::make_object<telegram_api::dialogFilter>(
flags, false /*ignored*/, false /*ignored*/, false /*ignored*/, false /*ignored*/, false /*ignored*/, flags, false /*ignored*/, false /*ignored*/, false /*ignored*/, false /*ignored*/, false /*ignored*/,
false /*ignored*/, false /*ignored*/, false /*ignored*/, dialog_filter_id.get(), title, emoji, false /*ignored*/, false /*ignored*/, false /*ignored*/, dialog_filter_id_.get(), title_, emoji_,
InputDialogId::get_input_peers(pinned_dialog_ids), InputDialogId::get_input_peers(included_dialog_ids), InputDialogId::get_input_peers(pinned_dialog_ids_), InputDialogId::get_input_peers(included_dialog_ids_),
InputDialogId::get_input_peers(excluded_dialog_ids)); InputDialogId::get_input_peers(excluded_dialog_ids_));
} }
td_api::object_ptr<td_api::chatFilter> DialogFilter::get_chat_filter_object( td_api::object_ptr<td_api::chatFilter> DialogFilter::get_chat_filter_object(
@ -386,18 +386,19 @@ td_api::object_ptr<td_api::chatFilter> DialogFilter::get_chat_filter_object(
return chat_ids; return chat_ids;
}; };
return td_api::make_object<td_api::chatFilter>(title, get_icon_name(), get_chat_ids(pinned_dialog_ids), return td_api::make_object<td_api::chatFilter>(
get_chat_ids(included_dialog_ids), get_chat_ids(excluded_dialog_ids), title_, get_icon_name(), get_chat_ids(pinned_dialog_ids_), get_chat_ids(included_dialog_ids_),
exclude_muted, exclude_read, exclude_archived, include_contacts, get_chat_ids(excluded_dialog_ids_), exclude_muted_, exclude_read_, exclude_archived_, include_contacts_,
include_non_contacts, include_bots, include_groups, include_channels); include_non_contacts_, include_bots_, include_groups_, include_channels_);
} }
td_api::object_ptr<td_api::chatFilterInfo> DialogFilter::get_chat_filter_info_object() const { td_api::object_ptr<td_api::chatFilterInfo> DialogFilter::get_chat_filter_info_object() const {
return td_api::make_object<td_api::chatFilterInfo>(dialog_filter_id.get(), title, get_chosen_or_default_icon_name()); return td_api::make_object<td_api::chatFilterInfo>(dialog_filter_id_.get(), title_,
get_chosen_or_default_icon_name());
} }
void DialogFilter::for_each_dialog(std::function<void(const InputDialogId &)> callback) const { void DialogFilter::for_each_dialog(std::function<void(const InputDialogId &)> callback) const {
for (auto input_dialog_ids : {&pinned_dialog_ids, &excluded_dialog_ids, &included_dialog_ids}) { for (auto input_dialog_ids : {&pinned_dialog_ids_, &excluded_dialog_ids_, &included_dialog_ids_}) {
for (const auto &input_dialog_id : *input_dialog_ids) { for (const auto &input_dialog_id : *input_dialog_ids) {
callback(input_dialog_id); callback(input_dialog_id);
} }
@ -411,11 +412,11 @@ unique_ptr<DialogFilter> DialogFilter::merge_dialog_filter_changes(const DialogF
CHECK(old_filter != nullptr); CHECK(old_filter != nullptr);
CHECK(old_server_filter != nullptr); CHECK(old_server_filter != nullptr);
CHECK(new_server_filter != nullptr); CHECK(new_server_filter != nullptr);
CHECK(old_filter->dialog_filter_id == old_server_filter->dialog_filter_id); CHECK(old_filter->dialog_filter_id_ == old_server_filter->dialog_filter_id_);
CHECK(old_filter->dialog_filter_id == new_server_filter->dialog_filter_id); CHECK(old_filter->dialog_filter_id_ == new_server_filter->dialog_filter_id_);
auto dialog_filter_id = old_filter->dialog_filter_id; auto dialog_filter_id = old_filter->dialog_filter_id_;
auto new_filter = make_unique<DialogFilter>(*old_filter); auto new_filter = make_unique<DialogFilter>(*old_filter);
new_filter->dialog_filter_id = dialog_filter_id; new_filter->dialog_filter_id_ = dialog_filter_id;
auto merge_ordered_changes = [dialog_filter_id](auto &new_dialog_ids, auto old_server_dialog_ids, auto merge_ordered_changes = [dialog_filter_id](auto &new_dialog_ids, auto old_server_dialog_ids,
auto new_server_dialog_ids) { auto new_server_dialog_ids) {
@ -499,12 +500,12 @@ unique_ptr<DialogFilter> DialogFilter::merge_dialog_filter_changes(const DialogF
new_dialog_ids = std::move(result); new_dialog_ids = std::move(result);
}; };
merge_ordered_changes(new_filter->pinned_dialog_ids, old_server_filter->pinned_dialog_ids, merge_ordered_changes(new_filter->pinned_dialog_ids_, old_server_filter->pinned_dialog_ids_,
new_server_filter->pinned_dialog_ids); new_server_filter->pinned_dialog_ids_);
merge_changes(new_filter->included_dialog_ids, old_server_filter->included_dialog_ids, merge_changes(new_filter->included_dialog_ids_, old_server_filter->included_dialog_ids_,
new_server_filter->included_dialog_ids); new_server_filter->included_dialog_ids_);
merge_changes(new_filter->excluded_dialog_ids, old_server_filter->excluded_dialog_ids, merge_changes(new_filter->excluded_dialog_ids_, old_server_filter->excluded_dialog_ids_,
new_server_filter->excluded_dialog_ids); new_server_filter->excluded_dialog_ids_);
{ {
FlatHashSet<DialogId, DialogIdHash> added_dialog_ids; FlatHashSet<DialogId, DialogIdHash> added_dialog_ids;
@ -515,9 +516,9 @@ unique_ptr<DialogFilter> DialogFilter::merge_dialog_filter_changes(const DialogF
return !added_dialog_ids.insert(dialog_id).second; return !added_dialog_ids.insert(dialog_id).second;
}); });
}; };
remove_duplicates(new_filter->pinned_dialog_ids); remove_duplicates(new_filter->pinned_dialog_ids_);
remove_duplicates(new_filter->included_dialog_ids); remove_duplicates(new_filter->included_dialog_ids_);
remove_duplicates(new_filter->excluded_dialog_ids); remove_duplicates(new_filter->excluded_dialog_ids_);
} }
auto update_value = [](auto &new_value, const auto &old_server_value, const auto &new_server_value) { auto update_value = [](auto &new_value, const auto &old_server_value, const auto &new_server_value) {
@ -527,30 +528,33 @@ unique_ptr<DialogFilter> DialogFilter::merge_dialog_filter_changes(const DialogF
} }
}; };
update_value(new_filter->exclude_muted, old_server_filter->exclude_muted, new_server_filter->exclude_muted); update_value(new_filter->exclude_muted_, old_server_filter->exclude_muted_, new_server_filter->exclude_muted_);
update_value(new_filter->exclude_read, old_server_filter->exclude_read, new_server_filter->exclude_read); update_value(new_filter->exclude_read_, old_server_filter->exclude_read_, new_server_filter->exclude_read_);
update_value(new_filter->exclude_archived, old_server_filter->exclude_archived, new_server_filter->exclude_archived); update_value(new_filter->exclude_archived_, old_server_filter->exclude_archived_,
update_value(new_filter->include_contacts, old_server_filter->include_contacts, new_server_filter->include_contacts); new_server_filter->exclude_archived_);
update_value(new_filter->include_non_contacts, old_server_filter->include_non_contacts, update_value(new_filter->include_contacts_, old_server_filter->include_contacts_,
new_server_filter->include_non_contacts); new_server_filter->include_contacts_);
update_value(new_filter->include_bots, old_server_filter->include_bots, new_server_filter->include_bots); update_value(new_filter->include_non_contacts_, old_server_filter->include_non_contacts_,
update_value(new_filter->include_groups, old_server_filter->include_groups, new_server_filter->include_groups); new_server_filter->include_non_contacts_);
update_value(new_filter->include_channels, old_server_filter->include_channels, new_server_filter->include_channels); update_value(new_filter->include_bots_, old_server_filter->include_bots_, new_server_filter->include_bots_);
update_value(new_filter->include_groups_, old_server_filter->include_groups_, new_server_filter->include_groups_);
update_value(new_filter->include_channels_, old_server_filter->include_channels_,
new_server_filter->include_channels_);
if (new_filter->check_limits().is_error()) { if (new_filter->check_limits().is_error()) {
LOG(WARNING) << "Failed to merge local and remote changes in " << new_filter->dialog_filter_id LOG(WARNING) << "Failed to merge local and remote changes in " << new_filter->dialog_filter_id_
<< ", keep only local changes"; << ", keep only local changes";
*new_filter = *old_filter; *new_filter = *old_filter;
} }
update_value(new_filter->title, old_server_filter->title, new_server_filter->title); update_value(new_filter->title_, old_server_filter->title_, new_server_filter->title_);
update_value(new_filter->emoji, old_server_filter->emoji, new_server_filter->emoji); update_value(new_filter->emoji_, old_server_filter->emoji_, new_server_filter->emoji_);
return new_filter; return new_filter;
} }
void DialogFilter::sort_input_dialog_ids(const Td *td, const char *source) { void DialogFilter::sort_input_dialog_ids(const Td *td, const char *source) {
if (!include_contacts && !include_non_contacts && !include_bots && !include_groups && !include_channels) { if (!include_contacts_ && !include_non_contacts_ && !include_bots_ && !include_groups_ && !include_channels_) {
excluded_dialog_ids.clear(); excluded_dialog_ids_.clear();
} }
auto sort_input_dialog_ids = [contacts_manager = auto sort_input_dialog_ids = [contacts_manager =
@ -569,8 +573,8 @@ void DialogFilter::sort_input_dialog_ids(const Td *td, const char *source) {
}); });
}; };
sort_input_dialog_ids(excluded_dialog_ids); sort_input_dialog_ids(excluded_dialog_ids_);
sort_input_dialog_ids(included_dialog_ids); sort_input_dialog_ids(included_dialog_ids_);
FlatHashSet<DialogId, DialogIdHash> all_dialog_ids; FlatHashSet<DialogId, DialogIdHash> all_dialog_ids;
for_each_dialog([&](const InputDialogId &input_dialog_id) { for_each_dialog([&](const InputDialogId &input_dialog_id) {
@ -588,7 +592,7 @@ vector<FolderId> DialogFilter::get_folder_ids() const {
} }
bool DialogFilter::can_have_archived_dialogs() const { bool DialogFilter::can_have_archived_dialogs() const {
return !(exclude_archived && pinned_dialog_ids.empty() && included_dialog_ids.empty()); return !(exclude_archived_ && pinned_dialog_ids_.empty() && included_dialog_ids_.empty());
} }
bool DialogFilter::need_dialog(const Td *td, DialogId dialog_id, bool has_unread_mentions, bool is_muted, bool DialogFilter::need_dialog(const Td *td, DialogId dialog_id, bool has_unread_mentions, bool is_muted,
@ -596,7 +600,7 @@ bool DialogFilter::need_dialog(const Td *td, DialogId dialog_id, bool has_unread
if (is_dialog_included(dialog_id)) { if (is_dialog_included(dialog_id)) {
return true; return true;
} }
if (InputDialogId::contains(excluded_dialog_ids, dialog_id)) { if (InputDialogId::contains(excluded_dialog_ids_, dialog_id)) {
return false; return false;
} }
if (dialog_id.get_type() == DialogType::SecretChat) { if (dialog_id.get_type() == DialogType::SecretChat) {
@ -606,47 +610,47 @@ bool DialogFilter::need_dialog(const Td *td, DialogId dialog_id, bool has_unread
if (is_dialog_included(user_dialog_id)) { if (is_dialog_included(user_dialog_id)) {
return true; return true;
} }
if (InputDialogId::contains(excluded_dialog_ids, user_dialog_id)) { if (InputDialogId::contains(excluded_dialog_ids_, user_dialog_id)) {
return false; return false;
} }
} }
} }
if (!has_unread_mentions) { if (!has_unread_mentions) {
if (exclude_muted && is_muted) { if (exclude_muted_ && is_muted) {
return false; return false;
} }
if (exclude_read && !has_unread_messages) { if (exclude_read_ && !has_unread_messages) {
return false; return false;
} }
} }
if (exclude_archived && folder_id == FolderId::archive()) { if (exclude_archived_ && folder_id == FolderId::archive()) {
return false; return false;
} }
switch (dialog_id.get_type()) { switch (dialog_id.get_type()) {
case DialogType::User: { case DialogType::User: {
auto user_id = dialog_id.get_user_id(); auto user_id = dialog_id.get_user_id();
if (td->contacts_manager_->is_user_bot(user_id)) { if (td->contacts_manager_->is_user_bot(user_id)) {
return include_bots; return include_bots_;
} }
if (user_id == td->contacts_manager_->get_my_id() || td->contacts_manager_->is_user_contact(user_id)) { if (user_id == td->contacts_manager_->get_my_id() || td->contacts_manager_->is_user_contact(user_id)) {
return include_contacts; return include_contacts_;
} }
return include_non_contacts; return include_non_contacts_;
} }
case DialogType::Chat: case DialogType::Chat:
return include_groups; return include_groups_;
case DialogType::Channel: case DialogType::Channel:
return td->contacts_manager_->is_broadcast_channel(dialog_id.get_channel_id()) ? include_channels return td->contacts_manager_->is_broadcast_channel(dialog_id.get_channel_id()) ? include_channels_
: include_groups; : include_groups_;
case DialogType::SecretChat: { case DialogType::SecretChat: {
auto user_id = td->contacts_manager_->get_secret_chat_user_id(dialog_id.get_secret_chat_id()); auto user_id = td->contacts_manager_->get_secret_chat_user_id(dialog_id.get_secret_chat_id());
if (td->contacts_manager_->is_user_bot(user_id)) { if (td->contacts_manager_->is_user_bot(user_id)) {
return include_bots; return include_bots_;
} }
if (td->contacts_manager_->is_user_contact(user_id)) { if (td->contacts_manager_->is_user_contact(user_id)) {
return include_contacts; return include_contacts_;
} }
return include_non_contacts; return include_non_contacts_;
} }
default: default:
UNREACHABLE(); UNREACHABLE();
@ -656,7 +660,7 @@ bool DialogFilter::need_dialog(const Td *td, DialogId dialog_id, bool has_unread
vector<DialogFilterId> DialogFilter::get_dialog_filter_ids(const vector<unique_ptr<DialogFilter>> &dialog_filters, vector<DialogFilterId> DialogFilter::get_dialog_filter_ids(const vector<unique_ptr<DialogFilter>> &dialog_filters,
int32 main_dialog_list_position) { int32 main_dialog_list_position) {
auto result = transform(dialog_filters, [](const auto &dialog_filter) { return dialog_filter->dialog_filter_id; }); auto result = transform(dialog_filters, [](const auto &dialog_filter) { return dialog_filter->dialog_filter_id_; });
if (static_cast<size_t>(main_dialog_list_position) <= result.size()) { if (static_cast<size_t>(main_dialog_list_position) <= result.size()) {
result.insert(result.begin() + main_dialog_list_position, DialogFilterId()); result.insert(result.begin() + main_dialog_list_position, DialogFilterId());
} }
@ -686,20 +690,20 @@ bool DialogFilter::set_dialog_filters_order(vector<unique_ptr<DialogFilter>> &di
CHECK(dialog_filter_ids.size() == dialog_filters.size()); CHECK(dialog_filter_ids.size() == dialog_filters.size());
for (size_t i = 0; i < dialog_filters.size(); i++) { for (size_t i = 0; i < dialog_filters.size(); i++) {
for (size_t j = i; j < dialog_filters.size(); j++) { for (size_t j = i; j < dialog_filters.size(); j++) {
if (dialog_filters[j]->dialog_filter_id == dialog_filter_ids[i]) { if (dialog_filters[j]->dialog_filter_id_ == dialog_filter_ids[i]) {
if (i != j) { if (i != j) {
std::swap(dialog_filters[i], dialog_filters[j]); std::swap(dialog_filters[i], dialog_filters[j]);
} }
break; break;
} }
} }
CHECK(dialog_filters[i]->dialog_filter_id == dialog_filter_ids[i]); CHECK(dialog_filters[i]->dialog_filter_id_ == dialog_filter_ids[i]);
} }
return true; return true;
} }
bool DialogFilter::are_similar(const DialogFilter &lhs, const DialogFilter &rhs) { bool DialogFilter::are_similar(const DialogFilter &lhs, const DialogFilter &rhs) {
if (lhs.title == rhs.title) { if (lhs.title_ == rhs.title_) {
return true; return true;
} }
if (!are_flags_equal(lhs, rhs)) { if (!are_flags_equal(lhs, rhs)) {
@ -707,14 +711,14 @@ bool DialogFilter::are_similar(const DialogFilter &lhs, const DialogFilter &rhs)
} }
vector<InputDialogId> empty_input_dialog_ids; vector<InputDialogId> empty_input_dialog_ids;
if (InputDialogId::are_equivalent(lhs.excluded_dialog_ids, empty_input_dialog_ids) != if (InputDialogId::are_equivalent(lhs.excluded_dialog_ids_, empty_input_dialog_ids) !=
InputDialogId::are_equivalent(rhs.excluded_dialog_ids, empty_input_dialog_ids)) { InputDialogId::are_equivalent(rhs.excluded_dialog_ids_, empty_input_dialog_ids)) {
return false; return false;
} }
if ((InputDialogId::are_equivalent(lhs.pinned_dialog_ids, empty_input_dialog_ids) && if ((InputDialogId::are_equivalent(lhs.pinned_dialog_ids_, empty_input_dialog_ids) &&
InputDialogId::are_equivalent(lhs.included_dialog_ids, empty_input_dialog_ids)) != InputDialogId::are_equivalent(lhs.included_dialog_ids_, empty_input_dialog_ids)) !=
(InputDialogId::are_equivalent(rhs.pinned_dialog_ids, empty_input_dialog_ids) && (InputDialogId::are_equivalent(rhs.pinned_dialog_ids_, empty_input_dialog_ids) &&
InputDialogId::are_equivalent(rhs.included_dialog_ids, empty_input_dialog_ids))) { InputDialogId::are_equivalent(rhs.included_dialog_ids_, empty_input_dialog_ids))) {
return false; return false;
} }
@ -722,18 +726,19 @@ bool DialogFilter::are_similar(const DialogFilter &lhs, const DialogFilter &rhs)
} }
bool DialogFilter::are_equivalent(const DialogFilter &lhs, const DialogFilter &rhs) { bool DialogFilter::are_equivalent(const DialogFilter &lhs, const DialogFilter &rhs) {
return lhs.title == rhs.title && lhs.emoji == rhs.emoji && return lhs.title_ == rhs.title_ && lhs.emoji_ == rhs.emoji_ &&
InputDialogId::are_equivalent(lhs.pinned_dialog_ids, rhs.pinned_dialog_ids) && InputDialogId::are_equivalent(lhs.pinned_dialog_ids_, rhs.pinned_dialog_ids_) &&
InputDialogId::are_equivalent(lhs.included_dialog_ids, rhs.included_dialog_ids) && InputDialogId::are_equivalent(lhs.included_dialog_ids_, rhs.included_dialog_ids_) &&
InputDialogId::are_equivalent(lhs.excluded_dialog_ids, rhs.excluded_dialog_ids) && are_flags_equal(lhs, rhs); InputDialogId::are_equivalent(lhs.excluded_dialog_ids_, rhs.excluded_dialog_ids_) && are_flags_equal(lhs, rhs);
} }
StringBuilder &operator<<(StringBuilder &string_builder, const DialogFilter &filter) { StringBuilder &operator<<(StringBuilder &string_builder, const DialogFilter &filter) {
return string_builder << filter.dialog_filter_id << " (pinned " << filter.pinned_dialog_ids << ", included " return string_builder << filter.dialog_filter_id_ << " (pinned " << filter.pinned_dialog_ids_ << ", included "
<< filter.included_dialog_ids << ", excluded " << filter.excluded_dialog_ids << ", " << filter.included_dialog_ids_ << ", excluded " << filter.excluded_dialog_ids_ << ", "
<< filter.exclude_muted << ' ' << filter.exclude_read << ' ' << filter.exclude_archived << '/' << filter.exclude_muted_ << ' ' << filter.exclude_read_ << ' ' << filter.exclude_archived_
<< filter.include_contacts << ' ' << filter.include_non_contacts << ' ' << filter.include_bots << '/' << filter.include_contacts_ << ' ' << filter.include_non_contacts_ << ' '
<< ' ' << filter.include_groups << ' ' << filter.include_channels << ')'; << filter.include_bots_ << ' ' << filter.include_groups_ << ' ' << filter.include_channels_
<< ')';
} }
void DialogFilter::init_icon_names() { void DialogFilter::init_icon_names() {
@ -766,10 +771,10 @@ void DialogFilter::init_icon_names() {
} }
bool DialogFilter::are_flags_equal(const DialogFilter &lhs, const DialogFilter &rhs) { bool DialogFilter::are_flags_equal(const DialogFilter &lhs, const DialogFilter &rhs) {
return lhs.exclude_muted == rhs.exclude_muted && lhs.exclude_read == rhs.exclude_read && return lhs.exclude_muted_ == rhs.exclude_muted_ && lhs.exclude_read_ == rhs.exclude_read_ &&
lhs.exclude_archived == rhs.exclude_archived && lhs.include_contacts == rhs.include_contacts && lhs.exclude_archived_ == rhs.exclude_archived_ && lhs.include_contacts_ == rhs.include_contacts_ &&
lhs.include_non_contacts == rhs.include_non_contacts && lhs.include_bots == rhs.include_bots && lhs.include_non_contacts_ == rhs.include_non_contacts_ && lhs.include_bots_ == rhs.include_bots_ &&
lhs.include_groups == rhs.include_groups && lhs.include_channels == rhs.include_channels; lhs.include_groups_ == rhs.include_groups_ && lhs.include_channels_ == rhs.include_channels_;
} }
FlatHashMap<string, string> DialogFilter::emoji_to_icon_name_; FlatHashMap<string, string> DialogFilter::emoji_to_icon_name_;

View File

@ -46,11 +46,11 @@ class DialogFilter {
bool is_empty(bool for_server) const; bool is_empty(bool for_server) const;
const DialogFilterId &get_dialog_filter_id() const { const DialogFilterId &get_dialog_filter_id() const {
return dialog_filter_id; return dialog_filter_id_;
} }
const vector<InputDialogId> &get_pinned_dialog_ids() const { const vector<InputDialogId> &get_pinned_dialog_ids() const {
return pinned_dialog_ids; return pinned_dialog_ids_;
} }
bool is_dialog_pinned(DialogId dialog_id) const; bool is_dialog_pinned(DialogId dialog_id) const;
@ -108,20 +108,20 @@ class DialogFilter {
void parse(ParserT &parser); void parse(ParserT &parser);
private: private:
DialogFilterId dialog_filter_id; DialogFilterId dialog_filter_id_;
string title; string title_;
string emoji; string emoji_;
vector<InputDialogId> pinned_dialog_ids; vector<InputDialogId> pinned_dialog_ids_;
vector<InputDialogId> included_dialog_ids; vector<InputDialogId> included_dialog_ids_;
vector<InputDialogId> excluded_dialog_ids; vector<InputDialogId> excluded_dialog_ids_;
bool exclude_muted = false; bool exclude_muted_ = false;
bool exclude_read = false; bool exclude_read_ = false;
bool exclude_archived = false; bool exclude_archived_ = false;
bool include_contacts = false; bool include_contacts_ = false;
bool include_non_contacts = false; bool include_non_contacts_ = false;
bool include_bots = false; bool include_bots_ = false;
bool include_groups = false; bool include_groups_ = false;
bool include_channels = false; bool include_channels_ = false;
static FlatHashMap<string, string> emoji_to_icon_name_; static FlatHashMap<string, string> emoji_to_icon_name_;
static FlatHashMap<string, string> icon_name_to_emoji_; static FlatHashMap<string, string> icon_name_to_emoji_;
@ -136,9 +136,9 @@ class DialogFilter {
}; };
inline bool operator==(const DialogFilter &lhs, const DialogFilter &rhs) { inline bool operator==(const DialogFilter &lhs, const DialogFilter &rhs) {
return lhs.dialog_filter_id == rhs.dialog_filter_id && lhs.title == rhs.title && lhs.emoji == rhs.emoji && return lhs.dialog_filter_id_ == rhs.dialog_filter_id_ && lhs.title_ == rhs.title_ && lhs.emoji_ == rhs.emoji_ &&
lhs.pinned_dialog_ids == rhs.pinned_dialog_ids && lhs.included_dialog_ids == rhs.included_dialog_ids && lhs.pinned_dialog_ids_ == rhs.pinned_dialog_ids_ && lhs.included_dialog_ids_ == rhs.included_dialog_ids_ &&
lhs.excluded_dialog_ids == rhs.excluded_dialog_ids && DialogFilter::are_flags_equal(lhs, rhs); lhs.excluded_dialog_ids_ == rhs.excluded_dialog_ids_ && DialogFilter::are_flags_equal(lhs, rhs);
} }
inline bool operator!=(const DialogFilter &lhs, const DialogFilter &rhs) { inline bool operator!=(const DialogFilter &lhs, const DialogFilter &rhs) {

View File

@ -16,34 +16,34 @@ namespace td {
template <class StorerT> template <class StorerT>
void DialogFilter::store(StorerT &storer) const { void DialogFilter::store(StorerT &storer) const {
using td::store; using td::store;
bool has_pinned_dialog_ids = !pinned_dialog_ids.empty(); bool has_pinned_dialog_ids = !pinned_dialog_ids_.empty();
bool has_included_dialog_ids = !included_dialog_ids.empty(); bool has_included_dialog_ids = !included_dialog_ids_.empty();
bool has_excluded_dialog_ids = !excluded_dialog_ids.empty(); bool has_excluded_dialog_ids = !excluded_dialog_ids_.empty();
BEGIN_STORE_FLAGS(); BEGIN_STORE_FLAGS();
STORE_FLAG(exclude_muted); STORE_FLAG(exclude_muted_);
STORE_FLAG(exclude_read); STORE_FLAG(exclude_read_);
STORE_FLAG(exclude_archived); STORE_FLAG(exclude_archived_);
STORE_FLAG(include_contacts); STORE_FLAG(include_contacts_);
STORE_FLAG(include_non_contacts); STORE_FLAG(include_non_contacts_);
STORE_FLAG(include_bots); STORE_FLAG(include_bots_);
STORE_FLAG(include_groups); STORE_FLAG(include_groups_);
STORE_FLAG(include_channels); STORE_FLAG(include_channels_);
STORE_FLAG(has_pinned_dialog_ids); STORE_FLAG(has_pinned_dialog_ids);
STORE_FLAG(has_included_dialog_ids); STORE_FLAG(has_included_dialog_ids);
STORE_FLAG(has_excluded_dialog_ids); STORE_FLAG(has_excluded_dialog_ids);
END_STORE_FLAGS(); END_STORE_FLAGS();
store(dialog_filter_id, storer); store(dialog_filter_id_, storer);
store(title, storer); store(title_, storer);
store(emoji, storer); store(emoji_, storer);
if (has_pinned_dialog_ids) { if (has_pinned_dialog_ids) {
store(pinned_dialog_ids, storer); store(pinned_dialog_ids_, storer);
} }
if (has_included_dialog_ids) { if (has_included_dialog_ids) {
store(included_dialog_ids, storer); store(included_dialog_ids_, storer);
} }
if (has_excluded_dialog_ids) { if (has_excluded_dialog_ids) {
store(excluded_dialog_ids, storer); store(excluded_dialog_ids_, storer);
} }
} }
@ -54,30 +54,30 @@ void DialogFilter::parse(ParserT &parser) {
bool has_included_dialog_ids; bool has_included_dialog_ids;
bool has_excluded_dialog_ids; bool has_excluded_dialog_ids;
BEGIN_PARSE_FLAGS(); BEGIN_PARSE_FLAGS();
PARSE_FLAG(exclude_muted); PARSE_FLAG(exclude_muted_);
PARSE_FLAG(exclude_read); PARSE_FLAG(exclude_read_);
PARSE_FLAG(exclude_archived); PARSE_FLAG(exclude_archived_);
PARSE_FLAG(include_contacts); PARSE_FLAG(include_contacts_);
PARSE_FLAG(include_non_contacts); PARSE_FLAG(include_non_contacts_);
PARSE_FLAG(include_bots); PARSE_FLAG(include_bots_);
PARSE_FLAG(include_groups); PARSE_FLAG(include_groups_);
PARSE_FLAG(include_channels); PARSE_FLAG(include_channels_);
PARSE_FLAG(has_pinned_dialog_ids); PARSE_FLAG(has_pinned_dialog_ids);
PARSE_FLAG(has_included_dialog_ids); PARSE_FLAG(has_included_dialog_ids);
PARSE_FLAG(has_excluded_dialog_ids); PARSE_FLAG(has_excluded_dialog_ids);
END_PARSE_FLAGS(); END_PARSE_FLAGS();
parse(dialog_filter_id, parser); parse(dialog_filter_id_, parser);
parse(title, parser); parse(title_, parser);
parse(emoji, parser); parse(emoji_, parser);
if (has_pinned_dialog_ids) { if (has_pinned_dialog_ids) {
parse(pinned_dialog_ids, parser); parse(pinned_dialog_ids_, parser);
} }
if (has_included_dialog_ids) { if (has_included_dialog_ids) {
parse(included_dialog_ids, parser); parse(included_dialog_ids_, parser);
} }
if (has_excluded_dialog_ids) { if (has_excluded_dialog_ids) {
parse(excluded_dialog_ids, parser); parse(excluded_dialog_ids_, parser);
} }
} }