feat: 将 scanDir 持久化到 app_config 表,移除 localStorage 存储

This commit is contained in:
2025-08-07 21:17:44 +08:00
parent b707fcb890
commit 44bfc02a7d
2 changed files with 21 additions and 13 deletions
+15 -3
View File
@@ -71,7 +71,10 @@ type ScanStatus struct {
// ============================ 应用级常量 ============================
// 应用级配置键。目前只存了两个:上次使用的存放目录、色情检测服务是否真的起来了。
const ConfigKeyDestDir = "scan.destDir"
const (
ConfigKeyScanDir = "scan.scanDir"
ConfigKeyDestDir = "scan.destDir"
)
// nsfwDetectorReadyKey 记录最近一次扫描时色情检测服务是否真的起来了(python+nudenet 可用)。
// 配置开了但检测器没起来(没装 python/模型下载失败等)也能区分出来,前端据此提示。
@@ -147,7 +150,13 @@ type ScanService struct {
// NewScanService 创建扫描服务。
// 注意 store 可以传 nil——数据库打不开时服务照常能用,只是不记录媒体信息。
func NewScanService(st *store.Store) *ScanService {
return &ScanService{store: st, hub: NewStatusHub(), state: ScanIdle}
s := &ScanService{store: st, hub: NewStatusHub(), state: ScanIdle}
// 从数据库恢复上次用过的目录,状态接口可以直接返回给前端回填
if st != nil {
s.rootDir = st.GetConfig(ConfigKeyScanDir)
s.destDir = st.GetConfig(ConfigKeyDestDir)
}
return s
}
// Subscribe 让调用方(通常是 WebSocket 处理器)订阅进度更新。
@@ -209,8 +218,11 @@ func (s *ScanService) Start(rootDir, destDir string) error {
s.ctx, s.cancel = context.WithCancel(context.Background())
s.mu.Unlock()
// 把存放目录记到数据库里,下次打开页面自动填上,省得用户重敲
// 把扫描目录和存放目录记到数据库里,下次打开页面自动填上,省得用户重敲
if s.store != nil {
if err := s.store.SaveConfig(ConfigKeyScanDir, rootDir); err != nil {
fmt.Printf("=== 保存扫描目录配置失败: %v\n", err)
}
if err := s.store.SaveConfig(ConfigKeyDestDir, destDir); err != nil {
fmt.Printf("=== 保存存放目录配置失败: %v\n", err)
}