opt filter dyn

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-06-20 23:23:45 +08:00
parent 345402d2fe
commit 5f3f158932
5 changed files with 57 additions and 46 deletions

View File

@@ -22,13 +22,11 @@ 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,
int? mid,
Set<int>? tempBannedList,
}) async {
Map<String, dynamic> data = {
if (type == DynamicsTabType.up)
@@ -43,30 +41,10 @@ class DynamicsHttp {
var res = await Request().get(Api.followDynamic, queryParameters: data);
if (res.data['code'] == 0) {
try {
DynamicsDataModel data = DynamicsDataModel.fromJson(res.data['data']);
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)),
DynamicsDataModel data = DynamicsDataModel.fromJson(
res.data['data'],
type: type,
tempBannedList: tempBannedList,
);
return Success(data);
} catch (err) {

View File

@@ -361,15 +361,12 @@ class MemberHttp {
});
var res = await Request().get(Api.memberDynamic, queryParameters: params);
if (res.data['code'] == 0) {
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');
try {
DynamicsDataModel data = DynamicsDataModel.fromJson(res.data['data']);
return Success(data);
} catch (err) {
return Error(err.toString());
}
return Success(data);
} else {
Map errMap = const {
-352: '风控校验失败,请检查登录状态',

View File

@@ -1,9 +1,11 @@
import 'dart:convert';
import 'package:PiliPlus/common/widgets/pendant_avatar.dart';
import 'package:PiliPlus/models/common/dynamic/dynamics_type.dart';
import 'package:PiliPlus/models/dynamics/article_content_model.dart';
import 'package:PiliPlus/models/model_avatar.dart';
import 'package:PiliPlus/models_new/live/live_feed_index/watched_show.dart';
import 'package:PiliPlus/utils/storage.dart';
class DynamicsDataModel {
bool? hasMore;
@@ -11,11 +13,49 @@ class DynamicsDataModel {
String? offset;
int? total;
DynamicsDataModel.fromJson(Map<String, dynamic> json) {
static RegExp banWordForDyn =
RegExp(GStorage.banWordForDyn, caseSensitive: false);
DynamicsDataModel.fromJson(
Map<String, dynamic> json, {
DynamicsTabType type = DynamicsTabType.all,
Set<int>? tempBannedList,
}) {
hasMore = json['has_more'];
items = (json['items'] as List?)
?.map<DynamicItemModel>((e) => DynamicItemModel.fromJson(e))
.toList();
List? list = json['items'] as List?;
if (list != null && list.isNotEmpty) {
items = <DynamicItemModel>[];
late final antiGoodsDyn = GStorage.antiGoodsDyn;
late final filterWord = banWordForDyn.pattern.isNotEmpty;
late final filterBan =
type != DynamicsTabType.up && tempBannedList?.isNotEmpty == true;
for (var e in list) {
DynamicItemModel item = DynamicItemModel.fromJson(e);
if (antiGoodsDyn &&
(item.orig?.modules.moduleDynamic?.additional?.type ==
'ADDITIONAL_TYPE_GOODS' ||
item.modules.moduleDynamic?.additional?.type ==
'ADDITIONAL_TYPE_GOODS')) {
continue;
}
if (filterWord &&
banWordForDyn.hasMatch(
item.orig?.modules.moduleDynamic?.major?.opus?.summary?.text ??
item.modules.moduleDynamic?.major?.opus?.summary?.text ??
item.orig?.modules.moduleDynamic?.desc?.text ??
item.modules.moduleDynamic?.desc?.text ??
'')) {
continue;
}
if (filterBan &&
tempBannedList!.contains(item.modules.moduleAuthor?.mid)) {
continue;
}
items!.add(item);
}
}
offset = json['offset'];
total = json['total'];
}

View File

@@ -36,11 +36,6 @@ class DynamicsTabController
@override
List<DynamicItemModel>? getDataList(DynamicsDataModel response) {
if (dynamicsType != DynamicsTabType.up &&
dynamicsController.tempBannedList.isNotEmpty) {
response.items?.removeWhere((e) => dynamicsController.tempBannedList
.contains(e.modules.moduleAuthor?.mid));
}
offset = response.offset ?? '';
return response.items;
}
@@ -51,6 +46,7 @@ class DynamicsTabController
type: dynamicsType,
offset: offset,
mid: mid,
tempBannedList: dynamicsController.tempBannedList,
);
Future<void> onRemove(int index, dynamic dynamicId) async {

View File

@@ -5,7 +5,6 @@ import 'package:PiliPlus/common/widgets/custom_icon.dart';
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';
@@ -28,6 +27,7 @@ import 'package:PiliPlus/models/common/video/live_quality.dart';
import 'package:PiliPlus/models/common/video/subtitle_pref_type.dart';
import 'package:PiliPlus/models/common/video/video_decode_type.dart';
import 'package:PiliPlus/models/common/video/video_quality.dart';
import 'package:PiliPlus/models/dynamics/result.dart';
import 'package:PiliPlus/pages/home/controller.dart';
import 'package:PiliPlus/pages/hot/controller.dart';
import 'package:PiliPlus/pages/main/controller.dart';
@@ -1815,7 +1815,7 @@ List<SettingsModel> get extraSettings => [
title: '动态关键词过滤',
key: SettingBoxKey.banWordForDyn,
callback: (value) {
DynamicsHttp.banWordForDyn = value;
DynamicsDataModel.banWordForDyn = value;
},
),
SettingsModel(