Don't use MTP for PeerData::isSelf.

This commit is contained in:
John Preston 2021-12-01 18:51:18 +04:00
parent 8592326a3c
commit afcebb136c
6 changed files with 31 additions and 15 deletions

View file

@ -795,6 +795,13 @@ QString PeerData::userName() const {
return QString(); return QString();
} }
bool PeerData::isSelf() const {
if (const auto user = asUser()) {
return (user->flags() & UserDataFlag::Self);
}
return false;
}
bool PeerData::isVerified() const { bool PeerData::isVerified() const {
if (const auto user = asUser()) { if (const auto user = asUser()) {
return user->isVerified(); return user->isVerified();

View file

@ -164,9 +164,7 @@ public:
[[nodiscard]] bool isChannel() const { [[nodiscard]] bool isChannel() const {
return peerIsChannel(id); return peerIsChannel(id);
} }
[[nodiscard]] bool isSelf() const { [[nodiscard]] bool isSelf() const;
return (input.type() == mtpc_inputPeerSelf);
}
[[nodiscard]] bool isVerified() const; [[nodiscard]] bool isVerified() const;
[[nodiscard]] bool isScam() const; [[nodiscard]] bool isScam() const;
[[nodiscard]] bool isFake() const; [[nodiscard]] bool isFake() const;

View file

@ -25,7 +25,8 @@ using UpdateFlag = Data::PeerUpdate::Flag;
} // namespace } // namespace
UserData::UserData(not_null<Data::Session*> owner, PeerId id) UserData::UserData(not_null<Data::Session*> owner, PeerId id)
: PeerData(owner, id) { : PeerData(owner, id)
, _flags((id == owner->session().userPeerId()) ? Flag::Self : Flag(0)) {
} }
bool UserData::canShareThisContact() const { bool UserData::canShareThisContact() const {
@ -173,6 +174,19 @@ void UserData::setAccessHash(uint64 accessHash) {
} }
} }
void UserData::setFlags(UserDataFlags which) {
_flags.set((flags() & UserDataFlag::Self)
| (which & ~UserDataFlag::Self));
}
void UserData::addFlags(UserDataFlags which) {
_flags.add(which & ~UserDataFlag::Self);
}
void UserData::removeFlags(UserDataFlags which) {
_flags.remove(which & ~UserDataFlag::Self);
}
void UserData::setCallsStatus(CallsStatus callsStatus) { void UserData::setCallsStatus(CallsStatus callsStatus) {
if (callsStatus != _callsStatus) { if (callsStatus != _callsStatus) {
_callsStatus = callsStatus; _callsStatus = callsStatus;

View file

@ -37,6 +37,7 @@ enum class UserDataFlag {
Support = (1 << 10), Support = (1 << 10),
CanPinMessages = (1 << 11), CanPinMessages = (1 << 11),
DiscardMinPhoto = (1 << 12), DiscardMinPhoto = (1 << 12),
Self = (1 << 13),
}; };
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>;
@ -68,21 +69,15 @@ public:
} }
void setAccessHash(uint64 accessHash); void setAccessHash(uint64 accessHash);
void setFlags(UserDataFlags which) {
_flags.set(which);
}
void addFlags(UserDataFlags which) {
_flags.add(which);
}
void removeFlags(UserDataFlags which) {
_flags.remove(which);
}
auto flags() const { auto flags() const {
return _flags.current(); return _flags.current();
} }
auto flagsValue() const { auto flagsValue() const {
return _flags.value(); return _flags.value();
} }
void setFlags(UserDataFlags which);
void addFlags(UserDataFlags which);
void removeFlags(UserDataFlags which);
[[nodiscard]] bool isVerified() const { [[nodiscard]] bool isVerified() const {
return flags() & UserDataFlag::Verified; return flags() & UserDataFlag::Verified;

View file

@ -78,6 +78,7 @@ Session::Session(
, _uploader(std::make_unique<Storage::Uploader>(_api.get())) , _uploader(std::make_unique<Storage::Uploader>(_api.get()))
, _storage(std::make_unique<Storage::Facade>()) , _storage(std::make_unique<Storage::Facade>())
, _data(std::make_unique<Data::Session>(this)) , _data(std::make_unique<Data::Session>(this))
, _userId(user.c_user().vid())
, _user(_data->processUser(user)) , _user(_data->processUser(user))
, _emojiStickersPack(std::make_unique<Stickers::EmojiPack>(this)) , _emojiStickersPack(std::make_unique<Stickers::EmojiPack>(this))
, _diceStickersPacks(std::make_unique<Stickers::DicePacks>(this)) , _diceStickersPacks(std::make_unique<Stickers::DicePacks>(this))
@ -213,11 +214,11 @@ uint64 Session::uniqueId() const {
} }
UserId Session::userId() const { UserId Session::userId() const {
return peerToUser(_user->id); return _userId;
} }
PeerId Session::userPeerId() const { PeerId Session::userPeerId() const {
return _user->id; return _userId;
} }
bool Session::validateSelf(UserId id) { bool Session::validateSelf(UserId id) {

View file

@ -179,6 +179,7 @@ private:
// _data depends on _downloader / _uploader. // _data depends on _downloader / _uploader.
const std::unique_ptr<Data::Session> _data; const std::unique_ptr<Data::Session> _data;
const UserId _userId;
const not_null<UserData*> _user; const not_null<UserData*> _user;
// _emojiStickersPack depends on _data. // _emojiStickersPack depends on _data.