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

View File

@@ -59,7 +59,7 @@ class _UpPanelState extends State<UpPanel> {
children: [ children: [
TextSpan( TextSpan(
text: text:
'Live(${widget.dynamicsController.upData.value.liveUsers?.count})', 'Live(${widget.dynamicsController.upData.value.liveUsers?.count ?? "0"})',
), ),
if (!isTop) ...[ if (!isTop) ...[
const TextSpan(text: '\n'), 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/pendant_avatar.dart';
import 'package:PiliPlus/common/widgets/refresh_indicator.dart' import 'package:PiliPlus/common/widgets/refresh_indicator.dart'
show kDragContainerExtentPercentage, displacement; show kDragContainerExtentPercentage, displacement;
import 'package:PiliPlus/http/dynamics.dart';
import 'package:PiliPlus/http/reply.dart'; import 'package:PiliPlus/http/reply.dart';
import 'package:PiliPlus/http/video.dart'; import 'package:PiliPlus/http/video.dart';
import 'package:PiliPlus/main.dart'; import 'package:PiliPlus/main.dart';
@@ -1800,6 +1801,14 @@ List<SettingsModel> get extraSettings => [
ReplyHttp.replyRegExp = value; ReplyHttp.replyRegExp = value;
}, },
), ),
_getBanwordModel(
context: Get.context!,
title: '动态关键词过滤',
key: SettingBoxKey.banWordForDyn,
callback: (value) {
DynamicsHttp.banWordForDyn = value;
},
),
SettingsModel( SettingsModel(
settingsType: SettingsType.sw1tch, settingsType: SettingsType.sw1tch,
title: '使用外部浏览器打开链接', title: '使用外部浏览器打开链接',

View File

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