Move set_dialog_filters_order to DialogFilter.
This commit is contained in:
parent
f792137692
commit
ecc57d7b93
@ -20,6 +20,8 @@
|
||||
#include "td/utils/logging.h"
|
||||
#include "td/utils/misc.h"
|
||||
|
||||
#include <utility>
|
||||
|
||||
namespace td {
|
||||
|
||||
int32 DialogFilter::get_max_filter_dialogs() {
|
||||
@ -619,6 +621,41 @@ vector<DialogFilterId> DialogFilter::get_dialog_filter_ids(const vector<unique_p
|
||||
return result;
|
||||
}
|
||||
|
||||
bool DialogFilter::set_dialog_filters_order(vector<unique_ptr<DialogFilter>> &dialog_filters,
|
||||
vector<DialogFilterId> dialog_filter_ids) {
|
||||
auto old_dialog_filter_ids = get_dialog_filter_ids(dialog_filters, -1);
|
||||
if (old_dialog_filter_ids == dialog_filter_ids) {
|
||||
return false;
|
||||
}
|
||||
LOG(INFO) << "Reorder chat filters from " << old_dialog_filter_ids << " to " << dialog_filter_ids;
|
||||
|
||||
if (dialog_filter_ids.size() != old_dialog_filter_ids.size()) {
|
||||
for (auto dialog_filter_id : old_dialog_filter_ids) {
|
||||
if (!td::contains(dialog_filter_ids, dialog_filter_id)) {
|
||||
dialog_filter_ids.push_back(dialog_filter_id);
|
||||
}
|
||||
}
|
||||
CHECK(dialog_filter_ids.size() == old_dialog_filter_ids.size());
|
||||
}
|
||||
if (old_dialog_filter_ids == dialog_filter_ids) {
|
||||
return false;
|
||||
}
|
||||
|
||||
CHECK(dialog_filter_ids.size() == dialog_filters.size());
|
||||
for (size_t i = 0; i < dialog_filters.size(); i++) {
|
||||
for (size_t j = i; j < dialog_filters.size(); j++) {
|
||||
if (dialog_filters[j]->dialog_filter_id == dialog_filter_ids[i]) {
|
||||
if (i != j) {
|
||||
std::swap(dialog_filters[i], dialog_filters[j]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
CHECK(dialog_filters[i]->dialog_filter_id == dialog_filter_ids[i]);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DialogFilter::are_similar(const DialogFilter &lhs, const DialogFilter &rhs) {
|
||||
if (lhs.title == rhs.title) {
|
||||
return true;
|
||||
|
@ -99,6 +99,9 @@ class DialogFilter {
|
||||
static vector<DialogFilterId> get_dialog_filter_ids(const vector<unique_ptr<DialogFilter>> &dialog_filters,
|
||||
int32 main_dialog_list_position);
|
||||
|
||||
static bool set_dialog_filters_order(vector<unique_ptr<DialogFilter>> &dialog_filters,
|
||||
vector<DialogFilterId> dialog_filter_ids);
|
||||
|
||||
static bool are_similar(const DialogFilter &lhs, const DialogFilter &rhs);
|
||||
|
||||
static bool are_equivalent(const DialogFilter &lhs, const DialogFilter &rhs);
|
||||
|
@ -17899,7 +17899,7 @@ void MessagesManager::on_get_dialog_filters(Result<vector<tl_object_ptr<telegram
|
||||
}
|
||||
}
|
||||
is_changed = true;
|
||||
set_dialog_filters_order(dialog_filters_, new_dialog_filter_order);
|
||||
DialogFilter::set_dialog_filters_order(dialog_filters_, new_dialog_filter_order);
|
||||
}
|
||||
|
||||
server_dialog_filters_ = std::move(new_server_dialog_filters);
|
||||
@ -19893,7 +19893,7 @@ void MessagesManager::reorder_dialog_filters(vector<DialogFilterId> dialog_filte
|
||||
main_dialog_list_position = 0;
|
||||
}
|
||||
|
||||
if (set_dialog_filters_order(dialog_filters_, dialog_filter_ids) ||
|
||||
if (DialogFilter::set_dialog_filters_order(dialog_filters_, dialog_filter_ids) ||
|
||||
main_dialog_list_position != main_dialog_list_position_) {
|
||||
main_dialog_list_position_ = main_dialog_list_position;
|
||||
|
||||
@ -19924,7 +19924,7 @@ void MessagesManager::on_reorder_dialog_filters(vector<DialogFilterId> dialog_fi
|
||||
if (result.is_error()) {
|
||||
// TODO rollback dialog_filters_ changes if error isn't 429
|
||||
} else {
|
||||
if (set_dialog_filters_order(server_dialog_filters_, std::move(dialog_filter_ids)) ||
|
||||
if (DialogFilter::set_dialog_filters_order(server_dialog_filters_, std::move(dialog_filter_ids)) ||
|
||||
server_main_dialog_list_position_ != main_dialog_list_position) {
|
||||
server_main_dialog_list_position_ = main_dialog_list_position;
|
||||
save_dialog_filters();
|
||||
@ -19935,41 +19935,6 @@ void MessagesManager::on_reorder_dialog_filters(vector<DialogFilterId> dialog_fi
|
||||
synchronize_dialog_filters();
|
||||
}
|
||||
|
||||
bool MessagesManager::set_dialog_filters_order(vector<unique_ptr<DialogFilter>> &dialog_filters,
|
||||
vector<DialogFilterId> dialog_filter_ids) {
|
||||
auto old_dialog_filter_ids = DialogFilter::get_dialog_filter_ids(dialog_filters, -1);
|
||||
if (old_dialog_filter_ids == dialog_filter_ids) {
|
||||
return false;
|
||||
}
|
||||
LOG(INFO) << "Reorder chat filters from " << old_dialog_filter_ids << " to " << dialog_filter_ids;
|
||||
|
||||
if (dialog_filter_ids.size() != old_dialog_filter_ids.size()) {
|
||||
for (auto dialog_filter_id : old_dialog_filter_ids) {
|
||||
if (!td::contains(dialog_filter_ids, dialog_filter_id)) {
|
||||
dialog_filter_ids.push_back(dialog_filter_id);
|
||||
}
|
||||
}
|
||||
CHECK(dialog_filter_ids.size() == old_dialog_filter_ids.size());
|
||||
}
|
||||
if (old_dialog_filter_ids == dialog_filter_ids) {
|
||||
return false;
|
||||
}
|
||||
|
||||
CHECK(dialog_filter_ids.size() == dialog_filters.size());
|
||||
for (size_t i = 0; i < dialog_filters.size(); i++) {
|
||||
for (size_t j = i; j < dialog_filters.size(); j++) {
|
||||
if (dialog_filters[j]->dialog_filter_id == dialog_filter_ids[i]) {
|
||||
if (i != j) {
|
||||
std::swap(dialog_filters[i], dialog_filters[j]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
CHECK(dialog_filters[i]->dialog_filter_id == dialog_filter_ids[i]);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void MessagesManager::add_dialog_filter(unique_ptr<DialogFilter> dialog_filter, bool at_beginning, const char *source) {
|
||||
if (td_->auth_manager_->is_bot()) {
|
||||
// just in case
|
||||
|
@ -2884,9 +2884,6 @@ class MessagesManager final : public Actor {
|
||||
|
||||
int32 delete_dialog_filter(DialogFilterId dialog_filter_id, const char *source);
|
||||
|
||||
static bool set_dialog_filters_order(vector<unique_ptr<DialogFilter>> &dialog_filters,
|
||||
vector<DialogFilterId> dialog_filter_ids);
|
||||
|
||||
const DialogFilter *get_server_dialog_filter(DialogFilterId dialog_filter_id) const;
|
||||
|
||||
DialogFilter *get_dialog_filter(DialogFilterId dialog_filter_id);
|
||||
|
Loading…
x
Reference in New Issue
Block a user