diff --git a/Telegram/SourceFiles/data/notify/data_notify_settings.cpp b/Telegram/SourceFiles/data/notify/data_notify_settings.cpp index 3664e40ae..fe9005798 100644 --- a/Telegram/SourceFiles/data/notify/data_notify_settings.cpp +++ b/Telegram/SourceFiles/data/notify/data_notify_settings.cpp @@ -161,25 +161,7 @@ void NotifySettings::updateLocal(not_null peer) { } else { _mutedPeers.erase(peer); } - - if (const auto sound = peer->notifySound(); sound && sound->id) { - if (const auto doc = _owner->document(sound->id); !doc->isNull()) { - cacheSound(doc); - } else { - _ringtones.pendingIds.push_back(sound->id); - if (!_ringtones.pendingLifetime) { - // Not requested yet. - _owner->session().api().ringtones().listUpdates( - ) | rpl::start_with_next([=] { - for (const auto id : base::take(_ringtones.pendingIds)) { - cacheSound(id); - } - _ringtones.pendingLifetime.destroy(); - }, _ringtones.pendingLifetime); - _owner->session().api().ringtones().requestList(); - } - } - } + cacheSound(peer->notifySound()); } void NotifySettings::cacheSound(DocumentId id) { @@ -196,6 +178,28 @@ void NotifySettings::cacheSound(not_null document) { document->save(Data::FileOriginRingtones(), QString()); } +void NotifySettings::cacheSound(const std::optional &sound) { + if (!sound || !sound->id) { + return; + } else if (const auto doc = _owner->document(sound->id); !doc->isNull()) { + cacheSound(doc); + return; + } + _ringtones.pendingIds.push_back(sound->id); + if (_ringtones.pendingLifetime) { + return; + } + // Not requested yet. + _owner->session().api().ringtones().listUpdates( + ) | rpl::start_with_next([=] { + for (const auto id : base::take(_ringtones.pendingIds)) { + cacheSound(id); + } + _ringtones.pendingLifetime.destroy(); + }, _ringtones.pendingLifetime); + _owner->session().api().ringtones().requestList(); +} + void NotifySettings::updateLocal(DefaultNotify type) { defaultValue(type).updates.fire({}); @@ -220,6 +224,7 @@ void NotifySettings::updateLocal(DefaultNotify type) { _owner->enumerateBroadcasts(callback); break; } + cacheSound(defaultValue(type).settings.sound()); } std::shared_ptr NotifySettings::lookupRingtone( diff --git a/Telegram/SourceFiles/data/notify/data_notify_settings.h b/Telegram/SourceFiles/data/notify/data_notify_settings.h index 2d1f792d7..557700b23 100644 --- a/Telegram/SourceFiles/data/notify/data_notify_settings.h +++ b/Telegram/SourceFiles/data/notify/data_notify_settings.h @@ -71,6 +71,8 @@ private: rpl::event_stream<> updates; }; + void cacheSound(const std::optional &sound); + [[nodiscard]] bool isMuted( not_null peer, crl::time *changesIn) const;