Make ContactsManager struct declarations private.

This commit is contained in:
levlam 2021-01-16 19:23:57 +03:00
parent dda1b62655
commit 3ae02a64c1
2 changed files with 361 additions and 342 deletions

View File

@ -14,6 +14,8 @@
#include "td/telegram/ConfigShared.h"
#include "td/telegram/Dependencies.h"
#include "td/telegram/DeviceTokenManager.h"
#include "td/telegram/DialogInviteLink.h"
#include "td/telegram/DialogLocation.h"
#include "td/telegram/FileReferenceManager.h"
#include "td/telegram/files/FileManager.h"
#include "td/telegram/files/FileType.h"
@ -30,6 +32,7 @@
#include "td/telegram/PasswordManager.h"
#include "td/telegram/Photo.h"
#include "td/telegram/Photo.hpp"
#include "td/telegram/RestrictionReason.h"
#include "td/telegram/SecretChatActor.h"
#include "td/telegram/ServerMessageId.h"
#include "td/telegram/StickerSetId.hpp"
@ -1670,7 +1673,7 @@ class GetExportedChatInvitesQuery : public Td::ResultHandler {
flags |= telegram_api::messages_getExportedChatInvites::OFFSET_LINK_MASK;
}
send_query(G()->net_query_creator().create(telegram_api::messages_getExportedChatInvites(
flags, std::move(input_peer), std::move(input_user), offset_invite_link, limit)));
flags, false /*ignored*/, std::move(input_peer), std::move(input_user), offset_invite_link, limit)));
}
void on_result(uint64 id, BufferSlice packet) override {
@ -3005,14 +3008,6 @@ class LoadAsyncGraphQuery : public Td::ResultHandler {
}
};
bool ContactsManager::UserFull::is_expired() const {
return expires_at < Time::now();
}
bool ContactsManager::ChannelFull::is_expired() const {
return expires_at < Time::now();
}
class ContactsManager::UploadProfilePhotoCallback : public FileManager::UploadCallback {
public:
void on_upload_ok(FileId file_id, tl_object_ptr<telegram_api::InputFile> input_file) override {
@ -3031,6 +3026,344 @@ class ContactsManager::UploadProfilePhotoCallback : public FileManager::UploadCa
}
};
struct ContactsManager::User {
string first_name;
string last_name;
string username;
string phone_number;
int64 access_hash = -1;
ProfilePhoto photo;
vector<RestrictionReason> restriction_reasons;
string inline_query_placeholder;
int32 bot_info_version = -1;
int32 was_online = 0;
int32 local_was_online = 0;
string language_code;
std::unordered_set<int64> photo_ids;
std::unordered_map<DialogId, int32, DialogIdHash> online_member_dialogs; // id -> time
static constexpr uint32 CACHE_VERSION = 3;
uint32 cache_version = 0;
bool is_min_access_hash = true;
bool is_received = false;
bool is_verified = false;
bool is_support = false;
bool is_deleted = true;
bool is_bot = true;
bool can_join_groups = true;
bool can_read_all_group_messages = true;
bool is_inline_bot = false;
bool need_location_bot = false;
bool is_scam = false;
bool is_contact = false;
bool is_mutual_contact = false;
bool need_apply_min_photo = false;
bool is_photo_inited = false;
bool is_repaired = false; // whether cached value is rechecked
bool is_name_changed = true;
bool is_username_changed = true;
bool is_photo_changed = true;
bool is_is_contact_changed = true;
bool is_is_deleted_changed = true;
bool is_default_permissions_changed = true;
bool is_changed = true; // have new changes that need to be sent to the client and database
bool need_save_to_database = true; // have new changes that need only to be saved to the database
bool is_status_changed = true;
bool is_online_status_changed = true; // whether online/offline has changed
bool is_update_user_sent = false;
bool is_saved = false; // is current user version being saved/is saved to the database
bool is_being_saved = false; // is current user being saved to the database
bool is_status_saved = false; // is current user status being saved/is saved to the database
bool is_received_from_server = false; // true, if the user was received from the server and not the database
uint64 log_event_id = 0;
template <class StorerT>
void store(StorerT &storer) const;
template <class ParserT>
void parse(ParserT &parser);
};
struct ContactsManager::BotInfo {
int32 version = -1;
string description;
vector<std::pair<string, string>> commands;
bool is_changed = true;
template <class StorerT>
void store(StorerT &storer) const;
template <class ParserT>
void parse(ParserT &parser);
};
// do not forget to update drop_user_full and on_get_user_full
struct ContactsManager::UserFull {
Photo photo;
string about;
int32 common_chat_count = 0;
bool is_blocked = false;
bool can_be_called = false;
bool supports_video_calls = false;
bool has_private_calls = false;
bool can_pin_messages = true;
bool need_phone_number_privacy_exception = false;
bool is_common_chat_count_changed = true;
bool is_changed = true; // have new changes that need to be sent to the client and database
bool need_send_update = true; // have new changes that need only to be sent to the client
bool need_save_to_database = true; // have new changes that need only to be saved to the database
double expires_at = 0.0;
bool is_expired() const {
return expires_at < Time::now();
}
template <class StorerT>
void store(StorerT &storer) const;
template <class ParserT>
void parse(ParserT &parser);
};
struct ContactsManager::Chat {
string title;
DialogPhoto photo;
int32 participant_count = 0;
int32 date = 0;
int32 version = -1;
int32 default_permissions_version = -1;
int32 pinned_message_version = -1;
ChannelId migrated_to_channel_id;
DialogParticipantStatus status = DialogParticipantStatus::Banned(0);
RestrictedRights default_permissions{false, false, false, false, false, false, false, false, false, false, false};
static constexpr uint32 CACHE_VERSION = 3;
uint32 cache_version = 0;
bool is_active = false;
bool is_title_changed = true;
bool is_photo_changed = true;
bool is_default_permissions_changed = true;
bool is_is_active_changed = true;
bool is_changed = true; // have new changes that need to be sent to the client and database
bool need_save_to_database = true; // have new changes that need only to be saved to the database
bool is_update_basic_group_sent = false;
bool is_repaired = false; // whether cached value is rechecked
bool is_saved = false; // is current chat version being saved/is saved to the database
bool is_being_saved = false; // is current chat being saved to the database
bool is_received_from_server = false; // true, if the chat was received from the server and not the database
uint64 log_event_id = 0;
template <class StorerT>
void store(StorerT &storer) const;
template <class ParserT>
void parse(ParserT &parser);
};
// do not forget to update drop_chat_full and on_get_chat_full
struct ContactsManager::ChatFull {
int32 version = -1;
UserId creator_user_id;
vector<DialogParticipant> participants;
Photo photo;
vector<FileId> registered_photo_file_ids;
FileSourceId file_source_id;
string description;
DialogInviteLink invite_link;
bool can_set_username = false;
bool is_changed = true; // have new changes that need to be sent to the client and database
bool need_send_update = true; // have new changes that need only to be sent to the client
bool need_save_to_database = true; // have new changes that need only to be saved to the database
template <class StorerT>
void store(StorerT &storer) const;
template <class ParserT>
void parse(ParserT &parser);
};
struct ContactsManager::Channel {
int64 access_hash = 0;
string title;
DialogPhoto photo;
string username;
vector<RestrictionReason> restriction_reasons;
DialogParticipantStatus status = DialogParticipantStatus::Banned(0);
RestrictedRights default_permissions{false, false, false, false, false, false, false, false, false, false, false};
int32 date = 0;
int32 participant_count = 0;
static constexpr uint32 CACHE_VERSION = 6;
uint32 cache_version = 0;
bool has_linked_channel = false;
bool has_location = false;
bool sign_messages = false;
bool is_slow_mode_enabled = false;
bool is_megagroup = false;
bool is_verified = false;
bool is_scam = false;
bool is_title_changed = true;
bool is_username_changed = true;
bool is_photo_changed = true;
bool is_default_permissions_changed = true;
bool is_status_changed = true;
bool had_read_access = true;
bool was_member = false;
bool is_changed = true; // have new changes that need to be sent to the client and database
bool need_save_to_database = true; // have new changes that need only to be saved to the database
bool is_update_supergroup_sent = false;
bool is_repaired = false; // whether cached value is rechecked
bool is_saved = false; // is current channel version being saved/is saved to the database
bool is_being_saved = false; // is current channel being saved to the database
bool is_received_from_server = false; // true, if the channel was received from the server and not the database
uint64 log_event_id = 0;
template <class StorerT>
void store(StorerT &storer) const;
template <class ParserT>
void parse(ParserT &parser);
};
// do not forget to update invalidate_channel_full and on_get_chat_full
struct ContactsManager::ChannelFull {
Photo photo;
vector<FileId> registered_photo_file_ids;
FileSourceId file_source_id;
string description;
int32 participant_count = 0;
int32 administrator_count = 0;
int32 restricted_count = 0;
int32 banned_count = 0;
DialogInviteLink invite_link;
uint32 speculative_version = 1;
uint32 repair_request_version = 0;
StickerSetId sticker_set_id;
ChannelId linked_channel_id;
DialogLocation location;
DcId stats_dc_id;
int32 slow_mode_delay = 0;
int32 slow_mode_next_send_date = 0;
MessageId migrated_from_max_message_id;
ChatId migrated_from_chat_id;
vector<UserId> bot_user_ids;
bool can_get_participants = false;
bool can_set_username = false;
bool can_set_sticker_set = false;
bool can_set_location = false;
bool can_view_statistics = false;
bool is_can_view_statistics_inited = false;
bool is_all_history_available = true;
bool is_slow_mode_next_send_date_changed = true;
bool is_changed = true; // have new changes that need to be sent to the client and database
bool need_send_update = true; // have new changes that need only to be sent to the client
bool need_save_to_database = true; // have new changes that need only to be saved to the database
double expires_at = 0.0;
bool is_expired() const {
return expires_at < Time::now();
}
template <class StorerT>
void store(StorerT &storer) const;
template <class ParserT>
void parse(ParserT &parser);
};
struct ContactsManager::SecretChat {
int64 access_hash = 0;
UserId user_id;
SecretChatState state;
string key_hash;
int32 ttl = 0;
int32 date = 0;
int32 layer = 0;
FolderId initial_folder_id;
bool is_outbound = false;
bool is_state_changed = true;
bool is_changed = true; // have new changes that need to be sent to the client and database
bool need_save_to_database = true; // have new changes that need only to be saved to the database
bool is_saved = false; // is current secret chat version being saved/is saved to the database
bool is_being_saved = false; // is current secret chat being saved to the database
uint64 log_event_id = 0;
template <class StorerT>
void store(StorerT &storer) const;
template <class ParserT>
void parse(ParserT &parser);
};
struct ContactsManager::InviteLinkInfo {
// known dialog
DialogId dialog_id;
// unknown dialog
string title;
Photo photo;
int32 participant_count = 0;
vector<UserId> participant_user_ids;
bool is_chat = false;
bool is_channel = false;
bool is_public = false;
bool is_megagroup = false;
};
ContactsManager::ContactsManager(Td *td, ActorShared<> parent) : td_(td), parent_(std::move(parent)) {
upload_profile_photo_callback_ = std::make_shared<UploadProfilePhotoCallback>();
@ -3094,6 +3427,8 @@ ContactsManager::ContactsManager(Td *td, ActorShared<> parent) : td_(td), parent
invite_link_info_expire_timeout_.set_callback_data(static_cast<void *>(this));
}
ContactsManager::~ContactsManager() = default;
void ContactsManager::tear_down() {
parent_.reset();
}

View File

@ -15,8 +15,6 @@
#include "td/telegram/Contact.h"
#include "td/telegram/DialogAdministrator.h"
#include "td/telegram/DialogId.h"
#include "td/telegram/DialogInviteLink.h"
#include "td/telegram/DialogLocation.h"
#include "td/telegram/DialogParticipant.h"
#include "td/telegram/files/FileId.h"
#include "td/telegram/files/FileSourceId.h"
@ -28,7 +26,6 @@
#include "td/telegram/Photo.h"
#include "td/telegram/PublicDialogType.h"
#include "td/telegram/QueryCombiner.h"
#include "td/telegram/RestrictionReason.h"
#include "td/telegram/SecretChatId.h"
#include "td/telegram/StickerSetId.h"
#include "td/telegram/UserId.h"
@ -54,6 +51,9 @@ namespace td {
struct BinlogEvent;
class DialogInviteLink;
class DialogLocation;
class Td;
struct BotData {
@ -77,6 +77,11 @@ struct CanTransferOwnershipResult {
class ContactsManager : public Actor {
public:
ContactsManager(Td *td, ActorShared<> parent);
ContactsManager(const ContactsManager &) = delete;
ContactsManager &operator=(const ContactsManager &) = delete;
ContactsManager(ContactsManager &&) = delete;
ContactsManager &operator=(ContactsManager &&) = delete;
~ContactsManager() override;
static UserId load_my_id();
@ -570,89 +575,17 @@ class ContactsManager : public Actor {
tl_object_ptr<telegram_api::stats_messageStats> obj);
private:
struct User {
string first_name;
string last_name;
string username;
string phone_number;
int64 access_hash = -1;
struct User;
struct UserFull;
struct Chat;
struct ChatFull;
struct Channel;
struct ChannelFull;
struct SecretChat;
ProfilePhoto photo;
struct BotInfo;
vector<RestrictionReason> restriction_reasons;
string inline_query_placeholder;
int32 bot_info_version = -1;
int32 was_online = 0;
int32 local_was_online = 0;
string language_code;
std::unordered_set<int64> photo_ids;
std::unordered_map<DialogId, int32, DialogIdHash> online_member_dialogs; // id -> time
static constexpr uint32 CACHE_VERSION = 3;
uint32 cache_version = 0;
bool is_min_access_hash = true;
bool is_received = false;
bool is_verified = false;
bool is_support = false;
bool is_deleted = true;
bool is_bot = true;
bool can_join_groups = true;
bool can_read_all_group_messages = true;
bool is_inline_bot = false;
bool need_location_bot = false;
bool is_scam = false;
bool is_contact = false;
bool is_mutual_contact = false;
bool need_apply_min_photo = false;
bool is_photo_inited = false;
bool is_repaired = false; // whether cached value is rechecked
bool is_name_changed = true;
bool is_username_changed = true;
bool is_photo_changed = true;
bool is_is_contact_changed = true;
bool is_is_deleted_changed = true;
bool is_default_permissions_changed = true;
bool is_changed = true; // have new changes that need to be sent to the client and database
bool need_save_to_database = true; // have new changes that need only to be saved to the database
bool is_status_changed = true;
bool is_online_status_changed = true; // whether online/offline has changed
bool is_update_user_sent = false;
bool is_saved = false; // is current user version being saved/is saved to the database
bool is_being_saved = false; // is current user being saved to the database
bool is_status_saved = false; // is current user status being saved/is saved to the database
bool is_received_from_server = false; // true, if the user was received from the server and not the database
uint64 log_event_id = 0;
template <class StorerT>
void store(StorerT &storer) const;
template <class ParserT>
void parse(ParserT &parser);
};
struct BotInfo {
int32 version = -1;
string description;
vector<std::pair<string, string>> commands;
bool is_changed = true;
template <class StorerT>
void store(StorerT &storer) const;
template <class ParserT>
void parse(ParserT &parser);
};
struct InviteLinkInfo;
struct UserPhotos {
vector<Photo> photos;
@ -661,255 +594,6 @@ class ContactsManager : public Actor {
bool getting_now = false;
};
// do not forget to update drop_user_full and on_get_user_full
struct UserFull {
Photo photo;
string about;
int32 common_chat_count = 0;
bool is_blocked = false;
bool can_be_called = false;
bool supports_video_calls = false;
bool has_private_calls = false;
bool can_pin_messages = true;
bool need_phone_number_privacy_exception = false;
bool is_common_chat_count_changed = true;
bool is_changed = true; // have new changes that need to be sent to the client and database
bool need_send_update = true; // have new changes that need only to be sent to the client
bool need_save_to_database = true; // have new changes that need only to be saved to the database
double expires_at = 0.0;
bool is_expired() const;
template <class StorerT>
void store(StorerT &storer) const;
template <class ParserT>
void parse(ParserT &parser);
};
struct Chat {
string title;
DialogPhoto photo;
int32 participant_count = 0;
int32 date = 0;
int32 version = -1;
int32 default_permissions_version = -1;
int32 pinned_message_version = -1;
ChannelId migrated_to_channel_id;
DialogParticipantStatus status = DialogParticipantStatus::Banned(0);
RestrictedRights default_permissions{false, false, false, false, false, false, false, false, false, false, false};
static constexpr uint32 CACHE_VERSION = 3;
uint32 cache_version = 0;
bool is_active = false;
bool is_title_changed = true;
bool is_photo_changed = true;
bool is_default_permissions_changed = true;
bool is_is_active_changed = true;
bool is_changed = true; // have new changes that need to be sent to the client and database
bool need_save_to_database = true; // have new changes that need only to be saved to the database
bool is_update_basic_group_sent = false;
bool is_repaired = false; // whether cached value is rechecked
bool is_saved = false; // is current chat version being saved/is saved to the database
bool is_being_saved = false; // is current chat being saved to the database
bool is_received_from_server = false; // true, if the chat was received from the server and not the database
uint64 log_event_id = 0;
template <class StorerT>
void store(StorerT &storer) const;
template <class ParserT>
void parse(ParserT &parser);
};
// do not forget to update drop_chat_full and on_get_chat_full
struct ChatFull {
int32 version = -1;
UserId creator_user_id;
vector<DialogParticipant> participants;
Photo photo;
vector<FileId> registered_photo_file_ids;
FileSourceId file_source_id;
string description;
DialogInviteLink invite_link;
bool can_set_username = false;
bool is_changed = true; // have new changes that need to be sent to the client and database
bool need_send_update = true; // have new changes that need only to be sent to the client
bool need_save_to_database = true; // have new changes that need only to be saved to the database
template <class StorerT>
void store(StorerT &storer) const;
template <class ParserT>
void parse(ParserT &parser);
};
struct Channel {
int64 access_hash = 0;
string title;
DialogPhoto photo;
string username;
vector<RestrictionReason> restriction_reasons;
DialogParticipantStatus status = DialogParticipantStatus::Banned(0);
RestrictedRights default_permissions{false, false, false, false, false, false, false, false, false, false, false};
int32 date = 0;
int32 participant_count = 0;
static constexpr uint32 CACHE_VERSION = 6;
uint32 cache_version = 0;
bool has_linked_channel = false;
bool has_location = false;
bool sign_messages = false;
bool is_slow_mode_enabled = false;
bool is_megagroup = false;
bool is_verified = false;
bool is_scam = false;
bool is_title_changed = true;
bool is_username_changed = true;
bool is_photo_changed = true;
bool is_default_permissions_changed = true;
bool is_status_changed = true;
bool had_read_access = true;
bool was_member = false;
bool is_changed = true; // have new changes that need to be sent to the client and database
bool need_save_to_database = true; // have new changes that need only to be saved to the database
bool is_update_supergroup_sent = false;
bool is_repaired = false; // whether cached value is rechecked
bool is_saved = false; // is current channel version being saved/is saved to the database
bool is_being_saved = false; // is current channel being saved to the database
bool is_received_from_server = false; // true, if the channel was received from the server and not the database
uint64 log_event_id = 0;
template <class StorerT>
void store(StorerT &storer) const;
template <class ParserT>
void parse(ParserT &parser);
};
// do not forget to update invalidate_channel_full and on_get_chat_full
struct ChannelFull {
Photo photo;
vector<FileId> registered_photo_file_ids;
FileSourceId file_source_id;
string description;
int32 participant_count = 0;
int32 administrator_count = 0;
int32 restricted_count = 0;
int32 banned_count = 0;
DialogInviteLink invite_link;
uint32 speculative_version = 1;
uint32 repair_request_version = 0;
StickerSetId sticker_set_id;
ChannelId linked_channel_id;
DialogLocation location;
DcId stats_dc_id;
int32 slow_mode_delay = 0;
int32 slow_mode_next_send_date = 0;
MessageId migrated_from_max_message_id;
ChatId migrated_from_chat_id;
vector<UserId> bot_user_ids;
bool can_get_participants = false;
bool can_set_username = false;
bool can_set_sticker_set = false;
bool can_set_location = false;
bool can_view_statistics = false;
bool is_can_view_statistics_inited = false;
bool is_all_history_available = true;
bool is_slow_mode_next_send_date_changed = true;
bool is_changed = true; // have new changes that need to be sent to the client and database
bool need_send_update = true; // have new changes that need only to be sent to the client
bool need_save_to_database = true; // have new changes that need only to be saved to the database
double expires_at = 0.0;
bool is_expired() const;
template <class StorerT>
void store(StorerT &storer) const;
template <class ParserT>
void parse(ParserT &parser);
};
struct SecretChat {
int64 access_hash = 0;
UserId user_id;
SecretChatState state;
string key_hash;
int32 ttl = 0;
int32 date = 0;
int32 layer = 0;
FolderId initial_folder_id;
bool is_outbound = false;
bool is_state_changed = true;
bool is_changed = true; // have new changes that need to be sent to the client and database
bool need_save_to_database = true; // have new changes that need only to be saved to the database
bool is_saved = false; // is current secret chat version being saved/is saved to the database
bool is_being_saved = false; // is current secret chat being saved to the database
uint64 log_event_id = 0;
template <class StorerT>
void store(StorerT &storer) const;
template <class ParserT>
void parse(ParserT &parser);
};
struct InviteLinkInfo {
// known dialog
DialogId dialog_id;
// unknown dialog
string title;
Photo photo;
int32 participant_count = 0;
vector<UserId> participant_user_ids;
bool is_chat = false;
bool is_channel = false;
bool is_public = false;
bool is_megagroup = false;
};
struct DialogNearby {
DialogId dialog_id;
int32 distance;