Output main chat list position along with all folder identifiers.

This commit is contained in:
levlam 2022-11-04 17:40:44 +03:00
parent ce09421718
commit 7df7dfcd62
2 changed files with 25 additions and 15 deletions

View File

@ -13635,8 +13635,9 @@ void MessagesManager::init() {
for (auto &dialog_filter : log_event.dialog_filters_out) {
add_dialog_filter(std::move(dialog_filter), false, "binlog");
}
LOG(INFO) << "Loaded server chat filters " << get_dialog_filter_ids(server_dialog_filters_)
<< " and local chat filters " << get_dialog_filter_ids(dialog_filters_);
LOG(INFO) << "Loaded server chat filters "
<< get_dialog_filter_ids(server_dialog_filters_, server_main_dialog_list_position_)
<< " and local chat filters " << get_dialog_filter_ids(dialog_filters_, main_dialog_list_position_);
} else {
LOG(ERROR) << "Failed to parse chat filters from binlog";
}
@ -17759,8 +17760,9 @@ void MessagesManager::on_get_dialog_filters(Result<vector<tl_object_ptr<telegram
bool is_changed = false;
dialog_filters_updated_date_ = G()->unix_time();
if (server_dialog_filters_ != new_server_dialog_filters) {
LOG(INFO) << "Change server chat filters from " << get_dialog_filter_ids(server_dialog_filters_) << " to "
<< get_dialog_filter_ids(new_server_dialog_filters);
LOG(INFO) << "Change server chat filters from "
<< get_dialog_filter_ids(server_dialog_filters_, server_main_dialog_list_position_) << " to "
<< get_dialog_filter_ids(new_server_dialog_filters, server_main_dialog_list_position);
FlatHashMap<DialogFilterId, const DialogFilter *, DialogFilterIdHash> old_server_dialog_filters;
for (const auto &filter : server_dialog_filters_) {
old_server_dialog_filters.emplace(filter->dialog_filter_id, filter.get());
@ -17827,7 +17829,7 @@ void MessagesManager::on_get_dialog_filters(Result<vector<tl_object_ptr<telegram
}
}
bool is_order_changed = [&] {
vector<DialogFilterId> new_server_dialog_filter_ids = get_dialog_filter_ids(new_server_dialog_filters);
vector<DialogFilterId> new_server_dialog_filter_ids = get_dialog_filter_ids(new_server_dialog_filters, -1);
CHECK(new_server_dialog_filter_ids.size() >= left_old_server_dialog_filter_ids.size());
new_server_dialog_filter_ids.resize(left_old_server_dialog_filter_ids.size());
return new_server_dialog_filter_ids != left_old_server_dialog_filter_ids;
@ -17910,7 +17912,7 @@ bool MessagesManager::need_synchronize_dialog_filters() const {
// need delete dialog filter on server
return true;
}
if (dialog_filter_ids != get_dialog_filter_ids(server_dialog_filters_)) {
if (dialog_filter_ids != get_dialog_filter_ids(server_dialog_filters_, -1)) {
// need reorder dialog filters on server
return true;
}
@ -17937,8 +17939,9 @@ void MessagesManager::synchronize_dialog_filters() {
return reload_dialog_filters();
}
LOG(INFO) << "Synchronize chat filter changes with server having local " << get_dialog_filter_ids(dialog_filters_)
<< " and server " << get_dialog_filter_ids(server_dialog_filters_);
LOG(INFO) << "Synchronize chat filter changes with server having local "
<< get_dialog_filter_ids(dialog_filters_, main_dialog_list_position_) << " and server "
<< get_dialog_filter_ids(server_dialog_filters_, server_main_dialog_list_position_);
for (const auto &server_dialog_filter : server_dialog_filters_) {
if (get_dialog_filter(server_dialog_filter->dialog_filter_id) == nullptr) {
return delete_dialog_filter_on_server(server_dialog_filter->dialog_filter_id);
@ -17959,7 +17962,7 @@ void MessagesManager::synchronize_dialog_filters() {
}
auto server_main_dialog_list_position = get_server_main_dialog_list_position();
if (dialog_filter_ids != get_dialog_filter_ids(server_dialog_filters_) ||
if (dialog_filter_ids != get_dialog_filter_ids(server_dialog_filters_, -1) ||
server_main_dialog_list_position != server_main_dialog_list_position_) {
return reorder_dialog_filters_on_server(std::move(dialog_filter_ids), server_main_dialog_list_position);
}
@ -19906,7 +19909,7 @@ void MessagesManager::on_reorder_dialog_filters(vector<DialogFilterId> dialog_fi
bool MessagesManager::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);
auto old_dialog_filter_ids = get_dialog_filter_ids(dialog_filters, -1);
if (old_dialog_filter_ids == dialog_filter_ids) {
return false;
}
@ -31432,8 +31435,9 @@ void MessagesManager::save_dialog_filters() {
log_event.server_dialog_filters_in = &server_dialog_filters_;
log_event.dialog_filters_in = &dialog_filters_;
LOG(INFO) << "Save server chat filters " << get_dialog_filter_ids(server_dialog_filters_)
<< " and local chat filters " << get_dialog_filter_ids(dialog_filters_);
LOG(INFO) << "Save server chat filters "
<< get_dialog_filter_ids(server_dialog_filters_, server_main_dialog_list_position_)
<< " and local chat filters " << get_dialog_filter_ids(dialog_filters_, main_dialog_list_position_);
G()->td_db()->get_binlog_pmc()->set("dialog_filters", log_event_store(log_event).as_slice().str());
}
@ -38508,8 +38512,13 @@ int32 MessagesManager::get_server_main_dialog_list_position() const {
return current_server_position;
}
vector<DialogFilterId> MessagesManager::get_dialog_filter_ids(const vector<unique_ptr<DialogFilter>> &dialog_filters) {
return transform(dialog_filters, [](const auto &dialog_filter) { return dialog_filter->dialog_filter_id; });
vector<DialogFilterId> MessagesManager::get_dialog_filter_ids(const vector<unique_ptr<DialogFilter>> &dialog_filters,
int32 main_dialog_list_position) {
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()) {
result.insert(result.begin() + main_dialog_list_position, DialogFilterId());
}
return result;
}
vector<FolderId> MessagesManager::get_dialog_filter_folder_ids(const DialogFilter *filter) {

View File

@ -2882,7 +2882,8 @@ class MessagesManager final : public Actor {
int32 get_server_main_dialog_list_position() const;
static vector<DialogFilterId> get_dialog_filter_ids(const vector<unique_ptr<DialogFilter>> &dialog_filters);
static vector<DialogFilterId> get_dialog_filter_ids(const vector<unique_ptr<DialogFilter>> &dialog_filters,
int32 main_dialog_list_position);
static vector<FolderId> get_dialog_filter_folder_ids(const DialogFilter *filter);