Keep in chat list empty joined basic groups.

This commit is contained in:
levlam 2022-04-08 15:35:21 +03:00
parent 1302aa2520
commit 161d34fc15
3 changed files with 40 additions and 16 deletions

View File

@ -14646,6 +14646,14 @@ void ContactsManager::send_get_chat_full_query(ChatId chat_id, Promise<Unit> &&p
get_chat_full_queries_.add_query(DialogId(chat_id).get(), std::move(send_query), std::move(promise));
}
int32 ContactsManager::get_chat_date(ChatId chat_id) const {
auto c = get_chat(chat_id);
if (c == nullptr) {
return 0;
}
return c->date;
}
int32 ContactsManager::get_chat_participant_count(ChatId chat_id) const {
auto c = get_chat(chat_id);
if (c == nullptr) {

View File

@ -496,6 +496,7 @@ class ContactsManager final : public Actor {
FileSourceId get_chat_full_file_source_id(ChatId chat_id);
void reload_chat_full(ChatId chat_id, Promise<Unit> &&promise);
int32 get_chat_date(ChatId chat_id) const;
int32 get_chat_participant_count(ChatId chat_id) const;
bool get_chat_is_active(ChatId chat_id) const;
ChannelId get_chat_migrated_to_channel_id(ChatId chat_id) const;

View File

@ -37139,24 +37139,39 @@ void MessagesManager::update_dialog_pos(Dialog *d, const char *source, bool need
new_order = draft_order;
}
}
auto dialog_type = d->dialog_id.get_type();
if (dialog_type == DialogType::Channel) {
auto date = td_->contacts_manager_->get_channel_date(d->dialog_id.get_channel_id());
LOG(INFO) << "Join of channel at " << date << " found";
int64 join_order = get_dialog_order(MessageId(), date);
if (join_order > new_order) {
new_order = join_order;
}
}
if (dialog_type == DialogType::SecretChat) {
auto date = td_->contacts_manager_->get_secret_chat_date(d->dialog_id.get_secret_chat_id());
if (date != 0 && !is_deleted_secret_chat(d)) {
LOG(INFO) << "Creation of secret chat at " << date << " found";
int64 creation_order = get_dialog_order(MessageId(), date);
if (creation_order > new_order) {
new_order = creation_order;
switch (d->dialog_id.get_type()) {
case DialogType::Chat: {
auto chat_id = d->dialog_id.get_chat_id();
auto date = td_->contacts_manager_->get_chat_date(chat_id);
LOG(INFO) << "Creation at " << date << " found";
int64 join_order = get_dialog_order(MessageId(), date);
if (join_order > new_order && td_->contacts_manager_->get_chat_status(chat_id).is_member()) {
new_order = join_order;
}
break;
}
case DialogType::Channel: {
auto date = td_->contacts_manager_->get_channel_date(d->dialog_id.get_channel_id());
LOG(INFO) << "Join at " << date << " found";
int64 join_order = get_dialog_order(MessageId(), date);
if (join_order > new_order) {
new_order = join_order;
}
break;
}
case DialogType::SecretChat: {
auto date = td_->contacts_manager_->get_secret_chat_date(d->dialog_id.get_secret_chat_id());
if (date != 0 && !is_deleted_secret_chat(d)) {
LOG(INFO) << "Creation at " << date << " found";
int64 creation_order = get_dialog_order(MessageId(), date);
if (creation_order > new_order) {
new_order = creation_order;
}
}
break;
}
default:
break;
}
if (new_order == DEFAULT_ORDER && !d->is_empty) {
LOG(INFO) << "There are no known messages in the chat, just leave it where it is";