From 038de9ef153cc93ed4fce8168e1824c90700a649 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sun, 13 Jun 2021 07:44:30 +0300 Subject: [PATCH] Changed behavior to keep StickerSetBox until pack is archived. --- .../SourceFiles/boxes/sticker_set_box.cpp | 69 ++++++++++--------- 1 file changed, 38 insertions(+), 31 deletions(-) diff --git a/Telegram/SourceFiles/boxes/sticker_set_box.cpp b/Telegram/SourceFiles/boxes/sticker_set_box.cpp index 814dc2b7f3..d824993dec 100644 --- a/Telegram/SourceFiles/boxes/sticker_set_box.cpp +++ b/Telegram/SourceFiles/boxes/sticker_set_box.cpp @@ -69,6 +69,7 @@ public: void install(); [[nodiscard]] rpl::producer setInstalled() const; + [[nodiscard]] rpl::producer setArchived() const; [[nodiscard]] rpl::producer<> updateControls() const; [[nodiscard]] rpl::producer errors() const; @@ -143,6 +144,7 @@ private: int _previewShown = -1; rpl::event_stream _setInstalled; + rpl::event_stream _setArchived; rpl::event_stream<> _updateControls; rpl::event_stream _errors; @@ -204,6 +206,36 @@ void StickerSetBox::prepare() { ) | rpl::start_with_next([=](Error error) { handleError(error); }, lifetime()); + + _inner->setArchived( + ) | rpl::start_with_next([=](uint64 setId) { + const auto isMasks = _inner->isMasksSet(); + + Ui::Toast::Show(isMasks + ? tr::lng_masks_has_been_archived(tr::now) + : tr::lng_stickers_has_been_archived(tr::now)); + + auto &order = isMasks + ? _controller->session().data().stickers().maskSetsOrderRef() + : _controller->session().data().stickers().setsOrderRef(); + const auto index = order.indexOf(setId); + if (index != -1) { + order.removeAt(index); + + auto &local = _controller->session().local(); + if (isMasks) { + local.writeInstalledMasks(); + local.writeArchivedMasks(); + } else { + local.writeInstalledStickers(); + local.writeArchivedStickers(); + } + } + + _controller->session().data().stickers().notifyUpdated(); + + closeBox(); + }, lifetime()); } void StickerSetBox::addStickers() { @@ -283,7 +315,6 @@ void StickerSetBox::updateButtons() { const auto top = addTopButton(st::infoTopBarMenu); const auto archive = [=] { _inner->archiveStickers(); - closeBox(); }; const auto menu = std::make_shared>(); @@ -450,6 +481,10 @@ rpl::producer StickerSetBox::Inner::setInstalled() const { return _setInstalled.events(); } +rpl::producer StickerSetBox::Inner::setArchived() const { + return _setArchived.events(); +} + rpl::producer<> StickerSetBox::Inner::updateControls() const { return _updateControls.events(); } @@ -856,40 +891,12 @@ void StickerSetBox::Inner::install() { } void StickerSetBox::Inner::archiveStickers() { - const auto isMasks = isMasksSet(); - const auto weak = base::make_weak(_controller.get()); - _controller->session().api().request(MTPmessages_InstallStickerSet( + _api.request(MTPmessages_InstallStickerSet( _input, MTP_boolTrue() )).done([=](const MTPmessages_StickerSetInstallResult &result) { - const auto controller = weak.get(); - if (!controller) { - return; - } if (result.type() == mtpc_messages_stickerSetInstallResultSuccess) { - Ui::Toast::Show(isMasks - ? tr::lng_masks_has_been_archived(tr::now) - : tr::lng_stickers_has_been_archived(tr::now)); - - const auto &session = controller->session(); - auto &order = isMasks - ? session.data().stickers().maskSetsOrderRef() - : session.data().stickers().setsOrderRef(); - const auto index = order.indexOf(_setId); - if (index == -1) { - return; - } - order.removeAt(index); - - if (isMasks) { - session.local().writeInstalledMasks(); - session.local().writeArchivedMasks(); - } else { - session.local().writeInstalledStickers(); - session.local().writeArchivedStickers(); - } - - session.data().stickers().notifyUpdated(); + _setArchived.fire_copy(_setId); } }).fail([](const MTP::Error &error) { Ui::Toast::Show(Lang::Hard::ServerError());