Update to layer 100. Add td_api::userPrivacySettingShowPhoneNumber and td_api::topChatCategoryForwardChats.

GitOrigin-RevId: 96fd17d9fef8e08b4415ec0d8e13e6cdb37f589b
This commit is contained in:
levlam 2019-09-03 17:13:03 +03:00
parent 12ea695b54
commit 779fbb6d83
12 changed files with 125 additions and 24 deletions

View File

@ -2260,6 +2260,9 @@ userPrivacySettingShowProfilePhoto = UserPrivacySetting;
//@description A privacy setting for managing whether a link to the user's account is included in forwarded messages //@description A privacy setting for managing whether a link to the user's account is included in forwarded messages
userPrivacySettingShowLinkInForwardedMessages = UserPrivacySetting; userPrivacySettingShowLinkInForwardedMessages = UserPrivacySetting;
//@description A privacy setting for managing whether the user's phone number is visible
userPrivacySettingShowPhoneNumber = UserPrivacySetting;
//@description A privacy setting for managing whether the user can be invited to chats //@description A privacy setting for managing whether the user can be invited to chats
userPrivacySettingAllowChatInvites = UserPrivacySetting; userPrivacySettingAllowChatInvites = UserPrivacySetting;
@ -2500,6 +2503,9 @@ topChatCategoryInlineBots = TopChatCategory;
//@description A category containing frequently used chats used for calls //@description A category containing frequently used chats used for calls
topChatCategoryCalls = TopChatCategory; topChatCategoryCalls = TopChatCategory;
//@description A category containing frequently used chats used to forward messages
topChatCategoryForwardChats = TopChatCategory;
//@class TMeUrlType @description Describes the type of a URL linking to an internal Telegram entity //@class TMeUrlType @description Describes the type of a URL linking to an internal Telegram entity

Binary file not shown.

View File

@ -110,11 +110,11 @@ userStatusLastMonth#77ebc742 = UserStatus;
chatEmpty#9ba2d800 id:int = Chat; chatEmpty#9ba2d800 id:int = Chat;
chat#3bda1bde flags:# creator:flags.0?true kicked:flags.1?true left:flags.2?true deactivated:flags.5?true id:int title:string photo:ChatPhoto participants_count:int date:int version:int migrated_to:flags.6?InputChannel admin_rights:flags.14?ChatAdminRights default_banned_rights:flags.18?ChatBannedRights = Chat; chat#3bda1bde flags:# creator:flags.0?true kicked:flags.1?true left:flags.2?true deactivated:flags.5?true id:int title:string photo:ChatPhoto participants_count:int date:int version:int migrated_to:flags.6?InputChannel admin_rights:flags.14?ChatAdminRights default_banned_rights:flags.18?ChatBannedRights = Chat;
chatForbidden#7328bdb id:int title:string = Chat; chatForbidden#7328bdb id:int title:string = Chat;
channel#4df30834 flags:# creator:flags.0?true left:flags.2?true broadcast:flags.5?true verified:flags.7?true megagroup:flags.8?true restricted:flags.9?true signatures:flags.11?true min:flags.12?true scam:flags.19?true id:int access_hash:flags.13?long title:string username:flags.6?string photo:ChatPhoto date:int version:int restriction_reason:flags.9?string admin_rights:flags.14?ChatAdminRights banned_rights:flags.15?ChatBannedRights default_banned_rights:flags.18?ChatBannedRights participants_count:flags.17?int = Chat; channel#4df30834 flags:# creator:flags.0?true left:flags.2?true broadcast:flags.5?true verified:flags.7?true megagroup:flags.8?true restricted:flags.9?true signatures:flags.11?true min:flags.12?true scam:flags.19?true has_link:flags.20?true id:int access_hash:flags.13?long title:string username:flags.6?string photo:ChatPhoto date:int version:int restriction_reason:flags.9?string admin_rights:flags.14?ChatAdminRights banned_rights:flags.15?ChatBannedRights default_banned_rights:flags.18?ChatBannedRights participants_count:flags.17?int = Chat;
channelForbidden#289da732 flags:# broadcast:flags.5?true megagroup:flags.8?true id:int access_hash:long title:string until_date:flags.16?int = Chat; channelForbidden#289da732 flags:# broadcast:flags.5?true megagroup:flags.8?true id:int access_hash:long title:string until_date:flags.16?int = Chat;
chatFull#1b7c9db3 flags:# can_set_username:flags.7?true id:int about:string participants:ChatParticipants chat_photo:flags.2?Photo notify_settings:PeerNotifySettings exported_invite:ExportedChatInvite bot_info:flags.3?Vector<BotInfo> pinned_msg_id:flags.6?int folder_id:flags.11?int = ChatFull; chatFull#1b7c9db3 flags:# can_set_username:flags.7?true id:int about:string participants:ChatParticipants chat_photo:flags.2?Photo notify_settings:PeerNotifySettings exported_invite:ExportedChatInvite bot_info:flags.3?Vector<BotInfo> pinned_msg_id:flags.6?int folder_id:flags.11?int = ChatFull;
channelFull#3648977 flags:# can_view_participants:flags.3?true can_set_username:flags.6?true can_set_stickers:flags.7?true hidden_prehistory:flags.10?true can_view_stats:flags.12?true id:int about:string participants_count:flags.0?int admins_count:flags.1?int kicked_count:flags.2?int banned_count:flags.2?int online_count:flags.13?int read_inbox_max_id:int read_outbox_max_id:int unread_count:int chat_photo:Photo notify_settings:PeerNotifySettings exported_invite:ExportedChatInvite bot_info:Vector<BotInfo> migrated_from_chat_id:flags.4?int migrated_from_max_id:flags.4?int pinned_msg_id:flags.5?int stickerset:flags.8?StickerSet available_min_id:flags.9?int folder_id:flags.11?int pts:int = ChatFull; channelFull#9882e516 flags:# can_view_participants:flags.3?true can_set_username:flags.6?true can_set_stickers:flags.7?true hidden_prehistory:flags.10?true can_view_stats:flags.12?true id:int about:string participants_count:flags.0?int admins_count:flags.1?int kicked_count:flags.2?int banned_count:flags.2?int online_count:flags.13?int read_inbox_max_id:int read_outbox_max_id:int unread_count:int chat_photo:Photo notify_settings:PeerNotifySettings exported_invite:ExportedChatInvite bot_info:Vector<BotInfo> migrated_from_chat_id:flags.4?int migrated_from_max_id:flags.4?int pinned_msg_id:flags.5?int stickerset:flags.8?StickerSet available_min_id:flags.9?int folder_id:flags.11?int linked_chat_id:flags.13?int pts:int = ChatFull;
chatParticipant#c8d7493e user_id:int inviter_id:int date:int = ChatParticipant; chatParticipant#c8d7493e user_id:int inviter_id:int date:int = ChatParticipant;
chatParticipantCreator#da13538a user_id:int = ChatParticipant; chatParticipantCreator#da13538a user_id:int = ChatParticipant;
@ -232,7 +232,7 @@ messages.dialogsSlice#71e094f3 count:int dialogs:Vector<Dialog> messages:Vector<
messages.dialogsNotModified#f0e3e596 count:int = messages.Dialogs; messages.dialogsNotModified#f0e3e596 count:int = messages.Dialogs;
messages.messages#8c718e87 messages:Vector<Message> chats:Vector<Chat> users:Vector<User> = messages.Messages; messages.messages#8c718e87 messages:Vector<Message> chats:Vector<Chat> users:Vector<User> = messages.Messages;
messages.messagesSlice#a6c47aaa flags:# inexact:flags.1?true count:int messages:Vector<Message> chats:Vector<Chat> users:Vector<User> = messages.Messages; messages.messagesSlice#c8edce1e flags:# inexact:flags.1?true count:int next_rate:flags.0?int messages:Vector<Message> chats:Vector<Chat> users:Vector<User> = messages.Messages;
messages.channelMessages#99262e37 flags:# inexact:flags.1?true pts:int count:int messages:Vector<Message> chats:Vector<Chat> users:Vector<User> = messages.Messages; messages.channelMessages#99262e37 flags:# inexact:flags.1?true pts:int count:int messages:Vector<Message> chats:Vector<Chat> users:Vector<User> = messages.Messages;
messages.messagesNotModified#74535f21 count:int = messages.Messages; messages.messagesNotModified#74535f21 count:int = messages.Messages;
@ -425,6 +425,7 @@ inputPrivacyKeyPhoneCall#fabadc5f = InputPrivacyKey;
inputPrivacyKeyPhoneP2P#db9e70d2 = InputPrivacyKey; inputPrivacyKeyPhoneP2P#db9e70d2 = InputPrivacyKey;
inputPrivacyKeyForwards#a4dd4c08 = InputPrivacyKey; inputPrivacyKeyForwards#a4dd4c08 = InputPrivacyKey;
inputPrivacyKeyProfilePhoto#5719bacc = InputPrivacyKey; inputPrivacyKeyProfilePhoto#5719bacc = InputPrivacyKey;
inputPrivacyKeyPhoneNumber#352dafa = InputPrivacyKey;
privacyKeyStatusTimestamp#bc2eab30 = PrivacyKey; privacyKeyStatusTimestamp#bc2eab30 = PrivacyKey;
privacyKeyChatInvite#500e6dfa = PrivacyKey; privacyKeyChatInvite#500e6dfa = PrivacyKey;
@ -432,6 +433,7 @@ privacyKeyPhoneCall#3d662b7b = PrivacyKey;
privacyKeyPhoneP2P#39491cc8 = PrivacyKey; privacyKeyPhoneP2P#39491cc8 = PrivacyKey;
privacyKeyForwards#69ec56a3 = PrivacyKey; privacyKeyForwards#69ec56a3 = PrivacyKey;
privacyKeyProfilePhoto#96151fed = PrivacyKey; privacyKeyProfilePhoto#96151fed = PrivacyKey;
privacyKeyPhoneNumber#d19ae46d = PrivacyKey;
inputPrivacyValueAllowContacts#d09e07b = InputPrivacyRule; inputPrivacyValueAllowContacts#d09e07b = InputPrivacyRule;
inputPrivacyValueAllowAll#184b35ce = InputPrivacyRule; inputPrivacyValueAllowAll#184b35ce = InputPrivacyRule;
@ -439,6 +441,8 @@ inputPrivacyValueAllowUsers#131cc67f users:Vector<InputUser> = InputPrivacyRule;
inputPrivacyValueDisallowContacts#ba52007 = InputPrivacyRule; inputPrivacyValueDisallowContacts#ba52007 = InputPrivacyRule;
inputPrivacyValueDisallowAll#d66b66c9 = InputPrivacyRule; inputPrivacyValueDisallowAll#d66b66c9 = InputPrivacyRule;
inputPrivacyValueDisallowUsers#90110467 users:Vector<InputUser> = InputPrivacyRule; inputPrivacyValueDisallowUsers#90110467 users:Vector<InputUser> = InputPrivacyRule;
inputPrivacyValueAllowChatParticipants#4c81c1ba chats:Vector<int> = InputPrivacyRule;
inputPrivacyValueDisallowChatParticipants#d82363af chats:Vector<int> = InputPrivacyRule;
privacyValueAllowContacts#fffe1bac = PrivacyRule; privacyValueAllowContacts#fffe1bac = PrivacyRule;
privacyValueAllowAll#65427b82 = PrivacyRule; privacyValueAllowAll#65427b82 = PrivacyRule;
@ -446,8 +450,10 @@ privacyValueAllowUsers#4d5bbe0c users:Vector<int> = PrivacyRule;
privacyValueDisallowContacts#f888fa1a = PrivacyRule; privacyValueDisallowContacts#f888fa1a = PrivacyRule;
privacyValueDisallowAll#8b73e763 = PrivacyRule; privacyValueDisallowAll#8b73e763 = PrivacyRule;
privacyValueDisallowUsers#c7f49b7 users:Vector<int> = PrivacyRule; privacyValueDisallowUsers#c7f49b7 users:Vector<int> = PrivacyRule;
privacyValueAllowChatParticipants#18be796b chats:Vector<int> = PrivacyRule;
privacyValueDisallowChatParticipants#acae0690 chats:Vector<int> = PrivacyRule;
account.privacyRules#554abb6f rules:Vector<PrivacyRule> users:Vector<User> = account.PrivacyRules; account.privacyRules#50a04e45 rules:Vector<PrivacyRule> chats:Vector<Chat> users:Vector<User> = account.PrivacyRules;
accountDaysTTL#b8d0afdf days:int = AccountDaysTTL; accountDaysTTL#b8d0afdf days:int = AccountDaysTTL;
@ -471,7 +477,6 @@ messages.affectedMessages#84d19185 pts:int pts_count:int = messages.AffectedMess
contactLinkUnknown#5f4f9247 = ContactLink; contactLinkUnknown#5f4f9247 = ContactLink;
contactLinkNone#feedd3ad = ContactLink; contactLinkNone#feedd3ad = ContactLink;
contactLinkHasPhone#268f3f59 = ContactLink;
contactLinkContact#d502c2d0 = ContactLink; contactLinkContact#d502c2d0 = ContactLink;
webPageEmpty#eb1477e8 id:long = WebPage; webPageEmpty#eb1477e8 id:long = WebPage;
@ -643,6 +648,8 @@ topPeerCategoryCorrespondents#637b7ed = TopPeerCategory;
topPeerCategoryGroups#bd17a14a = TopPeerCategory; topPeerCategoryGroups#bd17a14a = TopPeerCategory;
topPeerCategoryChannels#161d9628 = TopPeerCategory; topPeerCategoryChannels#161d9628 = TopPeerCategory;
topPeerCategoryPhoneCalls#1e76a78c = TopPeerCategory; topPeerCategoryPhoneCalls#1e76a78c = TopPeerCategory;
topPeerCategoryForwardUsers#a8406ca9 = TopPeerCategory;
topPeerCategoryForwardChats#fbeec0f0 = TopPeerCategory;
topPeerCategoryPeers#fb834291 category:TopPeerCategory count:int peers:Vector<TopPeer> = TopPeerCategoryPeers; topPeerCategoryPeers#fb834291 category:TopPeerCategory count:int peers:Vector<TopPeer> = TopPeerCategoryPeers;
@ -827,6 +834,7 @@ channelAdminLogEventActionChangeStickerSet#b1c3caa7 prev_stickerset:InputSticker
channelAdminLogEventActionTogglePreHistoryHidden#5f5c95f1 new_value:Bool = ChannelAdminLogEventAction; channelAdminLogEventActionTogglePreHistoryHidden#5f5c95f1 new_value:Bool = ChannelAdminLogEventAction;
channelAdminLogEventActionDefaultBannedRights#2df5fc0a prev_banned_rights:ChatBannedRights new_banned_rights:ChatBannedRights = ChannelAdminLogEventAction; channelAdminLogEventActionDefaultBannedRights#2df5fc0a prev_banned_rights:ChatBannedRights new_banned_rights:ChatBannedRights = ChannelAdminLogEventAction;
channelAdminLogEventActionStopPoll#8f079643 message:Message = ChannelAdminLogEventAction; channelAdminLogEventActionStopPoll#8f079643 message:Message = ChannelAdminLogEventAction;
channelAdminLogEventActionChangeLinkedChat#a26f881b prev_value:int new_value:int = ChannelAdminLogEventAction;
channelAdminLogEvent#3b5a3e40 id:long date:int user_id:int action:ChannelAdminLogEventAction = ChannelAdminLogEvent; channelAdminLogEvent#3b5a3e40 id:long date:int user_id:int action:ChannelAdminLogEventAction = ChannelAdminLogEvent;
@ -1031,6 +1039,12 @@ inputFolderPeer#fbd2c296 peer:InputPeer folder_id:int = InputFolderPeer;
folderPeer#e9baa668 peer:Peer folder_id:int = FolderPeer; folderPeer#e9baa668 peer:Peer folder_id:int = FolderPeer;
messages.searchCounter#e844ebff flags:# inexact:flags.1?true filter:MessagesFilter count:int = messages.SearchCounter;
urlAuthResultRequest#92d33a0e flags:# request_write_access:flags.0?true bot:User domain:string = UrlAuthResult;
urlAuthResultAccepted#8f8c0e4e url:string = UrlAuthResult;
urlAuthResultDefault#a9d6db1f = UrlAuthResult;
---functions--- ---functions---
invokeAfterMsg#cb9f372d {X:Type} msg_id:long query:!X = X; invokeAfterMsg#cb9f372d {X:Type} msg_id:long query:!X = X;
@ -1129,7 +1143,7 @@ contacts.unblock#e54100bd id:InputUser = Bool;
contacts.getBlocked#f57c350f offset:int limit:int = contacts.Blocked; contacts.getBlocked#f57c350f offset:int limit:int = contacts.Blocked;
contacts.search#11f812d8 q:string limit:int = contacts.Found; contacts.search#11f812d8 q:string limit:int = contacts.Found;
contacts.resolveUsername#f93ccba3 username:string = contacts.ResolvedPeer; contacts.resolveUsername#f93ccba3 username:string = contacts.ResolvedPeer;
contacts.getTopPeers#d4982db5 flags:# correspondents:flags.0?true bots_pm:flags.1?true bots_inline:flags.2?true phone_calls:flags.3?true groups:flags.10?true channels:flags.15?true offset:int limit:int hash:int = contacts.TopPeers; contacts.getTopPeers#d4982db5 flags:# correspondents:flags.0?true bots_pm:flags.1?true bots_inline:flags.2?true phone_calls:flags.3?true forward_users:flags.4?true forward_chats:flags.5?true groups:flags.10?true channels:flags.15?true offset:int limit:int hash:int = contacts.TopPeers;
contacts.resetTopPeerRating#1ae373ac category:TopPeerCategory peer:InputPeer = Bool; contacts.resetTopPeerRating#1ae373ac category:TopPeerCategory peer:InputPeer = Bool;
contacts.resetSaved#879537f1 = Bool; contacts.resetSaved#879537f1 = Bool;
contacts.getSaved#82f1e39f = Vector<SavedContact>; contacts.getSaved#82f1e39f = Vector<SavedContact>;
@ -1183,7 +1197,7 @@ messages.startBot#e6df7378 bot:InputUser peer:InputPeer random_id:long start_par
messages.getMessagesViews#c4c8a55d peer:InputPeer id:Vector<int> increment:Bool = Vector<int>; messages.getMessagesViews#c4c8a55d peer:InputPeer id:Vector<int> increment:Bool = Vector<int>;
messages.editChatAdmin#a9e69f2e chat_id:int user_id:InputUser is_admin:Bool = Bool; messages.editChatAdmin#a9e69f2e chat_id:int user_id:InputUser is_admin:Bool = Bool;
messages.migrateChat#15a3b8e3 chat_id:int = Updates; messages.migrateChat#15a3b8e3 chat_id:int = Updates;
messages.searchGlobal#9e3cacb0 q:string offset_date:int offset_peer:InputPeer offset_id:int limit:int = messages.Messages; messages.searchGlobal#f79c611 q:string offset_rate:int offset_peer:InputPeer offset_id:int limit:int = messages.Messages;
messages.reorderStickerSets#78337739 flags:# masks:flags.0?true order:Vector<long> = Bool; messages.reorderStickerSets#78337739 flags:# masks:flags.0?true order:Vector<long> = Bool;
messages.getDocumentByHash#338e2464 sha256:bytes size:int mime_type:string = Document; messages.getDocumentByHash#338e2464 sha256:bytes size:int mime_type:string = Document;
messages.searchGifs#bf9a776b q:string offset:int = messages.FoundGifs; messages.searchGifs#bf9a776b q:string offset:int = messages.FoundGifs;
@ -1245,6 +1259,9 @@ messages.getEmojiKeywords#35a0e062 lang_code:string = EmojiKeywordsDifference;
messages.getEmojiKeywordsDifference#1508b6af lang_code:string from_version:int = EmojiKeywordsDifference; messages.getEmojiKeywordsDifference#1508b6af lang_code:string from_version:int = EmojiKeywordsDifference;
messages.getEmojiKeywordsLanguages#4e9963b2 lang_codes:Vector<string> = Vector<EmojiLanguage>; messages.getEmojiKeywordsLanguages#4e9963b2 lang_codes:Vector<string> = Vector<EmojiLanguage>;
messages.getEmojiURL#d5b10c26 lang_code:string = EmojiURL; messages.getEmojiURL#d5b10c26 lang_code:string = EmojiURL;
messages.getSearchCounters#732eef00 peer:InputPeer filters:Vector<MessagesFilter> = Vector<messages.SearchCounter>;
messages.requestUrlAuth#e33f5613 peer:InputPeer msg_id:int button_id:int = UrlAuthResult;
messages.acceptUrlAuth#f729ea98 flags:# write_allowed:flags.0?true peer:InputPeer msg_id:int button_id:int = UrlAuthResult;
updates.getState#edd4882a = updates.State; updates.getState#edd4882a = updates.State;
updates.getDifference#25939651 flags:# pts:int pts_total_limit:flags.0?int date:int qts:int = updates.Difference; updates.getDifference#25939651 flags:# pts:int pts_total_limit:flags.0?int date:int qts:int = updates.Difference;
@ -1313,6 +1330,8 @@ channels.readMessageContents#eab5dc38 channel:InputChannel id:Vector<int> = Bool
channels.deleteHistory#af369d42 channel:InputChannel max_id:int = Bool; channels.deleteHistory#af369d42 channel:InputChannel max_id:int = Bool;
channels.togglePreHistoryHidden#eabbb94c channel:InputChannel enabled:Bool = Updates; channels.togglePreHistoryHidden#eabbb94c channel:InputChannel enabled:Bool = Updates;
channels.getLeftChannels#8341ecc0 offset:int = messages.Chats; channels.getLeftChannels#8341ecc0 offset:int = messages.Chats;
channels.getGroupsForDiscussion#f5dad378 = messages.Chats;
channels.setDiscussionGroup#40582bb2 broadcast:InputChannel group:InputChannel = Bool;
bots.sendCustomRequest#aa2769ed custom_method:string params:DataJSON = DataJSON; bots.sendCustomRequest#aa2769ed custom_method:string params:DataJSON = DataJSON;
bots.answerWebhookJSONQuery#e6213f4d query_id:long data:DataJSON = Bool; bots.answerWebhookJSONQuery#e6213f4d query_id:long data:DataJSON = Bool;

Binary file not shown.

View File

@ -7314,8 +7314,6 @@ ContactsManager::LinkState ContactsManager::get_link_state(tl_object_ptr<telegra
return LinkState::Unknown; return LinkState::Unknown;
case telegram_api::contactLinkNone::ID: case telegram_api::contactLinkNone::ID:
return LinkState::None; return LinkState::None;
case telegram_api::contactLinkHasPhone::ID:
return LinkState::KnowsPhoneNumber;
case telegram_api::contactLinkContact::ID: case telegram_api::contactLinkContact::ID:
return LinkState::Contact; return LinkState::Contact;
default: default:

View File

@ -24305,6 +24305,12 @@ MessagesManager::Message *MessagesManager::add_message_to_dialog(Dialog *d, uniq
send_closure(G()->top_dialog_manager(), &TopDialogManager::on_dialog_used, TopDialogCategory::BotInline, send_closure(G()->top_dialog_manager(), &TopDialogManager::on_dialog_used, TopDialogCategory::BotInline,
DialogId(m->via_bot_user_id), m->date); DialogId(m->via_bot_user_id), m->date);
} }
if (m->forward_info != nullptr && d->last_outgoing_forwarded_message_date < m->date) {
TopDialogCategory category =
dialog_id.get_type() == DialogType::User ? TopDialogCategory::ForwardUsers : TopDialogCategory::ForwardChats;
send_closure(G()->top_dialog_manager(), &TopDialogManager::on_dialog_used, category, dialog_id, m->date);
d->last_outgoing_forwarded_message_date = m->date;
}
TopDialogCategory category = TopDialogCategory::Size; TopDialogCategory category = TopDialogCategory::Size;
switch (dialog_id.get_type()) { switch (dialog_id.get_type()) {

View File

@ -1011,6 +1011,7 @@ class MessagesManager : public Actor {
int32 pending_last_message_date = 0; int32 pending_last_message_date = 0;
MessageId pending_last_message_id; MessageId pending_last_message_id;
MessageId max_notification_message_id; MessageId max_notification_message_id;
int32 last_outgoing_forwarded_message_date = 0;
MessageId max_added_message_id; MessageId max_added_message_id;
MessageId being_added_message_id; MessageId being_added_message_id;

View File

@ -48,6 +48,9 @@ PrivacyManager::UserPrivacySetting::UserPrivacySetting(const telegram_api::Priva
case telegram_api::privacyKeyProfilePhoto::ID: case telegram_api::privacyKeyProfilePhoto::ID:
type_ = Type::UserProfilePhoto; type_ = Type::UserProfilePhoto;
break; break;
case telegram_api::privacyKeyPhoneNumber::ID:
type_ = Type::UserPhoneNumber;
break;
default: default:
UNREACHABLE(); UNREACHABLE();
type_ = Type::UserStatus; type_ = Type::UserStatus;
@ -68,6 +71,8 @@ tl_object_ptr<td_api::UserPrivacySetting> PrivacyManager::UserPrivacySetting::as
return make_tl_object<td_api::userPrivacySettingShowLinkInForwardedMessages>(); return make_tl_object<td_api::userPrivacySettingShowLinkInForwardedMessages>();
case Type::UserProfilePhoto: case Type::UserProfilePhoto:
return make_tl_object<td_api::userPrivacySettingShowProfilePhoto>(); return make_tl_object<td_api::userPrivacySettingShowProfilePhoto>();
case Type::UserPhoneNumber:
return make_tl_object<td_api::userPrivacySettingShowPhoneNumber>();
default: default:
UNREACHABLE(); UNREACHABLE();
return nullptr; return nullptr;
@ -87,6 +92,8 @@ tl_object_ptr<telegram_api::InputPrivacyKey> PrivacyManager::UserPrivacySetting:
return make_tl_object<telegram_api::inputPrivacyKeyForwards>(); return make_tl_object<telegram_api::inputPrivacyKeyForwards>();
case Type::UserProfilePhoto: case Type::UserProfilePhoto:
return make_tl_object<telegram_api::inputPrivacyKeyProfilePhoto>(); return make_tl_object<telegram_api::inputPrivacyKeyProfilePhoto>();
case Type::UserPhoneNumber:
return make_tl_object<telegram_api::inputPrivacyKeyPhoneNumber>();
default: default:
UNREACHABLE(); UNREACHABLE();
return nullptr; return nullptr;
@ -113,6 +120,9 @@ PrivacyManager::UserPrivacySetting::UserPrivacySetting(const td_api::UserPrivacy
case td_api::userPrivacySettingShowProfilePhoto::ID: case td_api::userPrivacySettingShowProfilePhoto::ID:
type_ = Type::UserProfilePhoto; type_ = Type::UserProfilePhoto;
break; break;
case td_api::userPrivacySettingShowPhoneNumber::ID:
type_ = Type::UserPhoneNumber;
break;
default: default:
UNREACHABLE(); UNREACHABLE();
type_ = Type::UserStatus; type_ = Type::UserStatus;
@ -244,6 +254,7 @@ vector<int32> PrivacyManager::UserPrivacySettingRule::user_ids_as_td_api() const
Result<PrivacyManager::UserPrivacySettingRules> PrivacyManager::UserPrivacySettingRules::from_telegram_api( Result<PrivacyManager::UserPrivacySettingRules> PrivacyManager::UserPrivacySettingRules::from_telegram_api(
tl_object_ptr<telegram_api::account_privacyRules> rules) { tl_object_ptr<telegram_api::account_privacyRules> rules) {
G()->td().get_actor_unsafe()->contacts_manager_->on_get_users(std::move(rules->users_), "on get privacy rules"); G()->td().get_actor_unsafe()->contacts_manager_->on_get_users(std::move(rules->users_), "on get privacy rules");
G()->td().get_actor_unsafe()->contacts_manager_->on_get_chats(std::move(rules->chats_), "on get privacy rules");
return from_telegram_api(std::move(rules->rules_)); return from_telegram_api(std::move(rules->rules_));
} }

View File

@ -45,6 +45,7 @@ class PrivacyManager : public NetQueryCallback {
PeerToPeerCall, PeerToPeerCall,
LinkInForwardedMessages, LinkInForwardedMessages,
UserProfilePhoto, UserProfilePhoto,
UserPhoneNumber,
Size Size
}; };

View File

@ -5448,7 +5448,8 @@ void Td::on_request(uint64 id, td_api::getTopChats &request) {
} }
}); });
send_closure(top_dialog_manager_, &TopDialogManager::get_top_dialogs, send_closure(top_dialog_manager_, &TopDialogManager::get_top_dialogs,
top_dialog_category_from_td_api(*request.category_), request.limit_, std::move(query_promise)); top_dialog_category_from_td_api(*request.category_), narrow_cast<size_t>(request.limit_),
std::move(query_promise));
} }
void Td::on_request(uint64 id, const td_api::removeTopChat &request) { void Td::on_request(uint64 id, const td_api::removeTopChat &request) {
@ -5457,10 +5458,14 @@ void Td::on_request(uint64 id, const td_api::removeTopChat &request) {
return send_error_raw(id, 400, "Top chat category should not be empty"); return send_error_raw(id, 400, "Top chat category should not be empty");
} }
DialogId dialog_id(request.chat_id_);
if (!dialog_id.is_valid()) {
return send_error_raw(id, 400, "Invalid chat identifier");
}
send_closure(top_dialog_manager_, &TopDialogManager::remove_dialog, send_closure(top_dialog_manager_, &TopDialogManager::remove_dialog,
top_dialog_category_from_td_api(*request.category_), DialogId(request.chat_id_), top_dialog_category_from_td_api(*request.category_), dialog_id,
messages_manager_->get_input_peer(DialogId(request.chat_id_), AccessRights::Read)); messages_manager_->get_input_peer(dialog_id, AccessRights::Read));
send_closure(actor_id(this), &Td::send_result, id, make_tl_object<td_api::ok>()); send_closure(actor_id(this), &Td::send_result, id, td_api::make_object<td_api::ok>());
} }
void Td::on_request(uint64 id, const td_api::getChats &request) { void Td::on_request(uint64 id, const td_api::getChats &request) {

View File

@ -50,6 +50,10 @@ static CSlice top_dialog_category_name(TopDialogCategory category) {
return CSlice("channel"); return CSlice("channel");
case TopDialogCategory::Call: case TopDialogCategory::Call:
return CSlice("call"); return CSlice("call");
case TopDialogCategory::ForwardUsers:
return CSlice("forward_users");
case TopDialogCategory::ForwardChats:
return CSlice("forward_chats");
default: default:
UNREACHABLE(); UNREACHABLE();
} }
@ -69,6 +73,10 @@ static TopDialogCategory top_dialog_category_from_telegram_api(const telegram_ap
return TopDialogCategory::Channel; return TopDialogCategory::Channel;
case telegram_api::topPeerCategoryPhoneCalls::ID: case telegram_api::topPeerCategoryPhoneCalls::ID:
return TopDialogCategory::Call; return TopDialogCategory::Call;
case telegram_api::topPeerCategoryForwardUsers::ID:
return TopDialogCategory::ForwardUsers;
case telegram_api::topPeerCategoryForwardChats::ID:
return TopDialogCategory::ForwardChats;
default: default:
UNREACHABLE(); UNREACHABLE();
} }
@ -88,6 +96,10 @@ static tl_object_ptr<telegram_api::TopPeerCategory> top_dialog_category_as_teleg
return make_tl_object<telegram_api::topPeerCategoryChannels>(); return make_tl_object<telegram_api::topPeerCategoryChannels>();
case TopDialogCategory::Call: case TopDialogCategory::Call:
return make_tl_object<telegram_api::topPeerCategoryPhoneCalls>(); return make_tl_object<telegram_api::topPeerCategoryPhoneCalls>();
case TopDialogCategory::ForwardUsers:
return make_tl_object<telegram_api::topPeerCategoryForwardUsers>();
case TopDialogCategory::ForwardChats:
return make_tl_object<telegram_api::topPeerCategoryForwardChats>();
default: default:
UNREACHABLE(); UNREACHABLE();
} }
@ -174,6 +186,11 @@ void TopDialogManager::remove_dialog(TopDialogCategory category, DialogId dialog
if (!is_active_ || !is_enabled_) { if (!is_active_ || !is_enabled_) {
return; return;
} }
CHECK(dialog_id.is_valid());
if (category == TopDialogCategory::ForwardUsers && dialog_id.get_type() != DialogType::User) {
category = TopDialogCategory::ForwardChats;
}
auto pos = static_cast<size_t>(category); auto pos = static_cast<size_t>(category);
CHECK(pos < by_category_.size()); CHECK(pos < by_category_.size());
@ -276,13 +293,28 @@ void TopDialogManager::normalize_rating() {
} }
void TopDialogManager::do_get_top_dialogs(GetTopDialogsQuery &&query) { void TopDialogManager::do_get_top_dialogs(GetTopDialogsQuery &&query) {
vector<DialogId> dialog_ids;
if (query.category != TopDialogCategory::ForwardUsers) {
auto pos = static_cast<size_t>(query.category); auto pos = static_cast<size_t>(query.category);
CHECK(pos < by_category_.size()); CHECK(pos < by_category_.size());
auto &top_dialogs = by_category_[pos]; dialog_ids = transform(by_category_[pos].dialogs, [](const auto &x) { return x.dialog_id; });
} else {
// merge ForwardUsers and ForwardChats
auto &users = by_category_[static_cast<size_t>(TopDialogCategory::ForwardUsers)];
auto &chats = by_category_[static_cast<size_t>(TopDialogCategory::ForwardChats)];
size_t users_pos = 0;
size_t chats_pos = 0;
while (users_pos < users.dialogs.size() || chats_pos < chats.dialogs.size()) {
if (chats_pos == chats.dialogs.size() ||
(users_pos < users.dialogs.size() && users.dialogs[users_pos] < chats.dialogs[chats_pos])) {
dialog_ids.push_back(users.dialogs[users_pos++].dialog_id);
} else {
dialog_ids.push_back(chats.dialogs[chats_pos++].dialog_id);
}
}
}
auto limit = std::min({query.limit, MAX_TOP_DIALOGS_LIMIT, top_dialogs.dialogs.size()}); auto limit = std::min({query.limit, MAX_TOP_DIALOGS_LIMIT, dialog_ids.size()});
vector<DialogId> dialog_ids = transform(top_dialogs.dialogs, [](const auto &x) { return x.dialog_id; });
auto promise = PromiseCreator::lambda([query = std::move(query), dialog_ids, limit](Result<Unit>) mutable { auto promise = PromiseCreator::lambda([query = std::move(query), dialog_ids, limit](Result<Unit>) mutable {
vector<DialogId> result; vector<DialogId> result;
@ -351,11 +383,21 @@ void TopDialogManager::do_get_top_peers() {
int32 flags = contacts_getTopPeers::CORRESPONDENTS_MASK | contacts_getTopPeers::BOTS_PM_MASK | int32 flags = contacts_getTopPeers::CORRESPONDENTS_MASK | contacts_getTopPeers::BOTS_PM_MASK |
contacts_getTopPeers::BOTS_INLINE_MASK | contacts_getTopPeers::GROUPS_MASK | contacts_getTopPeers::BOTS_INLINE_MASK | contacts_getTopPeers::GROUPS_MASK |
contacts_getTopPeers::CHANNELS_MASK | contacts_getTopPeers::PHONE_CALLS_MASK; contacts_getTopPeers::CHANNELS_MASK | contacts_getTopPeers::PHONE_CALLS_MASK |
contacts_getTopPeers::FORWARD_USERS_MASK | contacts_getTopPeers::FORWARD_CHATS_MASK;
contacts_getTopPeers query{ contacts_getTopPeers query{flags,
flags, true /*correspondents*/, true /*bot_pm*/, true /*bot_inline */, true /*phone_calls*/, true /*correspondents*/,
true /*groups*/, true /*channels*/, 0 /*offset*/, 100 /*limit*/, hash}; true /*bot_pm*/,
true /*bot_inline */,
true /*phone_calls*/,
true /*groups*/,
true /*channels*/,
true /*forward_users*/,
true /*forward_chats*/,
0 /*offset*/,
100 /*limit*/,
hash};
auto net_query = G()->net_query_creator().create(create_storer(query)); auto net_query = G()->net_query_creator().create(create_storer(query));
G()->net_query_dispatcher().dispatch_with_callback(std::move(net_query), actor_shared(this)); G()->net_query_dispatcher().dispatch_with_callback(std::move(net_query), actor_shared(this));
} }

View File

@ -23,7 +23,17 @@
namespace td { namespace td {
enum class TopDialogCategory : int32 { Correspondent, BotPM, BotInline, Group, Channel, Call, Size }; enum class TopDialogCategory : int32 {
Correspondent,
BotPM,
BotInline,
Group,
Channel,
Call,
ForwardUsers,
ForwardChats,
Size
};
inline TopDialogCategory top_dialog_category_from_td_api(const td_api::TopChatCategory &category) { inline TopDialogCategory top_dialog_category_from_td_api(const td_api::TopChatCategory &category) {
switch (category.get_id()) { switch (category.get_id()) {
@ -39,6 +49,8 @@ inline TopDialogCategory top_dialog_category_from_td_api(const td_api::TopChatCa
return TopDialogCategory::Channel; return TopDialogCategory::Channel;
case td_api::topChatCategoryCalls::ID: case td_api::topChatCategoryCalls::ID:
return TopDialogCategory::Call; return TopDialogCategory::Call;
case td_api::topChatCategoryForwardChats::ID:
return TopDialogCategory::ForwardUsers;
default: default:
UNREACHABLE(); UNREACHABLE();
} }