diff --git a/Telegram/SourceFiles/data/components/sponsored_messages.cpp b/Telegram/SourceFiles/data/components/sponsored_messages.cpp index e60c0a1d3..4cb54fc7e 100644 --- a/Telegram/SourceFiles/data/components/sponsored_messages.cpp +++ b/Telegram/SourceFiles/data/components/sponsored_messages.cpp @@ -37,9 +37,20 @@ SponsoredMessages::SponsoredMessages(not_null<Main::Session*> session) } SponsoredMessages::~SponsoredMessages() { - for (const auto &request : _requests) { + Expects(_data.empty()); + Expects(_requests.empty()); + Expects(_viewRequests.empty()); +} + +void SponsoredMessages::clear() { + _lifetime.destroy(); + for (const auto &request : base::take(_requests)) { _session->api().request(request.second.requestId).cancel(); } + for (const auto &request : base::take(_viewRequests)) { + _session->api().request(request.second.requestId).cancel(); + } + base::take(_data); } void SponsoredMessages::clearOldRequests() { diff --git a/Telegram/SourceFiles/data/components/sponsored_messages.h b/Telegram/SourceFiles/data/components/sponsored_messages.h index 179dabf30..ca7edbdfe 100644 --- a/Telegram/SourceFiles/data/components/sponsored_messages.h +++ b/Telegram/SourceFiles/data/components/sponsored_messages.h @@ -80,8 +80,6 @@ public: }; using RandomId = QByteArray; explicit SponsoredMessages(not_null<Main::Session*> session); - SponsoredMessages(const SponsoredMessages &other) = delete; - SponsoredMessages &operator=(const SponsoredMessages &other) = delete; ~SponsoredMessages(); [[nodiscard]] bool canHaveFor(not_null<History*> history) const; @@ -104,6 +102,8 @@ public: [[nodiscard]] auto createReportCallback(const FullMsgId &fullId) -> Fn<void(SponsoredReportResult::Id, Fn<void(SponsoredReportResult)>)>; + void clear(); + private: using OwnedItem = std::unique_ptr<HistoryItem, HistoryItem::Destroyer>; struct Entry { diff --git a/Telegram/SourceFiles/data/data_session.cpp b/Telegram/SourceFiles/data/data_session.cpp index f44c14bac..23f121443 100644 --- a/Telegram/SourceFiles/data/data_session.cpp +++ b/Telegram/SourceFiles/data/data_session.cpp @@ -41,6 +41,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/business/data_business_info.h" #include "data/business/data_shortcut_messages.h" #include "data/components/scheduled_messages.h" +#include "data/components/sponsored_messages.h" #include "data/stickers/data_stickers.h" #include "data/notify/data_notify_settings.h" #include "data/data_bot_app.h" @@ -396,6 +397,7 @@ void Session::clear() { _histories->unloadAll(); _shortcutMessages = nullptr; _session->scheduledMessages().clear(); + _session->sponsoredMessages().clear(); _dependentMessages.clear(); base::take(_messages); base::take(_nonChannelMessages);