mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-21 17:46:24 +08:00
refa dm block
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
9
lib/models/common/dm_block_type.dart
Normal file
9
lib/models/common/dm_block_type.dart
Normal file
@@ -0,0 +1,9 @@
|
||||
enum DmBlockType {
|
||||
keyword('关键词'),
|
||||
regex('正则'),
|
||||
uid('用户'),
|
||||
;
|
||||
|
||||
final String label;
|
||||
const DmBlockType(this.label);
|
||||
}
|
||||
@@ -1,13 +1,28 @@
|
||||
class DanmakuBlockDataModel {
|
||||
List<SimpleRule>? rule;
|
||||
late List<SimpleRule> rule;
|
||||
late List<SimpleRule> rule1;
|
||||
late List<SimpleRule> rule2;
|
||||
String? toast;
|
||||
int? valid;
|
||||
int? ver;
|
||||
|
||||
DanmakuBlockDataModel({this.rule, this.toast, this.valid, this.ver});
|
||||
|
||||
DanmakuBlockDataModel.fromJson(Map<String, dynamic> json) {
|
||||
rule = (json['rule'] as List?)?.map((v) => SimpleRule.fromJson(v)).toList();
|
||||
rule = <SimpleRule>[];
|
||||
rule1 = <SimpleRule>[];
|
||||
rule2 = <SimpleRule>[];
|
||||
if ((json['rule'] as List?)?.isNotEmpty == true) {
|
||||
for (var e in json['rule']) {
|
||||
SimpleRule item = SimpleRule.fromJson(e);
|
||||
switch (item.type) {
|
||||
case 0:
|
||||
rule.add(item);
|
||||
case 1:
|
||||
rule1.add(item);
|
||||
case 2:
|
||||
rule2.add(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
toast = json['toast'] == '' ? null : json['toast'];
|
||||
valid = json['valid'];
|
||||
ver = json['ver'];
|
||||
@@ -17,8 +32,7 @@ class DanmakuBlockDataModel {
|
||||
class SimpleRule {
|
||||
late final int id;
|
||||
late final int type;
|
||||
late String filter;
|
||||
SimpleRule(this.id, this.type, this.filter);
|
||||
late final String filter;
|
||||
|
||||
SimpleRule.fromJson(Map<String, dynamic> json) {
|
||||
id = json['id'];
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
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'^/(.*)/$');
|
||||
@@ -14,23 +15,17 @@ class RuleFilter {
|
||||
count ?? dmFilterString.length + dmRegExp.length + dmUid.length;
|
||||
}
|
||||
|
||||
RuleFilter.fromRuleTypeEntires(
|
||||
Iterable<MapEntry<int, Map<int, String>>> rules) {
|
||||
for (var rule in rules) {
|
||||
switch (rule.key) {
|
||||
case 0:
|
||||
dmFilterString.addAll(rule.value.values);
|
||||
break;
|
||||
case 1:
|
||||
dmRegExp.addAll(rule.value.values.map((i) => RegExp(
|
||||
_regExp.matchAsPrefix(i)?.group(1) ?? i,
|
||||
caseSensitive: false)));
|
||||
break;
|
||||
case 2:
|
||||
dmUid.addAll(rule.value.values);
|
||||
break;
|
||||
}
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user