This commit is contained in:
2025-09-15 21:17:57 +08:00
parent 524da0830a
commit 413ac308ac
9 changed files with 394 additions and 26 deletions
+27 -6
View File
@@ -74,8 +74,9 @@ type ScanStatus struct {
// 应用级配置键。目前只存了两个:上次使用的存放目录、色情检测服务是否真的起来了。
const (
ConfigKeyScanDir = "scan.scanDir"
ConfigKeyDestDir = "scan.destDir"
ConfigKeyScanDir = "scan.scanDir"
ConfigKeyDestDir = "scan.destDir"
ConfigKeyOrganizeWorkers = "organize.workers"
)
// nsfwDetectorReadyKey 记录最近一次扫描时色情检测服务是否真的起来了(python+nudenet 可用)。
@@ -625,6 +626,14 @@ func sanitizeLine(line string) string {
// 3. 准备解码器:把内嵌的 ffprobe 程序释放到当前目录(用它读视频/音频信息)
// 4. 整理:给每个文件探测信息 → 判断是否重复 → 分到分类目录 → 搬进去
func (s *ScanService) runScan(ctx context.Context, rootDir, destDir string) error {
// 从数据库读取 organize.workers 配置(支持运行时修改,立即生效)
if v := s.store.GetConfig(ConfigKeyOrganizeWorkers); v != "" {
if w, err := strconv.Atoi(v); err == nil && w >= 0 {
config.SetWorkers(w)
fmt.Printf("=== 使用数据库配置 organize.workers=%d\n", w)
}
}
// 确定整理后文件的存放目录:统一都放进「KMP已整理」这一层——
// 用户填了存放目录就放在它下面(存放目录/KMP已整理),没填就放在扫描目录下(扫描目录/KMP已整理)。
pickerDir := filepath.Join(rootDir, DefaultPickerDirName)
@@ -696,13 +705,19 @@ func (s *ScanService) runScan(ctx context.Context, rootDir, destDir string) erro
threshold = t
}
}
if d, err := nsfw.Start("", threshold); err != nil {
workers := 4
if v := s.store.GetConfig("nsfw.workers"); v != "" {
if w, err := strconv.Atoi(v); err == nil && w > 0 {
workers = w
}
}
if d, err := nsfw.Start("", threshold, workers); err != nil {
fmt.Printf("=== 色情识别未启用(图片照常处理): %v\n", err)
} else {
nsfwDet = d
defer nsfwDet.Stop()
s.setNsfwDetectorReady(true)
fmt.Println("=== 色情识别已启用(NudeNet)")
fmt.Printf("=== 色情识别已启用(NudeNet, workers=%d)\n", workers)
}
}
@@ -715,12 +730,18 @@ func (s *ScanService) runScan(ctx context.Context, rootDir, destDir string) erro
threshold = t
}
}
if d, err := anime_nsfw.Start("", threshold); err != nil {
workers := 2
if v := s.store.GetConfig("anime.workers"); v != "" {
if w, err := strconv.Atoi(v); err == nil && w > 0 {
workers = w
}
}
if d, err := anime_nsfw.Start("", threshold, workers); err != nil {
fmt.Printf("=== 动漫色情识别未启用(图片照常处理): %v\n", err)
} else {
animeNsfwDet = d
defer animeNsfwDet.Stop()
fmt.Println("=== 动漫色情识别已启用(WD Tagger v3)")
fmt.Printf("=== 动漫色情识别已启用(WD Tagger v3, workers=%d)\n", workers)
}
}