Correctly apply photos from "min" users.

This commit is contained in:
John Preston 2021-09-09 16:59:36 +03:00
parent 54e76c0b71
commit 28be89f7c3
2 changed files with 7 additions and 1 deletions

View file

@ -415,6 +415,7 @@ not_null<UserData*> Session::processUser(const MTPUser &data) {
| (!minimal | (!minimal
? Flag::Contact ? Flag::Contact
| Flag::MutualContact | Flag::MutualContact
| Flag::DiscardMinPhoto
: Flag()); : Flag());
const auto flagsSet = (data.is_deleted() ? Flag::Deleted : Flag()) const auto flagsSet = (data.is_deleted() ? Flag::Deleted : Flag())
| (data.is_verified() ? Flag::Verified : Flag()) | (data.is_verified() ? Flag::Verified : Flag())
@ -425,6 +426,7 @@ not_null<UserData*> Session::processUser(const MTPUser &data) {
| (!minimal | (!minimal
? (data.is_contact() ? Flag::Contact : Flag()) ? (data.is_contact() ? Flag::Contact : Flag())
| (data.is_mutual_contact() ? Flag::MutualContact : Flag()) | (data.is_mutual_contact() ? Flag::MutualContact : Flag())
| (data.is_apply_min_photo() ? Flag() : Flag::DiscardMinPhoto)
: Flag()); : Flag());
result->setFlags((result->flags() & ~flagsMask) | flagsSet); result->setFlags((result->flags() & ~flagsMask) | flagsSet);
if (minimal) { if (minimal) {
@ -510,7 +512,7 @@ not_null<UserData*> Session::processUser(const MTPUser &data) {
: result->nameOrPhone; : result->nameOrPhone;
result->setName(fname, lname, pname, uname); result->setName(fname, lname, pname, uname);
if (!minimal || data.is_apply_min_photo()) { if (!minimal || result->applyMinPhoto()) {
if (const auto photo = data.vphoto()) { if (const auto photo = data.vphoto()) {
result->setPhoto(*photo); result->setPhoto(*photo);
} else { } else {

View file

@ -36,6 +36,7 @@ enum class UserDataFlag {
PhoneCallsPrivate = (1 << 9), PhoneCallsPrivate = (1 << 9),
Support = (1 << 10), Support = (1 << 10),
CanPinMessages = (1 << 11), CanPinMessages = (1 << 11),
DiscardMinPhoto = (1 << 12),
}; };
inline constexpr bool is_flag_type(UserDataFlag) { return true; }; inline constexpr bool is_flag_type(UserDataFlag) { return true; };
using UserDataFlags = base::flags<UserDataFlag>; using UserDataFlags = base::flags<UserDataFlag>;
@ -108,6 +109,9 @@ public:
// Duplicated in Data::CanWriteValue(). // Duplicated in Data::CanWriteValue().
return !isInaccessible() && !isRepliesChat(); return !isInaccessible() && !isRepliesChat();
} }
[[nodiscard]] bool applyMinPhoto() const {
return !(flags() & UserDataFlag::DiscardMinPhoto);
}
[[nodiscard]] bool canShareThisContact() const; [[nodiscard]] bool canShareThisContact() const;
[[nodiscard]] bool canAddContact() const { [[nodiscard]] bool canAddContact() const {