fix regex & use set in uid (#296)

* fix regex count & use set in uid

* fix regex
This commit is contained in:
My-Responsitories
2025-02-21 02:42:28 +00:00
committed by GitHub
parent 1cd8d4913d
commit cc1951c721
4 changed files with 35 additions and 47 deletions

View File

@@ -69,7 +69,7 @@ class PlDanmakuController {
queryDanmaku(segmentIndex);
}
if (plPlayerController.danmakuWeight == 0 &&
plPlayerController.danmakuFilterRule.isEmpty) {
plPlayerController.filterCount == 0) {
return dmSegMap[progress ~/ 100];
} else {
return dmSegMap[progress ~/ 100]
@@ -81,29 +81,8 @@ class PlDanmakuController {
}
bool filterDanmaku(DanmakuElem elem) {
if (plPlayerController.dmRegExp?.hasMatch(elem.content) == true) {
return false;
}
for (var filter in plPlayerController.danmakuFilterRule) {
switch (filter['type']) {
case 0:
if (elem.content.contains(filter['filter'])) {
return false;
}
break;
// case 1:
// if (RegExp(filter['filter'], caseSensitive: false)
// .hasMatch(elem.content)) {
// return false;
// }
// break;
case 2:
if (elem.idStr == filter['filter']) {
return false;
}
break;
}
}
return true;
return !(plPlayerController.dmUid.contains(elem.content) ||
plPlayerController.dmFilterString.any((i) => elem.content.contains(i)) ||
plPlayerController.dmRegExp.any((i) => i.hasMatch(elem.content)));
}
}

View File

@@ -52,17 +52,20 @@ class _DanmakuBlockPageState extends State<DanmakuBlockPage> {
return e.toMap();
}).toList();
// debugPrint("simpleRuleList:$simpleRuleList");
List regex = [];
plPlayerController.danmakuFilterRule = simpleRuleList.where((item) {
if (item['type'] != 1) {
return true;
} else {
regex.add(item['filter']);
return false;
plPlayerController.filterCount = simpleRuleList.length;
simpleRuleList.forEach((item) {
switch (item['type']) {
case 0:
plPlayerController.dmFilterString.add(item['filter']);
break;
case 1:
plPlayerController.dmRegExp.add(RegExp(item['filter'], caseSensitive: false));
break;
case 2:
plPlayerController.dmUid.add(item['filter']);
break;
}
}).toList();
plPlayerController.dmRegExp =
regex.isNotEmpty ? RegExp(regex.join('|'), caseSensitive: false) : null;
});
scrollController.dispose();
GStorage.localCache.put(LocalCacheKey.danmakuFilterRule, simpleRuleList);
super.dispose();

View File

@@ -1150,7 +1150,7 @@ class _HeaderControlState extends State<HeaderControl> {
arguments: widget.controller)
},
child: Text(
"屏蔽管理(${widget.controller.danmakuFilterRule.length + (widget.controller.dmRegExp?.pattern.split('|').length ?? 0)})")),
"屏蔽管理(${widget.controller.filterCount})")),
],
),
Padding(

View File

@@ -256,8 +256,10 @@ class PlPlayerController {
/// 弹幕权重
int danmakuWeight = 0;
List danmakuFilterRule = [];
RegExp? dmRegExp;
int filterCount = 0;
List dmFilterString = [];
List<RegExp> dmRegExp = [];
Set dmUid = {};
// 关联弹幕控制器
DanmakuController? danmakuController;
bool showDanmaku = true;
@@ -396,16 +398,20 @@ class PlPlayerController {
List regex = [];
List rules = GStorage.localCache
.get(LocalCacheKey.danmakuFilterRule, defaultValue: []);
danmakuFilterRule = rules.where((item) {
if (item['type'] != 1) {
return true;
} else {
regex.add(item['filter']);
return false;
filterCount = rules.length;
rules.forEach((item) {
switch (item['type']) {
case 0:
dmFilterString.add(item['filter']);
break;
case 1:
dmRegExp.add(RegExp(item['filter'], caseSensitive: false));
break;
case 2:
dmUid.add(item['filter']);
break;
}
}).toList();
dmRegExp =
regex.isNotEmpty ? RegExp(regex.join('|'), caseSensitive: false) : null;
});
blockTypes = setting.get(SettingBoxKey.danmakuBlockType, defaultValue: []);
showArea = setting.get(SettingBoxKey.danmakuShowArea, defaultValue: 0.5);
// 不透明度