Files
PiliPlus/lib/models/user/danmaku_rule.dart
bggRGjQaUbCoE 418a1e8d39 reformat
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
2025-07-23 16:47:11 +08:00

43 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));
}
}