diff --git a/Telegram/SourceFiles/data/data_channel.cpp b/Telegram/SourceFiles/data/data_channel.cpp index 8761065915..6378df5f24 100644 --- a/Telegram/SourceFiles/data/data_channel.cpp +++ b/Telegram/SourceFiles/data/data_channel.cpp @@ -624,6 +624,10 @@ bool ChannelData::allowsForwarding() const { return !(flags() & Flag::NoForwards); } +bool ChannelData::allowsAyuForwarding() const { + return !(flags() & Flag::AyuNoForwards); +} + bool ChannelData::canViewMembers() const { return (flags() & Flag::CanViewParticipants) && (!(flags() & Flag::ParticipantsHidden) diff --git a/Telegram/SourceFiles/data/data_channel.h b/Telegram/SourceFiles/data/data_channel.h index b4f99b5243..d4c356aa34 100644 --- a/Telegram/SourceFiles/data/data_channel.h +++ b/Telegram/SourceFiles/data/data_channel.h @@ -74,6 +74,7 @@ enum class ChannelDataFlag : uint64 { StargiftsAvailable = (1ULL << 36), PaidMessagesAvailable = (1ULL << 37), AutoTranslation = (1ULL << 38), + AyuNoForwards = (1ULL << 39), }; inline constexpr bool is_flag_type(ChannelDataFlag) { return true; }; using ChannelDataFlags = base::flags; @@ -365,6 +366,7 @@ public: // Like in ChatData. [[nodiscard]] bool allowsForwarding() const; + [[nodiscard]] bool allowsAyuForwarding() const; [[nodiscard]] bool canEditInformation() const; [[nodiscard]] bool canEditPermissions() const; [[nodiscard]] bool canEditUsername() const; diff --git a/Telegram/SourceFiles/data/data_chat.cpp b/Telegram/SourceFiles/data/data_chat.cpp index fc33c01708..49e4914cdb 100644 --- a/Telegram/SourceFiles/data/data_chat.cpp +++ b/Telegram/SourceFiles/data/data_chat.cpp @@ -68,6 +68,10 @@ bool ChatData::allowsForwarding() const { return !(flags() & Flag::NoForwards); } +bool ChatData::allowsAyuForwarding() const { + return !(flags() & Flag::AyuNoForwards); +} + bool ChatData::canEditInformation() const { return amIn() && !amRestricted(ChatRestriction::ChangeInfo); } diff --git a/Telegram/SourceFiles/data/data_chat.h b/Telegram/SourceFiles/data/data_chat.h index 5a285aeeb5..7fd38f6b4c 100644 --- a/Telegram/SourceFiles/data/data_chat.h +++ b/Telegram/SourceFiles/data/data_chat.h @@ -23,6 +23,7 @@ enum class ChatDataFlag { CallNotEmpty = (1 << 6), CanSetUsername = (1 << 7), NoForwards = (1 << 8), + AyuNoForwards = (1 << 9), }; inline constexpr bool is_flag_type(ChatDataFlag) { return true; }; using ChatDataFlags = base::flags; @@ -99,6 +100,7 @@ public: // Like in ChannelData. [[nodiscard]] bool allowsForwarding() const; + [[nodiscard]] bool allowsAyuForwarding() const; [[nodiscard]] bool canEditInformation() const; [[nodiscard]] bool canEditPermissions() const; [[nodiscard]] bool canEditUsername() const; diff --git a/Telegram/SourceFiles/data/data_peer.cpp b/Telegram/SourceFiles/data/data_peer.cpp index 40a29139b0..f0e487c6eb 100644 --- a/Telegram/SourceFiles/data/data_peer.cpp +++ b/Telegram/SourceFiles/data/data_peer.cpp @@ -1397,6 +1397,17 @@ bool PeerData::allowsForwarding() const { return false; } +bool PeerData::allowsAyuForwarding() const { + if (const auto user = asUser()) { + return true; + } else if (const auto channel = asChannel()) { + return channel->allowsAyuForwarding(); + } else if (const auto chat = asChat()) { + return chat->allowsAyuForwarding(); + } + return false; +} + Data::RestrictionCheckResult PeerData::amRestricted( ChatRestriction right) const { using Result = Data::RestrictionCheckResult; diff --git a/Telegram/SourceFiles/data/data_peer.h b/Telegram/SourceFiles/data/data_peer.h index b0563c42d5..8e932c1cf0 100644 --- a/Telegram/SourceFiles/data/data_peer.h +++ b/Telegram/SourceFiles/data/data_peer.h @@ -265,6 +265,7 @@ public: } [[nodiscard]] bool allowsForwarding() const; + [[nodiscard]] bool allowsAyuForwarding() const; [[nodiscard]] Data::RestrictionCheckResult amRestricted( ChatRestriction right) const; [[nodiscard]] bool amAnonymous() const; diff --git a/Telegram/SourceFiles/data/data_session.cpp b/Telegram/SourceFiles/data/data_session.cpp index 4d32e35e57..28cb237589 100644 --- a/Telegram/SourceFiles/data/data_session.cpp +++ b/Telegram/SourceFiles/data/data_session.cpp @@ -860,7 +860,8 @@ not_null Session::processChat(const MTPChat &data) { && chat->groupCall()->fullCount() > 0)) ? Flag::CallNotEmpty : Flag()) - | (data.is_noforwards() ? Flag::NoForwards : Flag()); + | (data.is_noforwards() ? Flag::NoForwards : Flag()) + | (data.is_ayuNoforwards() ? Flag::AyuNoForwards : Flag()); chat->setFlags((chat->flags() & ~flagsMask) | flagsSet); chat->count = data.vparticipants_count().v; @@ -1007,6 +1008,7 @@ not_null Session::processChat(const MTPChat &data) { | (data.is_creator() ? Flag::Creator : Flag()) : Flag()) | (data.is_noforwards() ? Flag::NoForwards : Flag()) + | (data.is_ayuNoforwards() ? Flag::AyuNoForwards : Flag()) | (data.is_join_to_send() ? Flag::JoinToWrite : Flag()) | (data.is_join_request() ? Flag::RequestToJoin : Flag()) | ((data.is_forum() && data.is_megagroup())