Skip premium effect if stickers aren't playing.

This commit is contained in:
John Preston 2023-03-17 18:53:32 +04:00
parent d01c026521
commit b92e6e38f7
2 changed files with 26 additions and 12 deletions

View File

@ -85,11 +85,7 @@ Sticker::Sticker(
, _data(data)
, _replacements(replacements)
, _cachingTag(ChatHelpers::StickerLottieSize::MessageHistory)
, _oncePlayed(false)
, _premiumEffectPlayed(false)
, _nextLastDiceFrame(false)
, _skipPremiumEffect(skipPremiumEffect)
, _giftBoxSticker(false) {
, _skipPremiumEffect(skipPremiumEffect) {
if ((_dataMedia = _data->activeMediaView())) {
dataMediaCreated();
} else {
@ -103,7 +99,14 @@ Sticker::Sticker(
if (_player) {
if (hasPremiumEffect() && !_premiumEffectPlayed) {
_premiumEffectPlayed = true;
_parent->delegate()->elementStartPremium(_parent, replacing);
if (On(PowerSaving::kStickersChat)
&& !_premiumEffectSkipped) {
_premiumEffectSkipped = true;
} else {
_parent->delegate()->elementStartPremium(
_parent,
replacing);
}
}
playerCreated();
}
@ -237,6 +240,7 @@ DocumentData *Sticker::document() {
void Sticker::stickerClearLoopPlayed() {
_oncePlayed = false;
_premiumEffectPlayed = false;
_premiumEffectSkipped = false;
}
void Sticker::paintAnimationFrame(
@ -463,6 +467,10 @@ void Sticker::emojiStickerClicked() {
void Sticker::premiumStickerClicked() {
_premiumEffectPlayed = false;
// Remove when we start playing sticker itself on click.
_premiumEffectSkipped = false;
_parent->history()->owner().requestViewRepaint(_parent);
}
@ -528,7 +536,12 @@ void Sticker::setupPlayer() {
void Sticker::checkPremiumEffectStart() {
if (!_premiumEffectPlayed && hasPremiumEffect()) {
_premiumEffectPlayed = true;
_parent->delegate()->elementStartPremium(_parent, nullptr);
if (On(PowerSaving::kStickersChat)
&& !_premiumEffectSkipped) {
_premiumEffectSkipped = true;
} else {
_parent->delegate()->elementStartPremium(_parent, nullptr);
}
}
}

View File

@ -129,11 +129,12 @@ private:
mutable int _frameIndex = -1;
mutable int _framesCount = -1;
ChatHelpers::StickerLottieSize _cachingTag = {};
mutable bool _oncePlayed : 1;
mutable bool _premiumEffectPlayed : 1;
mutable bool _nextLastDiceFrame : 1;
bool _skipPremiumEffect : 1;
bool _giftBoxSticker : 1;
mutable bool _oncePlayed : 1 = false;
mutable bool _premiumEffectPlayed : 1 = false;
mutable bool _premiumEffectSkipped : 1 = false;
mutable bool _nextLastDiceFrame : 1 = false;
bool _skipPremiumEffect : 1 = false;
bool _giftBoxSticker : 1 = false;
};