feat: 按照黑名单对搜索结果进行屏蔽

This commit is contained in:
guozhigq
2023-09-27 23:24:55 +08:00
parent 6b3773a074
commit 9a0c9f4021
4 changed files with 67 additions and 2 deletions

View File

@ -7,6 +7,7 @@ import 'package:pilipala/common/widgets/stat/danmu.dart';
import 'package:pilipala/common/widgets/stat/view.dart';
import 'package:pilipala/http/search.dart';
import 'package:pilipala/http/user.dart';
import 'package:pilipala/pages/member/index.dart';
import 'package:pilipala/utils/utils.dart';
import 'package:pilipala/common/widgets/network_img_layer.dart';
@ -222,6 +223,20 @@ class VideoContent extends StatelessWidget {
],
),
),
PopupMenuItem<String>(
onTap: () async {
MemberController().blockUser(videoItem.mid);
},
value: 'block',
height: 35,
child: const Row(
children: [
Icon(Icons.block, size: 16),
SizedBox(width: 6),
Text('拉黑up', style: TextStyle(fontSize: 13))
],
),
),
],
),
),

View File

@ -1,11 +1,14 @@
import 'package:hive/hive.dart';
import 'package:pilipala/http/index.dart';
import 'package:pilipala/models/bangumi/info.dart';
import 'package:pilipala/models/common/search_type.dart';
import 'package:pilipala/models/search/hot.dart';
import 'package:pilipala/models/search/result.dart';
import 'package:pilipala/models/search/suggest.dart';
import 'package:pilipala/utils/storage.dart';
class SearchHttp {
static Box setting = GStrorage.setting;
static Future hotSearchList() async {
var res = await Request().get(Api.hotSearchList);
if (res.data['code'] == 0) {
@ -63,6 +66,12 @@ class SearchHttp {
Object data;
switch (searchType) {
case SearchType.video:
List<int> blackMidsList =
setting.get(SettingBoxKey.blackMidsList, defaultValue: [-1]);
for (var i in res.data['data']['result']) {
// 屏蔽推广和拉黑用户
i['available'] = !blackMidsList.contains(i['mid']);
}
data = SearchVideoModel.fromJson(res.data['data']);
break;
// case SearchType.live_room:

View File

@ -6,6 +6,7 @@ class SearchVideoModel {
List<SearchVideoItemModel>? list;
SearchVideoModel.fromJson(Map<String, dynamic> json) {
list = json['result']
.where((e) => e['available'] == true)
.map<SearchVideoItemModel>((e) => SearchVideoItemModel.fromJson(e))
.toList();
}
@ -17,7 +18,7 @@ class SearchVideoItemModel {
this.id,
this.cid,
// this.author,
// this.mid,
this.mid,
// this.typeid,
// this.typename,
this.arcurl,
@ -47,7 +48,7 @@ class SearchVideoItemModel {
int? id;
int? cid;
// String? author;
// String? mid;
int? mid;
// String? typeid;
// String? typename;
String? arcurl;
@ -80,6 +81,7 @@ class SearchVideoItemModel {
arcurl = json['arcurl'];
aid = json['aid'];
bvid = json['bvid'];
mid = json['mid'];
// title = json['title'].replaceAll(RegExp(r'<.*?>'), '');
title = Em.regTitle(json['title']);
description = json['description'];

View File

@ -95,4 +95,43 @@ class MemberController extends GetxController {
},
);
}
// 拉黑用户
Future blockUser(int mid) async {
if (userInfoCache.get('userInfoCache') == null) {
SmartDialog.showToast('账号未登录');
return;
}
SmartDialog.show(
useSystem: true,
animationType: SmartAnimationType.centerFade_otherSlide,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('提示'),
content: const Text('确定拉黑UP主?'),
actions: [
TextButton(
onPressed: () => SmartDialog.dismiss(),
child: Text(
'点错了',
style: TextStyle(color: Theme.of(context).colorScheme.outline),
),
),
TextButton(
onPressed: () async {
var res = await VideoHttp.relationMod(
mid: mid,
act: 5,
reSrc: 11,
);
SmartDialog.dismiss();
if (res['status']) {}
},
child: const Text('确认'),
)
],
);
},
);
}
}