diff --git a/lib/http/dynamics.dart b/lib/http/dynamics.dart index 406b364a5..b5eae64b3 100644 --- a/lib/http/dynamics.dart +++ b/lib/http/dynamics.dart @@ -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> followDynamic({ DynamicsTabType type = DynamicsTabType.all, String? offset, int? mid, + Set? tempBannedList, }) async { Map 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) { diff --git a/lib/http/member.dart b/lib/http/member.dart index f0031fca8..2bc671278 100644 --- a/lib/http/member.dart +++ b/lib/http/member.dart @@ -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: '风控校验失败,请检查登录状态', diff --git a/lib/models/dynamics/result.dart b/lib/models/dynamics/result.dart index d3e3ea66a..dcd3ceaa2 100644 --- a/lib/models/dynamics/result.dart +++ b/lib/models/dynamics/result.dart @@ -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 json) { + static RegExp banWordForDyn = + RegExp(GStorage.banWordForDyn, caseSensitive: false); + + DynamicsDataModel.fromJson( + Map json, { + DynamicsTabType type = DynamicsTabType.all, + Set? tempBannedList, + }) { hasMore = json['has_more']; - items = (json['items'] as List?) - ?.map((e) => DynamicItemModel.fromJson(e)) - .toList(); + + List? list = json['items'] as List?; + if (list != null && list.isNotEmpty) { + items = []; + 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']; } diff --git a/lib/pages/dynamics_tab/controller.dart b/lib/pages/dynamics_tab/controller.dart index bfb224e3f..37328d390 100644 --- a/lib/pages/dynamics_tab/controller.dart +++ b/lib/pages/dynamics_tab/controller.dart @@ -36,11 +36,6 @@ class DynamicsTabController @override List? 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 onRemove(int index, dynamic dynamicId) async { diff --git a/lib/pages/setting/widgets/model.dart b/lib/pages/setting/widgets/model.dart index a7cb2fd2a..98bdb6c53 100644 --- a/lib/pages/setting/widgets/model.dart +++ b/lib/pages/setting/widgets/model.dart @@ -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 get extraSettings => [ title: '动态关键词过滤', key: SettingBoxKey.banWordForDyn, callback: (value) { - DynamicsHttp.banWordForDyn = value; + DynamicsDataModel.banWordForDyn = value; }, ), SettingsModel(