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 { late final List> rules = List.generate( DmBlockType.values.length, (_) => [].obs, ); late TabController tabController; @override void onInit() { super.onInit(); queryDanmakuFilter(); tabController = TabController(length: 3, vsync: this); } @override void onClose() { tabController.dispose(); super.onClose(); } Future queryDanmakuFilter() async { SmartDialog.showLoading(msg: '正在同步弹幕屏蔽规则……'); final result = await DanmakuFilterHttp.danmakuFilter(); SmartDialog.dismiss(); if (result.isSuccess) { final data = result.data; rules[0].addAll(data.rule); rules[1].addAll(data.rule1); rules[2].addAll(data.rule2); if (data.toast != null) { SmartDialog.showToast(data.toast!); } } else { result.toast(); } } Future danmakuFilterDel(int tabIndex, int itemIndex, int id) async { SmartDialog.showLoading(msg: '正在删除弹幕屏蔽规则……'); final result = await DanmakuFilterHttp.danmakuFilterDel(ids: id); SmartDialog.dismiss(); if (result.isSuccess) { rules[tabIndex].removeAt(itemIndex); SmartDialog.showToast('删除成功'); } else { result.toast(); } } Future danmakuFilterAdd({ required String filter, required int type, }) async { if (type == 2) { filter = Crc32Xz().convert(utf8.encode(filter)).toRadixString(16); } SmartDialog.showLoading(msg: '正在添加弹幕屏蔽规则……'); final result = await DanmakuFilterHttp.danmakuFilterAdd( filter: filter, type: type, ); SmartDialog.dismiss(); if (result.isSuccess) { rules[type].add(result.data); SmartDialog.showToast('添加成功'); } else { result.toast(); } } }