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); queryDanmaku(segmentIndex);
} }
if (plPlayerController.danmakuWeight == 0 && if (plPlayerController.danmakuWeight == 0 &&
plPlayerController.danmakuFilterRule.isEmpty) { plPlayerController.filterCount == 0) {
return dmSegMap[progress ~/ 100]; return dmSegMap[progress ~/ 100];
} else { } else {
return dmSegMap[progress ~/ 100] return dmSegMap[progress ~/ 100]
@@ -81,29 +81,8 @@ class PlDanmakuController {
} }
bool filterDanmaku(DanmakuElem elem) { bool filterDanmaku(DanmakuElem elem) {
if (plPlayerController.dmRegExp?.hasMatch(elem.content) == true) { return !(plPlayerController.dmUid.contains(elem.content) ||
return false; plPlayerController.dmFilterString.any((i) => elem.content.contains(i)) ||
} plPlayerController.dmRegExp.any((i) => i.hasMatch(elem.content)));
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;
} }
} }

View File

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

View File

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

View File

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