diff --git a/lib/http/danmaku.dart b/lib/http/danmaku.dart index 97de6c0a0..74143ab23 100644 --- a/lib/http/danmaku.dart +++ b/lib/http/danmaku.dart @@ -1,6 +1,5 @@ import 'package:PiliPlus/grpc/dm/v1/dm.pb.dart'; import 'package:PiliPlus/grpc/grpc_repo.dart'; -import 'package:PiliPlus/utils/extension.dart'; import 'package:dio/dio.dart'; import 'index.dart'; @@ -18,8 +17,20 @@ class DanmakuHttp { return DmSegMobileReply(); } DmSegMobileReply data = response['data']; - if (mergeDanmaku) { - data.elems.unique((item) => item.content); + if (mergeDanmaku && data.elems.isNotEmpty) { + final Map counts = {}; + data.elems.retainWhere((item) { + int? count = counts[item.content]; + counts[item.content] = count != null ? count + 1 : 1; + return count == null; + }); + for (DanmakuElem item in data.elems) { + item.clearAttr(); + final count = counts[item.content]; + if (count != 1) { + item.attr = count; + } + } } return data; } diff --git a/lib/pages/danmaku/view.dart b/lib/pages/danmaku/view.dart index fcbfc3a16..d19e31684 100644 --- a/lib/pages/danmaku/view.dart +++ b/lib/pages/danmaku/view.dart @@ -117,6 +117,9 @@ class _PlDanmakuState extends State { e.colorful == DmColorfulType.VipGradualColor ? true : null, + count: widget.playerController.mergeDanmaku && e.hasAttr() + ? e.attr + : null, ), ); } diff --git a/pubspec.lock b/pubspec.lock index c0313a94b..187dc7674 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -252,7 +252,7 @@ packages: description: path: "." ref: main - resolved-ref: ecf4a8457ec9d128095240d96dbfa5cc53b6cf6b + resolved-ref: "77c76f6595c6862cc623b036718173619c02af75" url: "https://github.com/bggRGjQaUbCoE/canvas_danmaku.git" source: git version: "0.2.6"