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 dmFilterString = []; List dmRegExp = []; Set 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> 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)); } }