feat: 新增视频标题本地关键词过滤

This commit is contained in:
orz12
2024-09-08 22:42:32 +08:00
committed by bggRGjQaUbCoE
parent a4a1cb1371
commit 545140dbeb
3 changed files with 71 additions and 0 deletions

View File

@@ -28,6 +28,7 @@ class _RecommendSettingState extends State<RecommendSetting> {
// late int filterUnfollowedRatio;
late int minDurationForRcmd;
late int minLikeRatioForRecommend;
late String banWordForRecommend;
@override
void initState() {
@@ -44,6 +45,8 @@ class _RecommendSettingState extends State<RecommendSetting> {
setting.get(SettingBoxKey.minDurationForRcmd, defaultValue: 0);
minLikeRatioForRecommend =
setting.get(SettingBoxKey.minLikeRatioForRecommend, defaultValue: 0);
banWordForRecommend =
setting.get(SettingBoxKey.banWordForRecommend, defaultValue: '');
}
@override
@@ -144,6 +147,66 @@ class _RecommendSettingState extends State<RecommendSetting> {
}
},
),
ListTile(
dense: false,
leading: const Icon(Icons.title_outlined),
title: Text('标题关键词过滤', style: titleStyle),
subtitle: Text(
banWordForRecommend.isEmpty ? "点击添加" : banWordForRecommend,
style: subTitleStyle,
),
onTap: () async {
final TextEditingController textController =
TextEditingController(text: banWordForRecommend);
await showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: const Text('标题关键词过滤'),
content: Column(mainAxisSize: MainAxisSize.min, children: [
const Text('使用空格隔开,如:尝试 测试'),
TextField(
controller: textController,
//decoration: InputDecoration(hintText: hintText),
)
]),
actions: <Widget>[
TextButton(
child: const Text('清空'),
onPressed: () {
textController.text = '';
},
),
TextButton(
child: const Text('取消'),
onPressed: () {
Navigator.of(context).pop();
SmartDialog.showToast('关键词未被修改');
},
),
TextButton(
child: const Text('保存'),
onPressed: () async {
Navigator.of(context).pop();
String filter = textController.text.trim();
banWordForRecommend = filter;
setting.put(SettingBoxKey.banWordForRecommend,
banWordForRecommend);
setState(() {});
RecommendFilter.update();
if (filter.isNotEmpty) {
SmartDialog.showToast('已保存:$banWordForRecommend');
} else {
SmartDialog.showToast('已清除全部关键词');
}
},
),
],
);
},
);
},
),
ListTile(
dense: false,
title: Text('视频时长过滤', style: titleStyle),

View File

@@ -8,6 +8,7 @@ class RecommendFilter {
static late int minLikeRatioForRecommend;
static late bool exemptFilterForFollowed;
static late bool applyFilterToRelatedVideos;
static late List<String> banWordList;
RecommendFilter() {
update();
}
@@ -20,6 +21,9 @@ class RecommendFilter {
setting.get(SettingBoxKey.minDurationForRcmd, defaultValue: 0);
minLikeRatioForRecommend =
setting.get(SettingBoxKey.minLikeRatioForRecommend, defaultValue: 0);
banWordList = (setting.get(SettingBoxKey.banWordForRecommend,
defaultValue: '') as String)
.split(' ');
exemptFilterForFollowed =
setting.get(SettingBoxKey.exemptFilterForFollowed, defaultValue: true);
applyFilterToRelatedVideos = setting
@@ -47,6 +51,9 @@ class RecommendFilter {
minLikeRatioForRecommend * videoItem.stat.view) {
return true;
}
for (var word in banWordList) {
if (word.isNotEmpty && videoItem.title.contains(word)) return true;
}
return false;
}
}

View File

@@ -170,6 +170,7 @@ class SettingBoxKey {
minDurationForRcmd = 'minDurationForRcmd',
minLikeRatioForRecommend = 'minLikeRatioForRecommend',
exemptFilterForFollowed = 'exemptFilterForFollowed',
banWordForRecommend = 'banWordForRecommend',
//filterUnfollowedRatio = 'filterUnfollowedRatio',
applyFilterToRelatedVideos = 'applyFilterToRelatedVideos',