package main import ( "fmt" "os" "path/filepath" "time" "kenaito-media-picker/internal/organize" "kenaito-media-picker/internal/probe" "kenaito-media-picker/internal/scanner" "kenaito-media-picker/internal/store" ) func main() { fmt.Println("=== 警告:该程序会改变目录结构,将在5秒后开始执行") time.Sleep(time.Second * 5) rootDir, err := os.Getwd() if err != nil { fmt.Println("=== 获取当前路径异常", err) return } pickerDir := filepath.Join(rootDir, filepath.Base(rootDir)+"-picker") fmt.Printf("=== 整理输出目录(白名单): %s \n", pickerDir) // 1. 扫描并过滤(跳过输出目录、数据库与 ffprobe 相关文件) res, err := scanner.Scan(scanner.Options{ RootDir: rootDir, SkipDir: pickerDir, SkipNames: []string{store.DBFileName, probe.FFprobeExeName, "ffprobe_mac"}, }) if err != nil { fmt.Println("=== 扫描失败:", err) return } res.Filter() // 2. 初始化媒体信息数据库(失败不影响整理,仅无法记录) st, err := store.Open(filepath.Join(rootDir, store.DBFileName)) if err != nil { fmt.Println("=== 初始化数据库失败(继续整理, 不记录媒体信息):", err) st = nil } if st != nil { defer st.Close() } // 3. 释放内嵌 ffprobe(按当前系统);失败只跳过媒体整理,图片照常处理 ffprobePath := "" if (len(res.Images) > 0 || len(res.Media) > 0) && probe.HasEmbeddedFFprobe() { if err := probe.ReleaseFFprobe(); err != nil { fmt.Println("=== 释放解码器失败, 视频/音频整理将跳过(图片照常处理):", err) } else { ffprobePath = probe.FFprobePath() defer probe.RemoveFFprobe() } } // 4. 整理 org := organize.New(pickerDir, ffprobePath, st) if len(res.Images) > 0 { org.ProcessImages(res.Images) } if len(res.Media) > 0 && ffprobePath != "" { org.ProcessMedia(res.Media) } org.Flush() fmt.Println("=== 整理完成") }