Files
PiliPlus/lib/pages/setting/models/recommend_settings.dart
bggRGjQaUbCoE ec1bdb243f fix #1300
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
2025-09-24 10:20:23 +08:00

119 lines
3.8 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:PiliPlus/http/video.dart';
import 'package:PiliPlus/models/common/settings_type.dart';
import 'package:PiliPlus/pages/rcmd/controller.dart';
import 'package:PiliPlus/pages/setting/models/model.dart';
import 'package:PiliPlus/utils/recommend_filter.dart';
import 'package:PiliPlus/utils/storage_key.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
List<SettingsModel> get recommendSettings => [
const SettingsModel(
settingsType: SettingsType.sw1tch,
title: '首页使用app端推荐',
subtitle: '若web端推荐不太符合预期可尝试切换至app端推荐',
leading: Icon(Icons.model_training_outlined),
setKey: SettingBoxKey.appRcmd,
defaultVal: true,
needReboot: true,
),
SettingsModel(
settingsType: SettingsType.sw1tch,
title: '保留首页推荐刷新',
subtitle: '下拉刷新时保留上次内容',
leading: const Icon(Icons.refresh),
setKey: SettingBoxKey.enableSaveLastData,
defaultVal: false,
onChanged: (value) {
try {
Get.find<RcmdController>()
..enableSaveLastData = value
..lastRefreshAt = null;
} catch (e) {
if (kDebugMode) debugPrint('$e');
}
},
),
SettingsModel(
settingsType: SettingsType.sw1tch,
title: '显示上次看到位置提示',
subtitle: '保留上次推荐时,在上次刷新位置显示提示',
leading: const Icon(Icons.tips_and_updates_outlined),
setKey: SettingBoxKey.savedRcmdTip,
defaultVal: true,
onChanged: (value) {
try {
Get.find<RcmdController>()
..savedRcmdTip = value
..lastRefreshAt = null;
} catch (e) {
if (kDebugMode) debugPrint('$e');
}
},
),
getVideoFilterSelectModel(
context: Get.context!,
title: '点赞率',
suffix: '%',
key: SettingBoxKey.minLikeRatioForRecommend,
values: [0, 1, 2, 3, 4],
onChanged: (value) => RecommendFilter.minLikeRatioForRecommend = value,
),
getBanwordModel(
context: Get.context!,
title: '标题关键词过滤',
key: SettingBoxKey.banWordForRecommend,
onChanged: (value) {
RecommendFilter.rcmdRegExp = value;
RecommendFilter.enableFilter = value.pattern.isNotEmpty;
},
),
getBanwordModel(
context: Get.context!,
title: 'App推荐/热门/排行榜: 视频分区关键词过滤',
key: SettingBoxKey.banWordForZone,
onChanged: (value) {
VideoHttp.zoneRegExp = value;
VideoHttp.enableFilter = value.pattern.isNotEmpty;
},
),
getVideoFilterSelectModel(
context: Get.context!,
title: '视频时长',
suffix: 's',
key: SettingBoxKey.minDurationForRcmd,
values: [0, 30, 60, 90, 120],
onChanged: (value) => RecommendFilter.minDurationForRcmd = value,
),
getVideoFilterSelectModel(
context: Get.context!,
title: '播放量',
key: SettingBoxKey.minPlayForRcmd,
values: [0, 50, 100, 500, 1000],
onChanged: (value) => RecommendFilter.minPlayForRcmd = value,
),
SettingsModel(
settingsType: SettingsType.sw1tch,
title: '已关注UP豁免推荐过滤',
subtitle: '推荐中已关注用户发布的内容不会被过滤',
leading: const Icon(Icons.favorite_border_outlined),
setKey: SettingBoxKey.exemptFilterForFollowed,
defaultVal: true,
onChanged: (value) {
RecommendFilter.exemptFilterForFollowed = value;
},
),
SettingsModel(
settingsType: SettingsType.sw1tch,
title: '过滤器也应用于相关视频',
subtitle: '视频详情页的相关视频也进行过滤¹',
leading: const Icon(Icons.explore_outlined),
setKey: SettingBoxKey.applyFilterToRelatedVideos,
defaultVal: true,
onChanged: (value) {
RecommendFilter.applyFilterToRelatedVideos = value;
},
),
];