feat: filter dyn (#860)

This commit is contained in:
My-Responsitories
2025-05-19 09:31:41 +08:00
committed by GitHub
parent d7dec1bc4d
commit a360212dc7
4 changed files with 41 additions and 10 deletions

View File

@@ -16,6 +16,9 @@ import 'package:PiliPlus/utils/wbi_sign.dart';
import 'package:dio/dio.dart';
class DynamicsHttp {
static RegExp banWordForDyn =
RegExp(GStorage.banWordForDyn, caseSensitive: false);
static Future<LoadingState<DynamicsDataModel>> followDynamic({
DynamicsTabType type = DynamicsTabType.all,
String? offset,
@@ -35,15 +38,30 @@ class DynamicsHttp {
if (res.data['code'] == 0) {
try {
DynamicsDataModel data = DynamicsDataModel.fromJson(res.data['data']);
if (GStorage.antiGoodsDyn) {
data.items?.removeWhere(
(item) =>
item.orig?.modules.moduleDynamic?.additional?.type ==
'ADDITIONAL_TYPE_GOODS' ||
item.modules.moduleDynamic?.additional?.type ==
'ADDITIONAL_TYPE_GOODS',
);
}
final antiGoodsDyn = GStorage.antiGoodsDyn;
final filterWord = banWordForDyn.pattern.isNotEmpty;
data.items?.removeWhere(
(item) =>
(antiGoodsDyn &&
(item.orig?.modules.moduleDynamic?.additional?.type ==
'ADDITIONAL_TYPE_GOODS' ||
item.modules.moduleDynamic?.additional?.type ==
'ADDITIONAL_TYPE_GOODS')) ||
(filterWord &&
(item.orig?.modules.moduleDynamic?.major?.opus?.summary?.text
?.contains(banWordForDyn) ==
true ||
item.modules.moduleDynamic?.major?.opus?.summary?.text
?.contains(banWordForDyn) ==
true ||
item.orig?.modules.moduleDynamic?.desc?.text
?.contains(banWordForDyn) ==
true ||
item.modules.moduleDynamic?.desc?.text
?.contains(banWordForDyn) ==
true)),
);
return Success(data);
} catch (err) {
return Error(err.toString());

View File

@@ -59,7 +59,7 @@ class _UpPanelState extends State<UpPanel> {
children: [
TextSpan(
text:
'Live(${widget.dynamicsController.upData.value.liveUsers?.count})',
'Live(${widget.dynamicsController.upData.value.liveUsers?.count ?? "0"})',
),
if (!isTop) ...[
const TextSpan(text: '\n'),

View File

@@ -4,6 +4,7 @@ import 'dart:math';
import 'package:PiliPlus/common/widgets/pendant_avatar.dart';
import 'package:PiliPlus/common/widgets/refresh_indicator.dart'
show kDragContainerExtentPercentage, displacement;
import 'package:PiliPlus/http/dynamics.dart';
import 'package:PiliPlus/http/reply.dart';
import 'package:PiliPlus/http/video.dart';
import 'package:PiliPlus/main.dart';
@@ -1800,6 +1801,14 @@ List<SettingsModel> get extraSettings => [
ReplyHttp.replyRegExp = value;
},
),
_getBanwordModel(
context: Get.context!,
title: '动态关键词过滤',
key: SettingBoxKey.banWordForDyn,
callback: (value) {
DynamicsHttp.banWordForDyn = value;
},
),
SettingsModel(
settingsType: SettingsType.sw1tch,
title: '使用外部浏览器打开链接',

View File

@@ -493,6 +493,9 @@ class GStorage {
return isTablet;
}
static String get banWordForDyn =>
GStorage.setting.get(SettingBoxKey.banWordForDyn, defaultValue: '');
static List<double> get dynamicDetailRatio => List<double>.from(setting
.get(SettingBoxKey.dynamicDetailRatio, defaultValue: const [60.0, 40.0]));
@@ -789,6 +792,7 @@ class SettingBoxKey {
showPgcTimeline = 'showPgcTimeline',
pageTransition = 'pageTransition',
optTabletNav = 'optTabletNav',
banWordForDyn = 'banWordForDyn',
// WebDAV
webdavUri = 'webdavUri',