mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-17 23:56:13 +08:00
40 lines
1.1 KiB
Dart
40 lines
1.1 KiB
Dart
import 'package:PiliPlus/grpc/bilibili/community/service/dm/v1.pb.dart';
|
|
import 'package:PiliPlus/models/user/danmaku_block.dart';
|
|
|
|
class RuleFilter {
|
|
static final _regExp = RegExp(r'^/(.*)/$');
|
|
|
|
List<String> dmFilterString = [];
|
|
List<RegExp> dmRegExp = [];
|
|
Set<String> dmUid = {};
|
|
|
|
int count = 0;
|
|
|
|
RuleFilter(this.dmFilterString, this.dmRegExp, this.dmUid, [int? count]) {
|
|
this.count =
|
|
count ?? dmFilterString.length + dmRegExp.length + dmUid.length;
|
|
}
|
|
|
|
RuleFilter.fromRuleTypeEntires(List<List<SimpleRule>> rules) {
|
|
dmFilterString = rules[0].map((e) => e.filter).toList();
|
|
|
|
dmRegExp = rules[1]
|
|
.map((e) => RegExp(
|
|
_regExp.matchAsPrefix(e.filter)?.group(1) ?? e.filter,
|
|
caseSensitive: false))
|
|
.toList();
|
|
|
|
dmUid = rules[2].map((e) => e.filter).toSet();
|
|
|
|
count = dmFilterString.length + dmRegExp.length + dmUid.length;
|
|
}
|
|
|
|
RuleFilter.empty();
|
|
|
|
bool remove(DanmakuElem elem) {
|
|
return dmUid.contains(elem.midHash) ||
|
|
dmFilterString.any((i) => elem.content.contains(i)) ||
|
|
dmRegExp.any((i) => i.hasMatch(elem.content));
|
|
}
|
|
}
|