/* This file is part of Telegram Desktop, the official desktop application for the Telegram messaging service. For license and copyright information please follow this link: https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #pragma once #include "data/notify/data_peer_notify_settings.h" #include "base/timer.h" class PeerData; namespace Data { class DocumentMedia; class Session; class NotifySettings final { public: NotifySettings(not_null owner); void request(not_null peer); void apply( const MTPNotifyPeer ¬ifyPeer, const MTPPeerNotifySettings &settings); void update( not_null peer, std::optional muteForSeconds, std::optional silentPosts = std::nullopt, std::optional sound = std::nullopt); void resetToDefault(not_null peer); std::shared_ptr lookupRingtone(DocumentId id) const; [[nodiscard]] rpl::producer<> defaultUserNotifyUpdates() const; [[nodiscard]] rpl::producer<> defaultChatNotifyUpdates() const; [[nodiscard]] rpl::producer<> defaultBroadcastNotifyUpdates() const; [[nodiscard]] rpl::producer<> defaultNotifyUpdates( not_null peer) const; [[nodiscard]] bool isMuted(not_null peer) const; [[nodiscard]] bool silentPosts(not_null peer) const; [[nodiscard]] NotifySound sound(not_null peer) const; [[nodiscard]] bool muteUnknown(not_null peer) const; [[nodiscard]] bool silentPostsUnknown( not_null peer) const; [[nodiscard]] bool soundUnknown(not_null peer) const; private: [[nodiscard]] bool isMuted( not_null peer, crl::time *changesIn) const; [[nodiscard]] const PeerNotifySettings &defaultNotifySettings( not_null peer) const; [[nodiscard]] bool settingsUnknown(not_null peer) const; void unmuteByFinished(); void unmuteByFinishedDelayed(crl::time delay); void updateLocal(not_null peer); const not_null _owner; PeerNotifySettings _defaultUser; PeerNotifySettings _defaultChat; PeerNotifySettings _defaultBroadcast; rpl::event_stream<> _defaultUserUpdates; rpl::event_stream<> _defaultChatUpdates; rpl::event_stream<> _defaultBroadcastUpdates; std::unordered_set> _mutedPeers; base::Timer _unmuteByFinishedTimer; struct { base::flat_map< DocumentId, std::shared_ptr> views; std::vector pendingIds; rpl::lifetime pendingLifetime; } _ringtones; }; } // namespace Data