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();
}
bool PeerData::isSelf() const {
if (const auto user = asUser()) {
return (user->flags() & UserDataFlag::Self);
}
return false;
}
bool PeerData::isVerified() const {
if (const auto user = asUser()) {
return user->isVerified();

View File

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

View File

@ -25,7 +25,8 @@ using UpdateFlag = Data::PeerUpdate::Flag;
} // namespace
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 {
@ -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) {
if (callsStatus != _callsStatus) {
_callsStatus = callsStatus;

View File

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

View File

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

View File

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