Output main chat list position along with all folder identifiers.
This commit is contained in:
parent
ce09421718
commit
7df7dfcd62
@ -13635,8 +13635,9 @@ void MessagesManager::init() {
|
|||||||
for (auto &dialog_filter : log_event.dialog_filters_out) {
|
for (auto &dialog_filter : log_event.dialog_filters_out) {
|
||||||
add_dialog_filter(std::move(dialog_filter), false, "binlog");
|
add_dialog_filter(std::move(dialog_filter), false, "binlog");
|
||||||
}
|
}
|
||||||
LOG(INFO) << "Loaded server chat filters " << get_dialog_filter_ids(server_dialog_filters_)
|
LOG(INFO) << "Loaded server chat filters "
|
||||||
<< " and local chat filters " << get_dialog_filter_ids(dialog_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 {
|
} else {
|
||||||
LOG(ERROR) << "Failed to parse chat filters from binlog";
|
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;
|
bool is_changed = false;
|
||||||
dialog_filters_updated_date_ = G()->unix_time();
|
dialog_filters_updated_date_ = G()->unix_time();
|
||||||
if (server_dialog_filters_ != new_server_dialog_filters) {
|
if (server_dialog_filters_ != new_server_dialog_filters) {
|
||||||
LOG(INFO) << "Change server chat filters from " << get_dialog_filter_ids(server_dialog_filters_) << " to "
|
LOG(INFO) << "Change server chat filters from "
|
||||||
<< get_dialog_filter_ids(new_server_dialog_filters);
|
<< 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;
|
FlatHashMap<DialogFilterId, const DialogFilter *, DialogFilterIdHash> old_server_dialog_filters;
|
||||||
for (const auto &filter : server_dialog_filters_) {
|
for (const auto &filter : server_dialog_filters_) {
|
||||||
old_server_dialog_filters.emplace(filter->dialog_filter_id, filter.get());
|
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 = [&] {
|
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());
|
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());
|
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;
|
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
|
// need delete dialog filter on server
|
||||||
return true;
|
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
|
// need reorder dialog filters on server
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -17937,8 +17939,9 @@ void MessagesManager::synchronize_dialog_filters() {
|
|||||||
return reload_dialog_filters();
|
return reload_dialog_filters();
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG(INFO) << "Synchronize chat filter changes with server having local " << get_dialog_filter_ids(dialog_filters_)
|
LOG(INFO) << "Synchronize chat filter changes with server having local "
|
||||||
<< " and server " << get_dialog_filter_ids(server_dialog_filters_);
|
<< 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_) {
|
for (const auto &server_dialog_filter : server_dialog_filters_) {
|
||||||
if (get_dialog_filter(server_dialog_filter->dialog_filter_id) == nullptr) {
|
if (get_dialog_filter(server_dialog_filter->dialog_filter_id) == nullptr) {
|
||||||
return delete_dialog_filter_on_server(server_dialog_filter->dialog_filter_id);
|
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();
|
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_) {
|
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);
|
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,
|
bool MessagesManager::set_dialog_filters_order(vector<unique_ptr<DialogFilter>> &dialog_filters,
|
||||||
vector<DialogFilterId> dialog_filter_ids) {
|
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) {
|
if (old_dialog_filter_ids == dialog_filter_ids) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -31432,8 +31435,9 @@ void MessagesManager::save_dialog_filters() {
|
|||||||
log_event.server_dialog_filters_in = &server_dialog_filters_;
|
log_event.server_dialog_filters_in = &server_dialog_filters_;
|
||||||
log_event.dialog_filters_in = &dialog_filters_;
|
log_event.dialog_filters_in = &dialog_filters_;
|
||||||
|
|
||||||
LOG(INFO) << "Save server chat filters " << get_dialog_filter_ids(server_dialog_filters_)
|
LOG(INFO) << "Save server chat filters "
|
||||||
<< " and local chat filters " << get_dialog_filter_ids(dialog_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());
|
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;
|
return current_server_position;
|
||||||
}
|
}
|
||||||
|
|
||||||
vector<DialogFilterId> MessagesManager::get_dialog_filter_ids(const vector<unique_ptr<DialogFilter>> &dialog_filters) {
|
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; });
|
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) {
|
vector<FolderId> MessagesManager::get_dialog_filter_folder_ids(const DialogFilter *filter) {
|
||||||
|
@ -2882,7 +2882,8 @@ class MessagesManager final : public Actor {
|
|||||||
|
|
||||||
int32 get_server_main_dialog_list_position() const;
|
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);
|
static vector<FolderId> get_dialog_filter_folder_ids(const DialogFilter *filter);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user