From 6bc33795a3ee4ff1426606651762bdc2b2a162cc Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Tue, 18 Feb 2025 21:46:01 +0800 Subject: [PATCH] feat: create dyn antifraud Closes #278 Signed-off-by: bggRGjQaUbCoE --- lib/http/dynamics.dart | 23 +++++++++++------ lib/http/msg.dart | 5 +++- lib/pages/dynamics/create_dyn_panel.dart | 33 ++++++++++++++++++++++-- lib/pages/dynamics/repost_dyn_panel.dart | 8 ++++++ lib/pages/setting/widgets/model.dart | 27 ++++++++++++++++--- lib/utils/storage.dart | 4 +++ lib/utils/utils.dart | 14 ++++++++++ 7 files changed, 99 insertions(+), 15 deletions(-) diff --git a/lib/http/dynamics.dart b/lib/http/dynamics.dart index cb27257e..50f27c06 100644 --- a/lib/http/dynamics.dart +++ b/lib/http/dynamics.dart @@ -1,4 +1,5 @@ import 'package:PiliPlus/http/loading_state.dart'; +import 'package:dio/dio.dart'; import '../models/dynamics/result.dart'; import '../models/dynamics/up.dart'; @@ -84,17 +85,23 @@ class DynamicsHttp { // static Future dynamicDetail({ - String? id, + dynamic id, dynamic rid, dynamic type, + bool? clearCookie, }) async { - var res = await Request().get(Api.dynamicDetail, queryParameters: { - 'timezone_offset': -480, - if (id != null) 'id': id, - if (rid != null) 'rid': rid, - if (type != null) 'type': type, - 'features': 'itemOpusStyle', - }); + var res = await Request().get( + Api.dynamicDetail, + queryParameters: { + 'timezone_offset': -480, + if (id != null) 'id': id, + if (rid != null) 'rid': rid, + if (type != null) 'type': type, + 'features': 'itemOpusStyle', + }, + options: + clearCookie == true ? Options(extra: {'clearCookie': true}) : null, + ); if (res.data['code'] == 0) { try { return { diff --git a/lib/http/msg.dart b/lib/http/msg.dart index b9746367..02e9d47a 100644 --- a/lib/http/msg.dart +++ b/lib/http/msg.dart @@ -212,7 +212,10 @@ class MsgHttp { }, ); if (res.data['code'] == 0) { - return {'status': true}; + return { + 'status': true, + 'data': res.data['data'], + }; } else { return { 'status': false, diff --git a/lib/pages/dynamics/create_dyn_panel.dart b/lib/pages/dynamics/create_dyn_panel.dart index f68b90ad..c5e80287 100644 --- a/lib/pages/dynamics/create_dyn_panel.dart +++ b/lib/pages/dynamics/create_dyn_panel.dart @@ -1,10 +1,15 @@ +import 'package:PiliPlus/http/dynamics.dart'; +import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/http/msg.dart'; +import 'package:PiliPlus/models/dynamics/result.dart'; import 'package:PiliPlus/pages/common/common_publish_page.dart'; +import 'package:PiliPlus/pages/dynamics/tab/controller.dart'; import 'package:PiliPlus/pages/dynamics/view.dart'; import 'package:PiliPlus/pages/emote/controller.dart'; import 'package:PiliPlus/pages/emote/view.dart'; import 'package:PiliPlus/pages/video/detail/reply_new/toolbar_icon_button.dart'; import 'package:PiliPlus/utils/storage.dart'; +import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; @@ -483,12 +488,36 @@ class _CreateDynPanelState extends CommonPublishPageState { replyOption: _replyOption, privatePub: _isPrivate ? 1 : null, ); + SmartDialog.dismiss(); if (result['status']) { Get.back(); - SmartDialog.dismiss(); SmartDialog.showToast('发布成功'); + try { + // insert + dynamic id = result['data']['dyn_id']; + if (id != null) { + await Future.delayed(const Duration(milliseconds: 200)); + dynamic res = await DynamicsHttp.dynamicDetail(id: id); + if (res['status']) { + final ctr = Get.find(tag: 'all'); + List list = ctr.loadingState.value is Success + ? (ctr.loadingState.value as Success).response + : []; + list.insert(0, res['data']); + ctr.loadingState.value = LoadingState.success(list); + } + } + } catch (e) { + debugPrint('create dyn $e'); + } + if (GStorage.enableCreateDynAntifraud) { + try { + Utils.checkCreatedDyn(result['data']['dyn_id'], editController.text); + } catch (e) { + SmartDialog.showToast(e.toString()); + } + } } else { - SmartDialog.dismiss(); SmartDialog.showToast(result['msg']); debugPrint('failed to publish: ${result['msg']}'); } diff --git a/lib/pages/dynamics/repost_dyn_panel.dart b/lib/pages/dynamics/repost_dyn_panel.dart index 8f2a9b15..19235f82 100644 --- a/lib/pages/dynamics/repost_dyn_panel.dart +++ b/lib/pages/dynamics/repost_dyn_panel.dart @@ -7,6 +7,7 @@ import 'package:PiliPlus/pages/emote/view.dart'; import 'package:PiliPlus/pages/video/detail/reply_new/toolbar_icon_button.dart'; import 'package:PiliPlus/utils/extension.dart'; import 'package:PiliPlus/utils/storage.dart'; +import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; @@ -385,6 +386,13 @@ class _RepostPanelState extends CommonPublishPageState { Get.back(); SmartDialog.showToast('转发成功'); widget.callback?.call(); + if (GStorage.enableCreateDynAntifraud) { + try { + Utils.checkCreatedDyn(result['data']['dyn_id'], editController.text); + } catch (e) { + SmartDialog.showToast(e.toString()); + } + } } else { SmartDialog.showToast(result['msg']); } diff --git a/lib/pages/setting/widgets/model.dart b/lib/pages/setting/widgets/model.dart index 9ab30e59..1f0aa628 100644 --- a/lib/pages/setting/widgets/model.dart +++ b/lib/pages/setting/widgets/model.dart @@ -1957,11 +1957,10 @@ List get extraSettings => [ leading: Stack( alignment: Alignment.center, children: [ - const Icon(Icons.shield), + const Icon(Icons.shield_outlined), Icon( Icons.reply, - size: 16, - color: Theme.of(Get.context!).colorScheme.surface, + size: 14, ), ], ), @@ -1972,10 +1971,30 @@ List get extraSettings => [ settingsType: SettingsType.sw1tch, title: '使用「哔哩发评反诈」检查评论', subtitle: '仅对Android生效', - leading: Icon(FontAwesomeIcons.b), + leading: Icon( + FontAwesomeIcons.b, + size: 22, + ), setKey: SettingBoxKey.biliSendCommAntifraud, defaultVal: false, ), + SettingsModel( + settingsType: SettingsType.sw1tch, + title: '发布/转发动态反诈', + subtitle: '发布/转发动态后检查动态是否可见', + leading: Stack( + alignment: Alignment.center, + children: [ + const Icon(Icons.shield_outlined), + Icon( + Icons.motion_photos_on, + size: 12, + ), + ], + ), + setKey: SettingBoxKey.enableCreateDynAntifraud, + defaultVal: false, + ), SettingsModel( settingsType: SettingsType.sw1tch, title: '屏蔽带货动态', diff --git a/lib/utils/storage.dart b/lib/utils/storage.dart index 9e90bb82..abe27762 100644 --- a/lib/utils/storage.dart +++ b/lib/utils/storage.dart @@ -369,6 +369,9 @@ class GStorage { static bool get biliSendCommAntifraud => GStorage.setting .get(SettingBoxKey.biliSendCommAntifraud, defaultValue: false); + static bool get enableCreateDynAntifraud => GStorage.setting + .get(SettingBoxKey.enableCreateDynAntifraud, defaultValue: false); + static bool get coinWithLike => GStorage.setting.get(SettingBoxKey.coinWithLike, defaultValue: false); @@ -613,6 +616,7 @@ class SettingBoxKey { showDmChart = 'showDmChart', enableCommAntifraud = 'enableCommAntifraud', biliSendCommAntifraud = 'biliSendCommAntifraud', + enableCreateDynAntifraud = 'enableCreateDynAntifraud', coinWithLike = 'coinWithLike', isPureBlackTheme = 'isPureBlackTheme', antiGoodsDyn = 'antiGoodsDyn', diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index a9aa3ca7..9a9a1153 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -46,6 +46,20 @@ class Utils { static const channel = MethodChannel("PiliPlus"); + static void checkCreatedDyn(id, dynText) async { + if (id != null) { + dynamic res = await DynamicsHttp.dynamicDetail(id: id, clearCookie: true); + showDialog( + context: Get.context!, + builder: (context) => AlertDialog( + title: Text('动态检查结果'), + content: SelectableText( + '${res['status'] ? '无账号状态下找到了你的动态,动态正常!' : '你的动态被shadow ban(仅自己可见)!'} \n\n动态内容: $dynText'), + ), + ); + } + } + // 动态点赞 static Future onLikeDynamic(item, VoidCallback callback) async { feedBack();