mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
opt: blacklist (#501)
This commit is contained in:
committed by
GitHub
parent
a8428e52d2
commit
edf84fcc8f
@@ -262,9 +262,7 @@ class VideoCustomActions {
|
||||
act: 5,
|
||||
reSrc: 11,
|
||||
);
|
||||
List<int> blackMidsList = GStorage.blackMidsList;
|
||||
blackMidsList.insert(0, videoItem.owner.mid);
|
||||
GStorage.setBlackMidsList(blackMidsList);
|
||||
GStorage.setBlackMid(videoItem.owner.mid);
|
||||
Get.back();
|
||||
SmartDialog.showToast(res['msg'] ?? '成功');
|
||||
},
|
||||
|
||||
@@ -106,11 +106,11 @@ class SearchHttp {
|
||||
try {
|
||||
switch (searchType) {
|
||||
case SearchType.video:
|
||||
List<int> blackMidsList = GStorage.blackMidsList;
|
||||
Set<int> blackMids = GStorage.blackMids;
|
||||
if (res.data['data']['result'] != null) {
|
||||
for (var i in res.data['data']['result']) {
|
||||
// 屏蔽推广和拉黑用户
|
||||
i['available'] = !blackMidsList.contains(i['mid']);
|
||||
i['available'] = !blackMids.contains(i['mid']);
|
||||
}
|
||||
}
|
||||
data = SearchVideoModel.fromJson(res.data['data']);
|
||||
|
||||
@@ -50,12 +50,11 @@ class VideoHttp {
|
||||
);
|
||||
if (res.data['code'] == 0) {
|
||||
List<RecVideoItemModel> list = [];
|
||||
List<int> blackMidsList = GStorage.blackMidsList;
|
||||
Set<int> blackMids = GStorage.blackMids;
|
||||
for (var i in res.data['data']['item']) {
|
||||
//过滤掉live与ad,以及拉黑用户
|
||||
if (i['goto'] == 'av' &&
|
||||
(i['owner'] != null &&
|
||||
!blackMidsList.contains(i['owner']['mid']))) {
|
||||
(i['owner'] != null && !blackMids.contains(i['owner']['mid']))) {
|
||||
RecVideoItemModel videoItem = RecVideoItemModel.fromJson(i);
|
||||
if (!RecommendFilter.filter(videoItem)) {
|
||||
list.add(videoItem);
|
||||
@@ -120,15 +119,14 @@ class VideoHttp {
|
||||
);
|
||||
if (res.data['code'] == 0) {
|
||||
List<RecVideoItemAppModel> list = [];
|
||||
List<int> blackMidsList = GStorage.blackMidsList;
|
||||
Set<int> blackMids = GStorage.blackMids;
|
||||
for (var i in res.data['data']['items']) {
|
||||
// 屏蔽推广和拉黑用户
|
||||
if (i['card_goto'] != 'ad_av' &&
|
||||
i['card_goto'] != 'ad_web_s' &&
|
||||
i['ad_info'] == null &&
|
||||
(!enableRcmdDynamic ? i['card_goto'] != 'picture' : true) &&
|
||||
(i['args'] != null &&
|
||||
!blackMidsList.contains(i['args']['up_id']))) {
|
||||
(i['args'] != null && !blackMids.contains(i['args']['up_id']))) {
|
||||
// if (zoneRegExp.pattern.isNotEmpty &&
|
||||
// i['args']?['rname'] != null &&
|
||||
// zoneRegExp.hasMatch(i['args']['rname'])) {
|
||||
@@ -155,9 +153,9 @@ class VideoHttp {
|
||||
);
|
||||
if (res.data['code'] == 0) {
|
||||
List<HotVideoItemModel> list = [];
|
||||
List<int> blackMidsList = GStorage.blackMidsList;
|
||||
Set<int> blackMids = GStorage.blackMids;
|
||||
for (var i in res.data['data']['list']) {
|
||||
if (!blackMidsList.contains(i['owner']['mid']) &&
|
||||
if (!blackMids.contains(i['owner']['mid']) &&
|
||||
!RecommendFilter.filterTitle(i['title']) &&
|
||||
!RecommendFilter.filterLikeRatio(
|
||||
i['stat']['like'], i['stat']['view'])) {
|
||||
@@ -179,9 +177,9 @@ class VideoHttp {
|
||||
dynamic res = await GrpcRepo.popular(idx);
|
||||
if (res['status']) {
|
||||
List<card.Card> list = [];
|
||||
List<int> blackMidsList = GStorage.blackMidsList;
|
||||
Set<int> blackMids = GStorage.blackMids;
|
||||
for (card.Card item in res['data']) {
|
||||
if (!blackMidsList.contains(item.smallCoverV5.up.id.toInt())) {
|
||||
if (!blackMids.contains(item.smallCoverV5.up.id.toInt())) {
|
||||
list.add(item);
|
||||
}
|
||||
}
|
||||
@@ -1085,9 +1083,9 @@ class VideoHttp {
|
||||
var res = await Request().get(rankApi);
|
||||
if (res.data['code'] == 0) {
|
||||
List<HotVideoItemModel> list = [];
|
||||
List<int> blackMidsList = GStorage.blackMidsList;
|
||||
Set<int> blackMids = GStorage.blackMids;
|
||||
for (var i in res.data['data']['list']) {
|
||||
if (!blackMidsList.contains(i['owner']['mid']) &&
|
||||
if (!blackMids.contains(i['owner']['mid']) &&
|
||||
!RecommendFilter.filterTitle(i['title']) &&
|
||||
!RecommendFilter.filterLikeRatio(
|
||||
i['stat']['like'], i['stat']['view'])) {
|
||||
|
||||
@@ -26,11 +26,12 @@ class _BlackListPageState extends State<BlackListPage> {
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
List list = _blackListController.loadingState.value is Success
|
||||
? (_blackListController.loadingState.value as Success).response
|
||||
final list = _blackListController.loadingState.value is Success
|
||||
? ((_blackListController.loadingState.value as Success).response
|
||||
as List)
|
||||
.cast<BlackListItem>()
|
||||
: <BlackListItem>[];
|
||||
GStorage.setBlackMidsList(
|
||||
list.isNotEmpty ? list.map((e) => e.mid!).toList() : <int>[]);
|
||||
GStorage.blackMids = list.map((e) => e.mid!).toSet();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
|
||||
@@ -32,10 +32,10 @@ class RcmdController extends CommonController {
|
||||
bool shouldSaveLast =
|
||||
enableSaveLastData && currentPage == 0 && currentList.isNotEmpty;
|
||||
if (shouldSaveLast && currentList.length > 500) {
|
||||
currentList = currentList.sublist(0, 50);
|
||||
currentList.removeRange(50, currentList.length);
|
||||
}
|
||||
lastRefreshAt = shouldSaveLast && savedRcmdTip ? dataList.length : null;
|
||||
return shouldSaveLast ? dataList + currentList : null;
|
||||
return shouldSaveLast ? (dataList..addAll(currentList)) : null;
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
26
lib/utils/set_int_adapter.dart
Normal file
26
lib/utils/set_int_adapter.dart
Normal file
@@ -0,0 +1,26 @@
|
||||
import 'package:hive/hive.dart';
|
||||
|
||||
class SetIntAdapter extends TypeAdapter<Set<int>> {
|
||||
@override
|
||||
final int typeId = 11;
|
||||
|
||||
@override
|
||||
Set<int> read(BinaryReader reader) {
|
||||
return reader.readIntList().toSet();
|
||||
}
|
||||
|
||||
@override
|
||||
void write(BinaryWriter writer, Set<int> obj) {
|
||||
writer.writeIntList(obj.toList());
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => typeId.hashCode;
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) =>
|
||||
identical(this, other) ||
|
||||
other is SetIntAdapter &&
|
||||
runtimeType == other.runtimeType &&
|
||||
typeId == other.typeId;
|
||||
}
|
||||
@@ -26,6 +26,7 @@ import 'package:PiliPlus/utils/accounts/account_adapter.dart';
|
||||
import 'package:PiliPlus/utils/accounts/cookie_jar_adapter.dart';
|
||||
import 'package:PiliPlus/utils/accounts/account_type_adapter.dart';
|
||||
import 'package:PiliPlus/utils/login.dart';
|
||||
import 'package:PiliPlus/utils/set_int_adapter.dart';
|
||||
import 'package:cookie_jar/cookie_jar.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hive_flutter/hive_flutter.dart';
|
||||
@@ -434,15 +435,18 @@ class GStorage {
|
||||
static List<double> get dynamicDetailRatio => List<double>.from(setting
|
||||
.get(SettingBoxKey.dynamicDetailRatio, defaultValue: [60.0, 40.0]));
|
||||
|
||||
static List<int> get blackMidsList => List<int>.from(GStorage.localCache
|
||||
.get(LocalCacheKey.blackMidsList, defaultValue: <int>[]));
|
||||
static Set<int> get blackMids =>
|
||||
GStorage.localCache.get(LocalCacheKey.blackMids, defaultValue: <int>{});
|
||||
|
||||
static set blackMids(Set<int> blackMidsSet) {
|
||||
GStorage.localCache.put(LocalCacheKey.blackMids, blackMidsSet);
|
||||
}
|
||||
|
||||
static RuleFilter get danmakuFilterRule => GStorage.localCache
|
||||
.get(LocalCacheKey.danmakuFilterRules, defaultValue: RuleFilter.empty());
|
||||
|
||||
static void setBlackMidsList(blackMidsList) {
|
||||
if (blackMidsList is! List<int>) return;
|
||||
GStorage.localCache.put(LocalCacheKey.blackMidsList, blackMidsList);
|
||||
static void setBlackMid(int mid) {
|
||||
GStorage.localCache.put(LocalCacheKey.blackMids, blackMids..add(mid));
|
||||
}
|
||||
|
||||
static MemberTabType get memberTab => MemberTabType
|
||||
@@ -546,6 +550,7 @@ class GStorage {
|
||||
Hive.registerAdapter(BiliCookieJarAdapter());
|
||||
Hive.registerAdapter(LoginAccountAdapter());
|
||||
Hive.registerAdapter(AccountTypeAdapter());
|
||||
Hive.registerAdapter(SetIntAdapter());
|
||||
Hive.registerAdapter(RuleFilterAdapter());
|
||||
}
|
||||
|
||||
@@ -769,7 +774,7 @@ class LocalCacheKey {
|
||||
static const String historyPause = 'historyPause',
|
||||
|
||||
// 隐私设置-黑名单管理
|
||||
blackMidsList = 'blackMidsList',
|
||||
blackMids = 'blackMids',
|
||||
// 弹幕屏蔽规则
|
||||
danmakuFilterRules = 'danmakuFilterRules',
|
||||
// // access_key
|
||||
@@ -833,6 +838,7 @@ class Accounts {
|
||||
await Future.wait([
|
||||
GStorage.localCache.delete('accessKey'),
|
||||
GStorage.localCache.delete('danmakuFilterRule'),
|
||||
GStorage.localCache.delete('blackMidsList'),
|
||||
dir.delete(recursive: true),
|
||||
if (isLogin)
|
||||
LoginAccount(cookies, localAccessKey['value'],
|
||||
|
||||
Reference in New Issue
Block a user