package main import ( _ "embed" "fmt" _ "image/gif" // 导入gif支持 _ "image/jpeg" // 导入jpeg支持 _ "image/png" // 导入png支持 "kenaito-media-picker/core" "kenaito-media-picker/store" "kenaito-media-picker/util" "kenaito-media-picker/vars" "os" "path/filepath" "time" ) 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") vars.GlobalPickerDir = pickerDir fmt.Printf("=== 整理输出目录(白名单): %s \n", pickerDir) scanner := core.FileScanner{} scanner.DoScan(rootDir) scanner.DoFilter() // 初始化媒体信息数据库(失败不影响整理,仅无法记录) if err := store.Init(filepath.Join(rootDir, store.DBFileName)); err != nil { fmt.Println("=== 初始化数据库失败(继续整理, 不记录媒体信息):", err) } defer store.Close() // 释放内嵌ffprobe(按当前系统);失败只跳过媒体整理,图片照常处理 ffprobeReady := true if len(vars.GlobalImagePathList) > 0 || len(vars.GlobalMediaPathList) > 0 { if err := util.ReleaseFFprobe(); err != nil { fmt.Println("=== 释放解码器失败, 视频/音频整理将跳过(图片照常处理):", err) ffprobeReady = false } } defer util.RemoveFFprobe() if len(vars.GlobalImagePathList) > 0 { core.DoHandleImage(pickerDir) } if len(vars.GlobalMediaPathList) > 0 && ffprobeReady { core.DoHandleMedia(pickerDir) } // 所有移动完成后,回填文件的归类目录与去向 for src, dest := range vars.GlobalPath2DestDirMap { if err := store.UpdateMediaDest(src, dest); err != nil { fmt.Printf("=== 更新媒体去向失败: %s, 错误: %v\n", src, err) } } }