refa dm block

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-06-10 16:18:51 +08:00
parent 206602e49a
commit bc2de4828b
6 changed files with 167 additions and 135 deletions

View File

@@ -1,17 +1,24 @@
import 'dart:convert';
import 'package:PiliPlus/http/danmaku_block.dart';
import 'package:PiliPlus/models/common/dm_block_type.dart';
import 'package:PiliPlus/models/user/danmaku_block.dart';
import 'package:crclib/catalog.dart';
import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart';
class DanmakuBlockController extends GetxController
with GetSingleTickerProviderStateMixin {
final ruleTypes = RxMap<int, Map<int, String>>({0: {}, 1: {}, 2: {}});
late final List<RxList<SimpleRule>> rules =
List.generate(DmBlockType.values.length, (_) => <SimpleRule>[].obs);
late TabController tabController;
@override
void onInit() {
super.onInit();
queryDanmakuFilter();
tabController = TabController(length: 3, vsync: this);
}
@@ -27,12 +34,9 @@ class DanmakuBlockController extends GetxController
SmartDialog.dismiss();
if (result['status']) {
DanmakuBlockDataModel data = result['data'];
if (data.rule?.isNotEmpty == true) {
for (var rule in data.rule!) {
ruleTypes[rule.type]![rule.id] = rule.filter;
}
ruleTypes.refresh();
}
rules[0].addAll(data.rule);
rules[1].addAll(data.rule1);
rules[2].addAll(data.rule2);
if (data.toast != null) {
SmartDialog.showToast(data.toast!);
}
@@ -41,29 +45,30 @@ class DanmakuBlockController extends GetxController
}
}
Future<void> danmakuFilterDel(int type, int id) async {
Future<void> danmakuFilterDel(int tabIndex, int itemIndex, int id) async {
SmartDialog.showLoading(msg: '正在删除弹幕屏蔽规则……');
var result = await DanmakuFilterHttp.danmakuFilterDel(ids: id);
SmartDialog.dismiss();
if (result['status']) {
ruleTypes
..[type]!.remove(id)
..refresh();
rules[tabIndex].removeAt(itemIndex);
SmartDialog.showToast('删除成功');
} else {
SmartDialog.showToast(result['msg']);
}
SmartDialog.showToast(result['msg']);
}
Future<void> danmakuFilterAdd(
{required String filter, required int type}) async {
if (type == 2) {
filter = Crc32Xz().convert(utf8.encode(filter)).toRadixString(16);
}
SmartDialog.showLoading(msg: '正在添加弹幕屏蔽规则……');
var result =
await DanmakuFilterHttp.danmakuFilterAdd(filter: filter, type: type);
SmartDialog.dismiss();
if (result['status']) {
SimpleRule rule = result['data'];
ruleTypes
..[type]![rule.id] = rule.filter
..refresh();
rules[type].add(rule);
SmartDialog.showToast('添加成功');
} else {
SmartDialog.showToast(result['msg']);