diff --git a/Telegram/SourceFiles/data/components/scheduled_messages.cpp b/Telegram/SourceFiles/data/components/scheduled_messages.cpp index c7e2daddc2..92e0da8808 100644 --- a/Telegram/SourceFiles/data/components/scheduled_messages.cpp +++ b/Telegram/SourceFiles/data/components/scheduled_messages.cpp @@ -113,9 +113,16 @@ ScheduledMessages::ScheduledMessages(not_null session) } ScheduledMessages::~ScheduledMessages() { - for (const auto &request : _requests) { + Expects(_data.empty()); + Expects(_requests.empty()); +} + +void ScheduledMessages::clear() { + _lifetime.destroy(); + for (const auto &request : base::take(_requests)) { _session->api().request(request.second.requestId).cancel(); } + base::take(_data); } void ScheduledMessages::clearOldRequests() { diff --git a/Telegram/SourceFiles/data/components/scheduled_messages.h b/Telegram/SourceFiles/data/components/scheduled_messages.h index f1c568d928..90d5b04151 100644 --- a/Telegram/SourceFiles/data/components/scheduled_messages.h +++ b/Telegram/SourceFiles/data/components/scheduled_messages.h @@ -55,6 +55,8 @@ public: [[nodiscard]] Data::MessagesSlice list( not_null topic) const; + void clear(); + private: using OwnedItem = std::unique_ptr; struct List { diff --git a/Telegram/SourceFiles/data/data_session.cpp b/Telegram/SourceFiles/data/data_session.cpp index ed165a0c96..22cea37dbc 100644 --- a/Telegram/SourceFiles/data/data_session.cpp +++ b/Telegram/SourceFiles/data/data_session.cpp @@ -40,6 +40,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/business/data_business_chatbots.h" #include "data/business/data_business_info.h" #include "data/business/data_shortcut_messages.h" +#include "data/components/scheduled_messages.h" #include "data/stickers/data_stickers.h" #include "data/notify/data_notify_settings.h" #include "data/data_bot_app.h" @@ -394,6 +395,7 @@ void Session::clear() { _histories->unloadAll(); _shortcutMessages = nullptr; + _session->scheduledMessages().clear(); _dependentMessages.clear(); base::take(_messages); base::take(_nonChannelMessages);