mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
fix regex & use set in uid (#296)
* fix regex count & use set in uid * fix regex
This commit is contained in:
committed by
GitHub
parent
1cd8d4913d
commit
cc1951c721
@@ -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)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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);
|
||||
// 不透明度
|
||||
|
||||
Reference in New Issue
Block a user