diff --git a/Telegram/SourceFiles/chat_helpers/stickers_list_widget.cpp b/Telegram/SourceFiles/chat_helpers/stickers_list_widget.cpp index 9ed700e45..c46421501 100644 --- a/Telegram/SourceFiles/chat_helpers/stickers_list_widget.cpp +++ b/Telegram/SourceFiles/chat_helpers/stickers_list_widget.cpp @@ -1424,6 +1424,8 @@ bool StickersListWidget::hasRemoveButton(int index) const { return true; } return !set.stickers.empty() && _megagroupSet->canEditStickers(); + } else if (set.id == Data::Stickers::PremiumSetId) { + return !set.stickers.empty(); } return false; } @@ -1666,10 +1668,6 @@ void StickersListWidget::mouseReleaseEvent(QMouseEvent *e) { Assert(button->section >= 0 && button->section < sets.size()); if (sets[button->section].externalLayout) { _localSetsManager->install(sets[button->section].id); - } else if (sets[button->section].id == Data::Stickers::MegagroupSetId) { - auto removeLocally = sets[button->section].stickers.empty() - || !_megagroupSet->canEditStickers(); - removeMegagroupSet(removeLocally); } else { removeSet(sets[button->section].id); } @@ -2134,7 +2132,8 @@ void StickersListWidget::refreshRecentStickers(bool performResize) { } void StickersListWidget::refreshPremiumStickers() { - if (_isMasks) { + if (_isMasks + || controller()->session().settings().skipPremiumStickersSet()) { return; } clearSelection(); @@ -2617,7 +2616,14 @@ void StickersListWidget::removeMegagroupSet(bool locally) { } void StickersListWidget::removeSet(uint64 setId) { - if (auto box = MakeConfirmRemoveSetBox(&session(), setId)) { + if (setId == Data::Stickers::MegagroupSetId) { + const auto &sets = shownSets(); + const auto i = ranges::find(sets, setId, &Set::id); + Assert(i != end(sets)); + const auto removeLocally = i->stickers.empty() + || !_megagroupSet->canEditStickers(); + removeMegagroupSet(removeLocally); + } else if (auto box = MakeConfirmRemoveSetBox(&session(), setId)) { checkHideWithBox(controller()->show( std::move(box), Ui::LayerOption::KeepOther)); @@ -2645,6 +2651,22 @@ StickersListWidget::~StickersListWidget() = default; object_ptr MakeConfirmRemoveSetBox( not_null session, uint64 setId) { + if (setId == Data::Stickers::PremiumSetId) { + return Ui::MakeConfirmBox({ + .text = tr::lng_stickers_remove_pack( + tr::now, + lt_sticker_pack, + tr::lng_premium_stickers(tr::now)), + .confirmed = [=](Fn &&close) { + close(); + session->settings().setSkipPremiumStickersSet(true); + session->saveSettingsDelayed(); + session->data().stickers().notifyUpdated( + Data::StickersType::Stickers); + }, + .confirmText = tr::lng_stickers_remove_pack_confirm(), + }); + } const auto &sets = session->data().stickers().sets(); const auto it = sets.find(setId); if (it == sets.cend()) { @@ -2716,9 +2738,6 @@ object_ptr MakeConfirmRemoveSetBox( session->data().stickers().notifyUpdated(set->type()); } }, - .cancelled = [=](Fn &&close) { - close(); - }, .confirmText = tr::lng_stickers_remove_pack_confirm(), }); } diff --git a/Telegram/SourceFiles/main/main_session_settings.cpp b/Telegram/SourceFiles/main/main_session_settings.cpp index 81daee077..47b036b9f 100644 --- a/Telegram/SourceFiles/main/main_session_settings.cpp +++ b/Telegram/SourceFiles/main/main_session_settings.cpp @@ -34,13 +34,17 @@ SessionSettings::SessionSettings() QByteArray SessionSettings::serialize() const { const auto autoDownload = _autoDownload.serialize(); - auto size = sizeof(qint32) * 38; - size += _groupStickersSectionHidden.size() * sizeof(quint64); - size += _mediaLastPlaybackPosition.size() * 2 * sizeof(quint64); - size += Serialize::bytearraySize(autoDownload); - size += sizeof(qint32) + auto size = sizeof(qint32) * 4 + + _groupStickersSectionHidden.size() * sizeof(quint64) + + sizeof(qint32) * 4 + + Serialize::bytearraySize(autoDownload) + + sizeof(qint32) * 5 + + _mediaLastPlaybackPosition.size() * 2 * sizeof(quint64) + + sizeof(qint32) * 5 + _hiddenPinnedMessages.size() * (sizeof(quint64) + sizeof(qint32)) - + (_mutePeriods.size() * sizeof(quint64)); + + sizeof(qint32) + + (_mutePeriods.size() * sizeof(quint64)) + + sizeof(qint32); auto result = QByteArray(); result.reserve(size); @@ -78,6 +82,7 @@ QByteArray SessionSettings::serialize() const { for (const auto &period : _mutePeriods) { stream << quint64(period); } + stream << qint32(_skipPremiumStickersSet ? 1 : 0); } return result; } @@ -139,6 +144,7 @@ void SessionSettings::addFromSerialized(const QByteArray &serialized) { qint32 supportAllSilent = _supportAllSilent ? 1 : 0; qint32 photoEditorHintShowsCount = _photoEditorHintShowsCount; std::vector mutePeriods; + qint32 skipPremiumStickersSet = _skipPremiumStickersSet ? 1 : 0; stream >> versionTag; if (versionTag == kVersionTag) { @@ -369,6 +375,9 @@ void SessionSettings::addFromSerialized(const QByteArray &serialized) { } } } + if (!stream.atEnd()) { + stream >> skipPremiumStickersSet; + } if (stream.status() != QDataStream::Ok) { LOG(("App Error: " "Bad data for SessionSettings::addFromSerialized()")); @@ -413,6 +422,7 @@ void SessionSettings::addFromSerialized(const QByteArray &serialized) { _supportAllSilent = (supportAllSilent == 1); _photoEditorHintShowsCount = std::move(photoEditorHintShowsCount); _mutePeriods = std::move(mutePeriods); + _skipPremiumStickersSet = (skipPremiumStickersSet == 1); if (version < 2) { app.setLastSeenWarningSeen(appLastSeenWarningSeen == 1); diff --git a/Telegram/SourceFiles/main/main_session_settings.h b/Telegram/SourceFiles/main/main_session_settings.h index d4e2c55b5..fb50ea0b3 100644 --- a/Telegram/SourceFiles/main/main_session_settings.h +++ b/Telegram/SourceFiles/main/main_session_settings.h @@ -126,6 +126,13 @@ public: [[nodiscard]] std::vector mutePeriods() const; void addMutePeriod(TimeId period); + [[nodiscard]] bool skipPremiumStickersSet() const { + return _skipPremiumStickersSet; + } + void setSkipPremiumStickersSet(bool value) { + _skipPremiumStickersSet = value; + } + private: static constexpr auto kDefaultSupportChatsLimitSlice = 7 * 24 * 60 * 60; static constexpr auto kPhotoEditorHintMaxShowsCount = 5; @@ -142,6 +149,7 @@ private: bool _dialogsFiltersEnabled = false; int _photoEditorHintShowsCount = 0; std::vector _mutePeriods; + bool _skipPremiumStickersSet = false; Support::SwitchSettings _supportSwitch; bool _supportFixChatsOrder = true;