@@ -25,24 +25,35 @@ protected internal override IPeerInfo UserOrChat(Dictionary<long, User> users, D
25
25
if ( ! user . flags . HasFlag ( User . Flags . min ) || ! _users . TryGetValue ( user . id , out var prevUser ) || prevUser . flags . HasFlag ( User . Flags . min ) )
26
26
_users [ user . id ] = user ;
27
27
else
28
- {
29
- const User . Flags good_min_flags = ( User . Flags ) 0x55A2201E ;
30
- const User . Flags2 good_min_flags2 = ( User . Flags2 ) 0x701 ;
31
- prevUser . flags = ( prevUser . flags & ~ good_min_flags ) | ( user . flags & good_min_flags ) ;
32
- prevUser . flags2 = ( prevUser . flags2 & ~ good_min_flags2 ) | ( user . flags2 & good_min_flags2 ) ;
33
- prevUser . first_name = user . first_name ;
34
- prevUser . last_name = user . last_name ;
35
- prevUser . username = user . username ;
36
- prevUser . phone = user . phone ;
37
- if ( prevUser . flags . HasFlag ( User . Flags . apply_min_photo ) && user . phone != null )
28
+ { // update previously full user from min user:
29
+ const User . Flags updated_flags = ( User . Flags ) 0x5DAFE000 ;
30
+ const User . Flags2 updated_flags2 = ( User . Flags2 ) 0x711 ;
31
+ // tdlib updated flags: deleted | bot | bot_chat_history | bot_nochats | verified | bot_inline_geo
32
+ // | support | scam | fake | bot_attach_menu | premium
33
+ // tdesktop non-updated flags: bot | bot_chat_history | bot_nochats | bot_attach_menu
34
+ // updated flags2: stories_unavailable (tdlib) | contact_require_premium (tdesktop)
35
+ prevUser . flags = ( prevUser . flags & ~ updated_flags ) | ( user . flags & updated_flags ) ;
36
+ prevUser . flags2 = ( prevUser . flags2 & ~ updated_flags2 ) | ( user . flags2 & updated_flags2 ) ;
37
+ prevUser . first_name ??= user . first_name ; // tdlib: not updated ; tdesktop: updated only if unknown
38
+ prevUser . last_name ??= user . last_name ; // tdlib: not updated ; tdesktop: updated only if unknown
39
+ //prevUser.username ??= user.username; // tdlib/tdesktop: not updated
40
+ prevUser . phone ??= user . phone ; // tdlib: updated only if unknown ; tdesktop: not updated
41
+ if ( prevUser . flags . HasFlag ( User . Flags . apply_min_photo ) && user . photo != null )
38
42
{
39
- prevUser . photo = user . photo ;
43
+ prevUser . photo = user . photo ; // tdlib/tdesktop: updated on apply_min_photo
40
44
prevUser . flags |= User . Flags . has_photo ;
41
45
}
42
- prevUser . emoji_status = user . emoji_status ;
43
- prevUser . usernames = user . usernames ;
44
- prevUser . color = user . color ;
45
- prevUser . profile_color = user . profile_color ;
46
+ prevUser . bot_info_version = user . bot_info_version ; // tdlib: updated ; tdesktop: not updated
47
+ prevUser . restriction_reason = user . restriction_reason ; // tdlib: updated ; tdesktop: not updated
48
+ prevUser . bot_inline_placeholder = user . bot_inline_placeholder ; // tdlib: updated ; tdesktop: ignored
49
+ if ( user . lang_code != null )
50
+ prevUser . lang_code = user . lang_code ; // tdlib: updated if present ; tdesktop: ignored
51
+ prevUser . emoji_status = user . emoji_status ; // tdlib/tdesktop: updated
52
+ prevUser . usernames = user . usernames ; // tdlib: not updated ; tdesktop: updated
53
+ if ( user . stories_max_id > 0 )
54
+ prevUser . stories_max_id = user . stories_max_id ; // tdlib: updated if > 0 ; tdesktop: not updated
55
+ prevUser . color = user . color ; // tdlib/tdesktop: updated
56
+ prevUser . profile_color = user . profile_color ; // tdlib/tdesktop: unimplemented yet
46
57
_users [ user . id ] = prevUser ;
47
58
}
48
59
if ( _chats != null )
@@ -53,20 +64,26 @@ protected internal override IPeerInfo UserOrChat(Dictionary<long, User> users, D
53
64
else if ( ! channel . flags . HasFlag ( Channel . Flags . min ) || ! _chats . TryGetValue ( kvp . Key , out var prevChat ) || prevChat is not Channel prevChannel || prevChannel . flags . HasFlag ( Channel . Flags . min ) )
54
65
_chats [ kvp . Key ] = channel ;
55
66
else
56
- {
57
- const Channel . Flags good_min_flags = ( Channel . Flags ) 0x7FDC09E0 ;
58
- const Channel . Flags2 good_min_flags2 = ( Channel . Flags2 ) 0x781 ;
59
- prevChannel . flags = ( prevChannel . flags & ~ good_min_flags ) | ( channel . flags & good_min_flags ) ;
60
- prevChannel . flags2 = ( prevChannel . flags2 & ~ good_min_flags2 ) | ( channel . flags2 & good_min_flags2 ) ;
61
- prevChannel . title = channel . title ;
62
- prevChannel . username = channel . username ;
63
- prevChannel . photo = channel . photo ;
64
- prevChannel . default_banned_rights = channel . default_banned_rights ;
65
- prevChannel . usernames = channel . usernames ;
66
- prevChannel . color = channel . color ;
67
- prevChannel . profile_color = channel . profile_color ;
68
- prevChannel . emoji_status = channel . emoji_status ;
69
- prevChannel . level = channel . level ;
67
+ { // update previously full channel from min channel:
68
+ const Channel . Flags updated_flags = ( Channel . Flags ) 0x7FDC0BE0 ;
69
+ const Channel . Flags2 updated_flags2 = ( Channel . Flags2 ) 0x781 ;
70
+ // tdesktop updated flags: broadcast | verified | megagroup | signatures | scam | has_link | slowmode_enabled
71
+ // | call_active | call_not_empty | fake | gigagroup | noforwards | join_to_send | join_request | forum
72
+ // tdlib nonupdated flags: broadcast | signatures | call_active | call_not_empty | noforwards
73
+ prevChannel . flags = ( prevChannel . flags & ~ updated_flags ) | ( channel . flags & updated_flags ) ;
74
+ prevChannel . flags2 = ( prevChannel . flags2 & ~ updated_flags2 ) | ( channel . flags2 & updated_flags2 ) ;
75
+ prevChannel . title = channel . title ; // tdlib/tdesktop: updated
76
+ prevChannel . username = channel . username ; // tdlib/tdesktop: updated
77
+ prevChannel . photo = channel . photo ; // tdlib: updated if not banned ; tdesktop: updated
78
+ prevChannel . restriction_reason = channel . restriction_reason ; // tdlib: updated ; tdesktop: not updated
79
+ prevChannel . default_banned_rights = channel . default_banned_rights ; // tdlib/tdesktop: updated
80
+ if ( channel . participants_count > 0 )
81
+ prevChannel . participants_count = channel . participants_count ; // tdlib/tdesktop: updated if present
82
+ prevChannel . usernames = channel . usernames ; // tdlib/tdesktop: updated
83
+ prevChannel . color = channel . color ; // tdlib: not updated ; tdesktop: updated
84
+ prevChannel . profile_color = channel . profile_color ; // tdlib/tdesktop: ignored
85
+ prevChannel . emoji_status = channel . emoji_status ; // tdlib: not updated ; tdesktop: updated
86
+ prevChannel . level = channel . level ; // tdlib: not updated ; tdesktop: updated
70
87
_chats [ kvp . Key ] = prevChannel ;
71
88
}
72
89
return null ;
0 commit comments