diff --git a/Telegram/SourceFiles/data/data_peer.cpp b/Telegram/SourceFiles/data/data_peer.cpp index a18057ca0..5fa677a5b 100644 --- a/Telegram/SourceFiles/data/data_peer.cpp +++ b/Telegram/SourceFiles/data/data_peer.cpp @@ -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(); diff --git a/Telegram/SourceFiles/data/data_peer.h b/Telegram/SourceFiles/data/data_peer.h index 404c22884..e8f34931c 100644 --- a/Telegram/SourceFiles/data/data_peer.h +++ b/Telegram/SourceFiles/data/data_peer.h @@ -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; diff --git a/Telegram/SourceFiles/data/data_user.cpp b/Telegram/SourceFiles/data/data_user.cpp index bf714b4e8..68b79056c 100644 --- a/Telegram/SourceFiles/data/data_user.cpp +++ b/Telegram/SourceFiles/data/data_user.cpp @@ -25,7 +25,8 @@ using UpdateFlag = Data::PeerUpdate::Flag; } // namespace UserData::UserData(not_null 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; diff --git a/Telegram/SourceFiles/data/data_user.h b/Telegram/SourceFiles/data/data_user.h index be0bbf746..b7e3c6bd9 100644 --- a/Telegram/SourceFiles/data/data_user.h +++ b/Telegram/SourceFiles/data/data_user.h @@ -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; @@ -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; diff --git a/Telegram/SourceFiles/main/main_session.cpp b/Telegram/SourceFiles/main/main_session.cpp index b329e30bc..a98e2c5ed 100644 --- a/Telegram/SourceFiles/main/main_session.cpp +++ b/Telegram/SourceFiles/main/main_session.cpp @@ -78,6 +78,7 @@ Session::Session( , _uploader(std::make_unique(_api.get())) , _storage(std::make_unique()) , _data(std::make_unique(this)) +, _userId(user.c_user().vid()) , _user(_data->processUser(user)) , _emojiStickersPack(std::make_unique(this)) , _diceStickersPacks(std::make_unique(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) { diff --git a/Telegram/SourceFiles/main/main_session.h b/Telegram/SourceFiles/main/main_session.h index 004a15b4d..b40f908b9 100644 --- a/Telegram/SourceFiles/main/main_session.h +++ b/Telegram/SourceFiles/main/main_session.h @@ -179,6 +179,7 @@ private: // _data depends on _downloader / _uploader. const std::unique_ptr _data; + const UserId _userId; const not_null _user; // _emojiStickersPack depends on _data.