Fix total_count when receive full member list.
GitOrigin-RevId: 65d757a8489d5f5207e43d267b7177cc97c95950
This commit is contained in:
parent
97d3485753
commit
27f6634c50
@ -7514,6 +7514,8 @@ void ContactsManager::on_get_channel_participants_success(
|
|||||||
int32 total_count, vector<tl_object_ptr<telegram_api::ChannelParticipant>> &&participants) {
|
int32 total_count, vector<tl_object_ptr<telegram_api::ChannelParticipant>> &&participants) {
|
||||||
LOG(INFO) << "Receive " << participants.size() << " members in " << channel_id;
|
LOG(INFO) << "Receive " << participants.size() << " members in " << channel_id;
|
||||||
|
|
||||||
|
bool is_full = offset == 0 && static_cast<int32>(participants.size()) < limit && total_count < limit;
|
||||||
|
|
||||||
vector<DialogParticipant> result;
|
vector<DialogParticipant> result;
|
||||||
for (auto &participant_ptr : participants) {
|
for (auto &participant_ptr : participants) {
|
||||||
result.push_back(get_dialog_participant(channel_id, std::move(participant_ptr)));
|
result.push_back(get_dialog_participant(channel_id, std::move(participant_ptr)));
|
||||||
@ -7532,14 +7534,16 @@ void ContactsManager::on_get_channel_participants_success(
|
|||||||
LOG(ERROR) << "Receive total_count = " << total_count << ", but have at least " << result.size() << " members in "
|
LOG(ERROR) << "Receive total_count = " << total_count << ", but have at least " << result.size() << " members in "
|
||||||
<< channel_id;
|
<< channel_id;
|
||||||
total_count = static_cast<int32>(result.size());
|
total_count = static_cast<int32>(result.size());
|
||||||
|
} else if (is_full && total_count > static_cast<int32>(result.size())) {
|
||||||
|
LOG(ERROR) << "Fix total member count from " << total_count << " to " << result.size();
|
||||||
|
total_count = static_cast<int32>(result.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto max_participant_count = get_channel_type(channel_id) == ChannelType::Megagroup ? 9950 : 195;
|
const auto max_participant_count = get_channel_type(channel_id) == ChannelType::Megagroup ? 9950 : 195;
|
||||||
auto participant_count =
|
auto participant_count =
|
||||||
filter.is_recent() && total_count != 0 && total_count < max_participant_count ? total_count : -1;
|
filter.is_recent() && total_count != 0 && total_count < max_participant_count ? total_count : -1;
|
||||||
int32 administrator_count = filter.is_administrators() ? total_count : -1;
|
int32 administrator_count = filter.is_administrators() ? total_count : -1;
|
||||||
if (offset == 0 && static_cast<int32>(participants.size()) < limit &&
|
if (is_full && (filter.is_administrators() || filter.is_bots() || filter.is_recent())) {
|
||||||
(filter.is_administrators() || filter.is_bots() || filter.is_recent())) {
|
|
||||||
vector<UserId> administrator_user_ids;
|
vector<UserId> administrator_user_ids;
|
||||||
vector<UserId> bot_user_ids;
|
vector<UserId> bot_user_ids;
|
||||||
{
|
{
|
||||||
@ -9541,6 +9545,9 @@ std::pair<int32, vector<DialogParticipant>> ContactsManager::get_channel_partici
|
|||||||
promise.set_error(Status::Error(3, "Parameter limit must be positive"));
|
promise.set_error(Status::Error(3, "Parameter limit must be positive"));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
if (limit > MAX_GET_CHANNEL_PARTICIPANTS) {
|
||||||
|
limit = MAX_GET_CHANNEL_PARTICIPANTS;
|
||||||
|
}
|
||||||
|
|
||||||
if (offset < 0) {
|
if (offset < 0) {
|
||||||
promise.set_error(Status::Error(3, "Parameter offset must be non-negative"));
|
promise.set_error(Status::Error(3, "Parameter offset must be non-negative"));
|
||||||
|
@ -713,6 +713,7 @@ class ContactsManager : public Actor {
|
|||||||
static constexpr size_t MAX_NAME_LENGTH = 64; // server side limit for first/last name
|
static constexpr size_t MAX_NAME_LENGTH = 64; // server side limit for first/last name
|
||||||
static constexpr size_t MAX_DESCRIPTION_LENGTH = 255; // server side limit for channel description
|
static constexpr size_t MAX_DESCRIPTION_LENGTH = 255; // server side limit for channel description
|
||||||
static constexpr size_t MAX_BIO_LENGTH = 70; // server side limit
|
static constexpr size_t MAX_BIO_LENGTH = 70; // server side limit
|
||||||
|
static constexpr size_t MAX_GET_CHANNEL_PARTICIPANTS = 200; // server side limit
|
||||||
|
|
||||||
static constexpr int32 USER_FLAG_HAS_ACCESS_HASH = 1 << 0;
|
static constexpr int32 USER_FLAG_HAS_ACCESS_HASH = 1 << 0;
|
||||||
static constexpr int32 USER_FLAG_HAS_FIRST_NAME = 1 << 1;
|
static constexpr int32 USER_FLAG_HAS_FIRST_NAME = 1 << 1;
|
||||||
|
Reference in New Issue
Block a user