fix(subscribe): refine season mode defaults (#503)

This commit is contained in:
InfinityPacer
2026-06-27 06:55:45 +08:00
committed by GitHub
parent deb9b103da
commit 05bbecba53
3 changed files with 47 additions and 12 deletions

View File

@@ -34,6 +34,7 @@ const props = defineProps({
selectedSeason: Number,
subscribedSeasons: Array as PropType<number[]>,
subscribedSeasonModes: Object as PropType<SeasonSubscribeModes>,
defaultSubscribeMode: String as PropType<SubscribeMode>,
})
// 从 provide 中获取全局设置
@@ -50,6 +51,9 @@ const seasonsSelected = ref<number[]>([])
// 各季订阅方式
const seasonModes = ref<Record<number, SubscribeMode>>({})
// 用户已手动选择过模式的季号,入库状态异步刷新时不再覆盖。
const manuallySelectedModeSeasons = ref(new Set<number>())
// 各季缺失状态0-已入库 1-部分缺失 2-全部缺失,没有数据也是已入库
const seasonsNotExisted = ref<{ [key: number]: number }>({})
@@ -294,11 +298,25 @@ function setSeasonMode(season: number, mode: SubscribeMode) {
function updateSeasonMode(season: number, mode: unknown) {
if (!isSubscribeMode(mode)) return
manuallySelectedModeSeasons.value.add(season)
setSeasonMode(season, mode)
}
function getDefaultSeasonMode(season: number) {
if (!seasonsNotExisted.value[season]) return 'best_version_full'
return props.defaultSubscribeMode ?? 'normal'
}
function ensureSeasonMode(season: number) {
if (!seasonModes.value[season]) setSeasonMode(season, props.subscribedSeasonModes?.[season] ?? 'normal')
if (!seasonModes.value[season]) setSeasonMode(season, props.subscribedSeasonModes?.[season] ?? getDefaultSeasonMode(season))
}
function syncDefaultSeasonModes() {
seasonsSelected.value.forEach(season => {
if (subscribedSeasonSet.value.has(season) || manuallySelectedModeSeasons.value.has(season)) return
setSeasonMode(season, getDefaultSeasonMode(season))
})
}
function isSeasonSubscribed(season: number) {
@@ -354,6 +372,8 @@ watchEffect(() => {
watch(seasonInfos, syncSelectedSeason)
watch(seasonsNotExisted, syncDefaultSeasonModes, { deep: true })
watch(() => props.selectedSeason, syncSelectedSeason)
watch(() => props.subscribedSeasons, syncSelectedSeason)
@@ -624,7 +644,7 @@ onMounted(async () => {
.subscribe-season-mode-toggle {
block-size: 2rem;
max-inline-size: 16rem;
max-inline-size: 18rem;
}
.subscribe-season-mode-button {