Files
MeBox/web/src/pages/useAutoOrganizeSettings.ts
T
truewhile 73dc37fef8 Remove obsolete file manager organize options (#12)
Remove UI options for features that no longer exist:
- qB download auto-organize
- downloader smart classification
- seeding (keep seeding)

Also remove related warning banners and simplify move transfer labels.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: truewhile <truewhile@users.noreply.github.com>
2026-09-02 11:43:39 +08:00

96 lines
2.8 KiB
TypeScript

import { useCallback, useEffect, useState } from 'react'
import toast from 'react-hot-toast'
import { adminAPI } from '../api/admin'
import {
AUTO_ORGANIZE_DEFAULTS,
AUTO_ORGANIZE_KEYS,
type AutoOrganizeConfig,
type AutoOrganizeTab,
mergeAutoOrganizeSettings,
settingOn,
} from './autoOrganizeModel'
type UseAutoOrganizeSettingsOptions = {
onScrapeAfterChange: (enabled: boolean) => void
}
export function useAutoOrganizeSettings({ onScrapeAfterChange }: UseAutoOrganizeSettingsOptions) {
const [config, setConfig] = useState<AutoOrganizeConfig>(AUTO_ORGANIZE_DEFAULTS)
const [dirty, setDirty] = useState(false)
const [saving, setSaving] = useState(false)
const [running, setRunning] = useState(false)
const [loading, setLoading] = useState(true)
const [activeTab, setActiveTab] = useState<AutoOrganizeTab>('basic')
const refresh = useCallback(() => {
setLoading(true)
adminAPI
.listSettings()
.then((rows) => {
const nextConfig = mergeAutoOrganizeSettings(rows)
setConfig(nextConfig)
onScrapeAfterChange(settingOn(nextConfig.scrapeAfter))
setDirty(false)
})
.catch(() => undefined)
.finally(() => setLoading(false))
}, [onScrapeAfterChange])
useEffect(() => {
refresh()
}, [refresh])
const changeConfig = useCallback((key: keyof AutoOrganizeConfig, value: string) => {
setConfig((current) => ({ ...current, [key]: value }))
if (key === 'scrapeAfter') onScrapeAfterChange(settingOn(value))
setDirty(true)
}, [onScrapeAfterChange])
const save = useCallback(async (): Promise<boolean> => {
setSaving(true)
try {
for (const key of Object.keys(AUTO_ORGANIZE_KEYS) as Array<keyof AutoOrganizeConfig>) {
await adminAPI.updateSetting(AUTO_ORGANIZE_KEYS[key], config[key] ?? '')
}
setDirty(false)
toast.success('整理入库设置已保存')
return true
} catch (err: unknown) {
toast.error((err as { response?: { data?: { error?: string } } })?.response?.data?.error ?? '保存整理入库设置失败')
return false
} finally {
setSaving(false)
}
}, [config])
const runNow = useCallback(async () => {
if (dirty) {
const saved = await save()
if (!saved) return
}
setRunning(true)
try {
// 定时任务/调度管理入口已随「低频维护」功能移除;保存设置后由后台
// 周期任务或手动扫描自动整理,不再提供手动触发。
toast.success('整理设置已保存,后台周期任务会自动处理')
} finally {
setRunning(false)
}
}, [dirty, save])
return {
config,
dirty,
saving,
running,
loading,
activeTab,
refresh,
save,
runNow,
setActiveTab,
changeConfig,
}
}