Allow hiding Premium Stickers fake-sticker-set.

This commit is contained in:
John Preston 2022-08-04 17:29:49 +03:00
parent 4bdac53be2
commit 068d3caef5
3 changed files with 52 additions and 15 deletions

View file

@ -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<Ui::BoxContent> MakeConfirmRemoveSetBox(
not_null<Main::Session*> 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<void()> &&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<Ui::BoxContent> MakeConfirmRemoveSetBox(
session->data().stickers().notifyUpdated(set->type());
}
},
.cancelled = [=](Fn<void()> &&close) {
close();
},
.confirmText = tr::lng_stickers_remove_pack_confirm(),
});
}

View file

@ -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<TimeId> 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);

View file

@ -126,6 +126,13 @@ public:
[[nodiscard]] std::vector<TimeId> 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<TimeId> _mutePeriods;
bool _skipPremiumStickersSet = false;
Support::SwitchSettings _supportSwitch;
bool _supportFixChatsOrder = true;