opt dm filter

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-06-11 17:09:23 +08:00
parent 4a4cd3017f
commit 4f3f01d80a
2 changed files with 14 additions and 15 deletions

View File

@@ -31,9 +31,9 @@ class RuleFilter {
RuleFilter.empty(); RuleFilter.empty();
bool retain(DanmakuElem elem) { bool remove(DanmakuElem elem) {
return !(dmUid.contains(elem.midHash) || return dmUid.contains(elem.midHash) ||
dmFilterString.any((i) => elem.content.contains(i)) || dmFilterString.any((i) => elem.content.contains(i)) ||
dmRegExp.any((i) => i.hasMatch(elem.content))); dmRegExp.any((i) => i.hasMatch(elem.content));
} }
} }

View File

@@ -55,16 +55,23 @@ class PlDanmakuController {
}); });
} }
final shouldFilter = plPlayerController.filters.count != 0;
for (final element in data.elems) { for (final element in data.elems) {
if (accountService.isLogin.value) {
element.isSelf = element.midHash == plPlayerController.midHash;
}
if (!element.isSelf) {
if (element.weight < plPlayerController.danmakuWeight ||
(shouldFilter && plPlayerController.filters.remove(element))) {
continue;
}
}
if (mergeDanmaku) { if (mergeDanmaku) {
final count = counts[element.content]; final count = counts[element.content];
if (count != 1) { if (count != 1) {
element.count = count!; element.count = count!;
} }
} }
if (accountService.isLogin.value) {
element.isSelf = element.midHash == plPlayerController.midHash;
}
int pos = element.progress ~/ 100; //每0.1秒存储一次 int pos = element.progress ~/ 100; //每0.1秒存储一次
(dmSegMap[pos] ??= []).add(element); (dmSegMap[pos] ??= []).add(element);
} }
@@ -80,14 +87,6 @@ class PlDanmakuController {
queryDanmaku(segmentIndex); queryDanmaku(segmentIndex);
return null; return null;
} }
if (plPlayerController.danmakuWeight == 0 && return dmSegMap[progress ~/ 100];
plPlayerController.filters.count == 0) {
return dmSegMap[progress ~/ 100];
} else {
return dmSegMap[progress ~/ 100]
?..retainWhere((element) =>
element.weight >= plPlayerController.danmakuWeight &&
plPlayerController.filters.retain(element));
}
} }
} }