From 7d1b3935110cc3f9dc5b185f0b7a027c9ff0b161 Mon Sep 17 00:00:00 2001 From: dom Date: Sun, 26 Apr 2026 14:11:37 +0800 Subject: [PATCH] drop gif emote, static thumbnail gif Signed-off-by: dom --- assets/images/live/live.gif | Bin 6339 -> 0 bytes assets/images/live/live.png | Bin 0 -> 2752 bytes lib/common/assets.dart | 4 ++-- lib/common/widgets/image/network_img_layer.dart | 10 +++++++++- .../widgets/image_grid/image_grid_view.dart | 12 ++++++++++-- .../widgets/image_viewer/gallery_viewer.dart | 7 +++++-- lib/models/dynamics/result.dart | 5 +++-- lib/pages/article/view.dart | 2 +- lib/pages/article/widgets/article_ops.dart | 5 ++++- lib/pages/article/widgets/html_render.dart | 2 +- lib/pages/article/widgets/opus_content.dart | 2 +- lib/pages/audio/view.dart | 4 ++-- lib/pages/member/widget/medal_wall.dart | 2 +- .../video/reply/widgets/reply_item_grpc.dart | 12 +++++++----- lib/pages/whisper_detail/widget/chat_item.dart | 4 +++- lib/utils/image_utils.dart | 16 ++++++++++++---- 16 files changed, 61 insertions(+), 26 deletions(-) delete mode 100644 assets/images/live/live.gif create mode 100644 assets/images/live/live.png diff --git a/assets/images/live/live.gif b/assets/images/live/live.gif deleted file mode 100644 index f87db96b7552711c5dca05a15aea1eb622a8fe28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6339 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 diff --git a/assets/images/live/live.png b/assets/images/live/live.png new file mode 100644 index 0000000000000000000000000000000000000000..8ddf9161c188331387c7498f3c2e4b028998afc6 GIT binary patch literal 2752 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 XEXm&Vn@&WuG6np7g1oCeqb~dp%00?D literal 0 HcmV?d00001 diff --git a/lib/common/assets.dart b/lib/common/assets.dart index 97996d364..134ac795f 100644 --- a/lib/common/assets.dart +++ b/lib/common/assets.dart @@ -15,9 +15,9 @@ abstract final class Assets { static const trendingBanner = 'assets/images/trending_banner.png'; static const ai = 'assets/images/ai.png'; - static const livingChart = 'assets/images/live.gif'; + // static const livingChart = 'assets/images/live.gif'; static const livingStatic = 'assets/images/live.png'; - static const livingRect = 'assets/images/live/live.gif'; + static const livingRect = 'assets/images/live/live.png'; static const livingBackground = 'assets/images/live/default_bg.webp'; static const thunder1 = 'assets/images/paycoins/ic_thunder_1.png'; diff --git a/lib/common/widgets/image/network_img_layer.dart b/lib/common/widgets/image/network_img_layer.dart index c6f327191..99ccf3144 100644 --- a/lib/common/widgets/image/network_img_layer.dart +++ b/lib/common/widgets/image/network_img_layer.dart @@ -71,7 +71,15 @@ class NetworkImgLayer extends StatelessWidget { memCacheHeight = height.cacheSize(context); } return CachedNetworkImage( - imageUrl: ImageUtils.thumbnailUrl(src, quality), + imageUrl: ImageUtils.thumbnailUrl( + src, + maxQuality: quality, + + /// remove gif + suffix: src!.endsWith(ImageUtils.kSuffixGIF) + ? ImageUtils.kSuffixJPG + : ImageUtils.kSuffixWEBP, + ), width: width, height: height, memCacheWidth: memCacheWidth, diff --git a/lib/common/widgets/image_grid/image_grid_view.dart b/lib/common/widgets/image_grid/image_grid_view.dart index b2fbfc84d..91db5437e 100644 --- a/lib/common/widgets/image_grid/image_grid_view.dart +++ b/lib/common/widgets/image_grid/image_grid_view.dart @@ -22,7 +22,6 @@ import 'package:PiliPlus/common/style.dart'; import 'package:PiliPlus/common/widgets/badge.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/common/widgets/image_grid/image_grid_builder.dart'; -import 'package:PiliPlus/models/common/badge_type.dart'; import 'package:PiliPlus/models/common/image_preview_type.dart'; import 'package:PiliPlus/utils/extension/context_ext.dart'; import 'package:PiliPlus/utils/extension/num_ext.dart'; @@ -59,6 +58,8 @@ class ImageModel { bool get isLivePhoto => _isLivePhoto ??= enableLivePhoto && liveUrl?.isNotEmpty == true; + bool get isGif => url.endsWith(ImageUtils.kSuffixGIF); + static bool enableLivePhoto = Pref.enableLivePhoto; } @@ -245,13 +246,20 @@ class ImageGridView extends StatelessWidget { text: 'Live', right: 8, bottom: 8, - type: PBadgeType.gray, + type: .gray, ) else if (item.isLongPic) const PBadge( text: '长图', right: 8, bottom: 8, + ) + else if (item.isGif) + const PBadge( + text: 'GIF', + right: 8, + bottom: 8, + type: .gray, ), ], ); diff --git a/lib/common/widgets/image_viewer/gallery_viewer.dart b/lib/common/widgets/image_viewer/gallery_viewer.dart index be8479eda..baa582e1b 100644 --- a/lib/common/widgets/image_viewer/gallery_viewer.dart +++ b/lib/common/widgets/image_viewer/gallery_viewer.dart @@ -98,7 +98,7 @@ class _GalleryViewerState extends State String _getActualUrl(String url) { return _quality != 100 - ? ImageUtils.thumbnailUrl(url, _quality) + ? ImageUtils.thumbnailUrl(url, maxQuality: _quality) : url.http2https; } @@ -413,7 +413,10 @@ class _GalleryViewerState extends State _containerSize.width.cacheSize(context), null, CachedNetworkImageProvider( - ImageUtils.thumbnailUrl(item.url, widget.quality), + ImageUtils.thumbnailUrl( + item.url, + maxQuality: widget.quality, + ), ), ), minScale: widget.minScale, diff --git a/lib/models/dynamics/result.dart b/lib/models/dynamics/result.dart index 4aff0b96d..386cb0172 100644 --- a/lib/models/dynamics/result.dart +++ b/lib/models/dynamics/result.dart @@ -1173,10 +1173,11 @@ class Emoji { String? url; late num size; + /// remove gif Emoji.fromJson(Map json) { url = - noneNullOrEmptyString(json['webp_url']) ?? - noneNullOrEmptyString(json['gif_url']) ?? + // noneNullOrEmptyString(json['webp_url']) ?? + // noneNullOrEmptyString(json['gif_url']) ?? noneNullOrEmptyString(json['icon_url']); size = json['size'] ?? 1; } diff --git a/lib/pages/article/view.dart b/lib/pages/article/view.dart index 5d92d25f1..93c2023b3 100644 --- a/lib/pages/article/view.dart +++ b/lib/pages/article/view.dart @@ -298,7 +298,7 @@ class _ArticlePageState extends CommonDynPageState { : null, imageUrl: ImageUtils.thumbnailUrl( pic.url, - 60, + maxQuality: 60, ), fadeInDuration: const Duration( milliseconds: 120, diff --git a/lib/pages/article/widgets/article_ops.dart b/lib/pages/article/widgets/article_ops.dart index 368a42473..2a9309bb6 100644 --- a/lib/pages/article/widgets/article_ops.dart +++ b/lib/pages/article/widgets/article_ops.dart @@ -73,7 +73,10 @@ class ArticleOpus extends StatelessWidget { width: width, height: height, memCacheWidth: width.cacheSize(context), - imageUrl: ImageUtils.thumbnailUrl(card.url, 60), + imageUrl: ImageUtils.thumbnailUrl( + card.url, + maxQuality: 60, + ), placeholder: (_, _) => const SizedBox.shrink(), ), ), diff --git a/lib/pages/article/widgets/html_render.dart b/lib/pages/article/widgets/html_render.dart index caf10a468..54a72554d 100644 --- a/lib/pages/article/widgets/html_render.dart +++ b/lib/pages/article/widgets/html_render.dart @@ -62,7 +62,7 @@ Widget htmlRender({ width: width, height: isEmote ? 22.0 : null, memCacheWidth: width.cacheSize(context), - imageUrl: ImageUtils.thumbnailUrl(imgUrl, 60), + imageUrl: ImageUtils.thumbnailUrl(imgUrl, maxQuality: 60), fadeInDuration: const Duration(milliseconds: 120), fadeOutDuration: const Duration(milliseconds: 120), placeholder: (context, url) => Image.asset(Assets.loading), diff --git a/lib/pages/article/widgets/opus_content.dart b/lib/pages/article/widgets/opus_content.dart index 2cfe06f34..80e4b813d 100644 --- a/lib/pages/article/widgets/opus_content.dart +++ b/lib/pages/article/widgets/opus_content.dart @@ -229,7 +229,7 @@ class OpusContent extends StatelessWidget { width: width, height: height, memCacheWidth: width.cacheSize(context), - imageUrl: ImageUtils.thumbnailUrl(pic.url!, 60), + imageUrl: ImageUtils.thumbnailUrl(pic.url!, maxQuality: 60), fadeInDuration: const Duration(milliseconds: 120), fadeOutDuration: const Duration(milliseconds: 120), placeholder: (_, _) => Image.asset(Assets.loading), diff --git a/lib/pages/audio/view.dart b/lib/pages/audio/view.dart index de5ffc288..d7e01af14 100644 --- a/lib/pages/audio/view.dart +++ b/lib/pages/audio/view.dart @@ -293,7 +293,7 @@ class _AudioPageState extends State { WidgetSpan( alignment: .bottom, child: Image.asset( - Assets.livingChart, + Assets.livingStatic, width: 16, height: 16, cacheWidth: 16.cacheSize( @@ -337,7 +337,7 @@ class _AudioPageState extends State { WidgetSpan( alignment: .bottom, child: Image.asset( - Assets.livingChart, + Assets.livingStatic, width: 16, height: 16, cacheWidth: 16.cacheSize( diff --git a/lib/pages/member/widget/medal_wall.dart b/lib/pages/member/widget/medal_wall.dart index 3a0fcfafc..632ca6d7d 100644 --- a/lib/pages/member/widget/medal_wall.dart +++ b/lib/pages/member/widget/medal_wall.dart @@ -107,7 +107,7 @@ class MedalWall extends StatelessWidget { Padding( padding: const .only(left: 4), child: Image.asset( - Assets.livingChart, + Assets.livingStatic, height: 16, cacheHeight: 16.cacheSize(context), color: colorScheme.primary, diff --git a/lib/pages/video/reply/widgets/reply_item_grpc.dart b/lib/pages/video/reply/widgets/reply_item_grpc.dart index 9f17ab1d7..cacab6a3a 100644 --- a/lib/pages/video/reply/widgets/reply_item_grpc.dart +++ b/lib/pages/video/reply/widgets/reply_item_grpc.dart @@ -794,11 +794,13 @@ class ReplyItemGrpc extends StatelessWidget { spanChildren.add( WidgetSpan( child: NetworkImgLayer( - src: emote.hasWebpUrl() - ? emote.webpUrl - : emote.hasGifUrl() - ? emote.gifUrl - : emote.url, + /// remove gif + src: emote.url, + // src: emote.hasWebpUrl() + // ? emote.webpUrl + // : emote.hasGifUrl() + // ? emote.gifUrl + // : emote.url, type: ImageType.emote, width: size, height: size, diff --git a/lib/pages/whisper_detail/widget/chat_item.dart b/lib/pages/whisper_detail/widget/chat_item.dart index d87b0922c..0133b4311 100644 --- a/lib/pages/whisper_detail/widget/chat_item.dart +++ b/lib/pages/whisper_detail/widget/chat_item.dart @@ -671,7 +671,9 @@ class ChatItem extends StatelessWidget { if (eInfos != null) { for (final e in eInfos!) { emojiMap[e.text] ??= { - 'url': e.hasGifUrl() ? e.gifUrl : e.url, + /// remove gif + 'url': e.url, + // 'url': e.hasGifUrl() ? e.gifUrl : e.url, 'size': e.size * 22.0, }; } diff --git a/lib/utils/image_utils.dart b/lib/utils/image_utils.dart index 68641dc0c..9d59b21af 100644 --- a/lib/utils/image_utils.dart +++ b/lib/utils/image_utils.dart @@ -266,7 +266,16 @@ abstract final class ImageUtils { r'(@(\d+[a-z]_?)*)(\..*)?$', caseSensitive: false, ); - static String thumbnailUrl(String? src, [int maxQuality = 1]) { + + static const kSuffixJPG = '.jpg'; + static const kSuffixGIF = '.gif'; + static const kSuffixWEBP = '.webp'; + + static String thumbnailUrl( + String? src, { + int maxQuality = 1, + String suffix = kSuffixWEBP, + }) { if (src != null && maxQuality != 100) { maxQuality = math.max(maxQuality, GlobalData().imgQuality); bool hasMatch = false; @@ -274,15 +283,14 @@ abstract final class ImageUtils { _thumbRegex, onMatch: (match) { hasMatch = true; - String suffix = match.group(3) ?? '.webp'; - return '${match.group(1)}_${maxQuality}q$suffix'; + return '${match.group(1)}_${maxQuality}q${match.group(3) ?? suffix}'; }, onNonMatch: (String str) { return str; }, ); if (!hasMatch) { - src += '@${maxQuality}q.webp'; + src += '@${maxQuality}q$suffix'; } } return src.http2https;