diff --git a/Telegram/SourceFiles/chat_helpers/stickers_list_widget.cpp b/Telegram/SourceFiles/chat_helpers/stickers_list_widget.cpp index 0c41710b1..d5f2bc125 100644 --- a/Telegram/SourceFiles/chat_helpers/stickers_list_widget.cpp +++ b/Telegram/SourceFiles/chat_helpers/stickers_list_widget.cpp @@ -3153,55 +3153,75 @@ void StickersListWidget::removeMegagroupSet(bool locally) { void StickersListWidget::removeSet(uint64 setId) { const auto &sets = session().data().stickers().sets(); const auto it = sets.find(setId); - if (it != sets.cend()) { - const auto set = it->second.get(); - _removingSetId = set->id; - auto text = tr::lng_stickers_remove_pack(tr::now, lt_sticker_pack, set->title); - controller()->show(Box(text, tr::lng_stickers_remove_pack_confirm(tr::now), crl::guard(this, [=] { - Ui::hideLayer(); - const auto &sets = session().data().stickers().sets(); - const auto it = sets.find(_removingSetId); - if (it != sets.cend()) { - const auto set = it->second.get(); - if (set->id && set->access) { - _api.request(MTPmessages_UninstallStickerSet(MTP_inputStickerSetID(MTP_long(set->id), MTP_long(set->access)))).send(); - } else if (!set->shortName.isEmpty()) { - _api.request(MTPmessages_UninstallStickerSet(MTP_inputStickerSetShortName(MTP_string(set->shortName)))).send(); - } - auto writeRecent = false; - auto &recent = session().data().stickers().getRecentPack(); - for (auto i = recent.begin(); i != recent.cend();) { - if (set->stickers.indexOf(i->first) >= 0) { - i = recent.erase(i); - writeRecent = true; - } else { - ++i; - } - } - set->flags &= ~MTPDstickerSet::Flag::f_installed_date; - set->installDate = TimeId(0); - // - // Set can be in search results. - // - //if (!(set->flags & MTPDstickerSet_ClientFlag::f_featured) - // && !(set->flags & MTPDstickerSet_ClientFlag::f_special)) { - // sets.erase(it); - //} - int removeIndex = defaultSetsOrder().indexOf(_removingSetId); - if (removeIndex >= 0) { - defaultSetsOrderRef().removeAt(removeIndex); - } - refreshStickers(); - session().local().writeInstalledStickers(); - if (writeRecent) session().saveSettings(); - } - _removingSetId = 0; - _checkForHide.fire({}); - }), crl::guard(this, [=] { - _removingSetId = 0; - _checkForHide.fire({}); - }))); + if (it == sets.cend()) { + return; } + const auto set = it->second.get(); + _removingSetId = set->id; + const auto text = tr::lng_stickers_remove_pack( + tr::now, + lt_sticker_pack, + set->title); + const auto confirm = tr::lng_stickers_remove_pack_confirm(tr::now); + controller()->show(Box(text, confirm, crl::guard(this, [=]( + Fn &&close) { + close(); + const auto &sets = session().data().stickers().sets(); + const auto it = sets.find(_removingSetId); + if (it != sets.cend()) { + const auto set = it->second.get(); + if (set->id && set->access) { + _api.request(MTPmessages_UninstallStickerSet( + MTP_inputStickerSetID( + MTP_long(set->id), + MTP_long(set->access))) + ).send(); + } else if (!set->shortName.isEmpty()) { + _api.request(MTPmessages_UninstallStickerSet( + MTP_inputStickerSetShortName( + MTP_string(set->shortName))) + ).send(); + } + auto writeRecent = false; + auto &recent = session().data().stickers().getRecentPack(); + for (auto i = recent.begin(); i != recent.cend();) { + if (set->stickers.indexOf(i->first) >= 0) { + i = recent.erase(i); + writeRecent = true; + } else { + ++i; + } + } + set->flags &= ~MTPDstickerSet::Flag::f_installed_date; + set->installDate = TimeId(0); + // + // Set can be in search results. + // + //if (!(set->flags & MTPDstickerSet_ClientFlag::f_featured) + // && !(set->flags & MTPDstickerSet_ClientFlag::f_special)) { + // sets.erase(it); + //} + const auto removeIndex = defaultSetsOrder().indexOf( + _removingSetId); + if (removeIndex >= 0) { + defaultSetsOrderRef().removeAt(removeIndex); + } + refreshStickers(); + if (set->flags & MTPDstickerSet::Flag::f_masks) { + session().local().writeInstalledMasks(); + } else { + session().local().writeInstalledStickers(); + } + if (writeRecent) { + session().saveSettings(); + } + } + _removingSetId = 0; + _checkForHide.fire({}); + }), crl::guard(this, [=] { + _removingSetId = 0; + _checkForHide.fire({}); + })), Ui::LayerOption::KeepOther); } const Data::StickersSetsOrder &StickersListWidget::defaultSetsOrder() const {