Files
kenaito-media-picker/core/file_scanner.go
T
odboy 85135d0a15 refactor: 重构项目并更改名称为 kenaito-media-picker- 更新了所有文件中的包名引用,从 ImageVideoResolutionPickerTool 改为 kenaito-media-picker
- 修改了 build.sh脚本中的文件名
- 更新了 go.mod 文件中的模块名- 调整了 README.md 文件的格式和内容
2025-03-04 21:07:22 +08:00

94 lines
2.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package core
import (
"fmt"
"github.com/redmask-hb/GoSimplePrint/goPrint"
"kenaito-media-picker/util"
"kenaito-media-picker/vars"
"log"
"os"
"path"
"path/filepath"
"strings"
)
type FileScanner struct {
}
func (FileScanner) DoScan(rootDir string) {
fmt.Printf("=== 开始扫描文件 \n")
if err := filepath.Walk(rootDir, visit); err != nil {
log.Fatal(err)
}
doReadFileMimeInfo()
}
func doReadFileMimeInfo() {
total := len(vars.GlobalFilePathList)
fmt.Printf("=== 文件总数: %d \n", total)
// 扫描文件mime信息
var count = 0
bar := goPrint.NewBar(100)
bar.SetNotice("=== 扫描文件Mime:")
bar.SetGraph(">")
bar.SetNoticeColor(goPrint.FontColor.Red)
for _, currentPath := range vars.GlobalFilePathList {
// mime
vars.GlobalFilePath2MimeInfoMap[currentPath] = util.ReadFileMimeInfo(currentPath).String()
count = count + 1
bar.PrintBar(util.CalcPercentage(count, total))
}
bar.PrintEnd("=== Finish")
}
func (FileScanner) DoFilter() {
total := len(vars.GlobalFilePathList)
var count = 0
bar := goPrint.NewBar(100)
bar.SetNotice("=== 过滤已支持的媒体:")
bar.SetGraph(">")
for _, globalFilePath := range vars.GlobalFilePathList {
fileMime := vars.GlobalFilePath2MimeInfoMap[globalFilePath]
count = count + 1
if strings.Contains(fileMime, "video/") { // 视频
vars.GlobalVideoPathList = append(vars.GlobalVideoPathList, globalFilePath)
bar.PrintBar(util.CalcPercentage(count, total))
continue
}
// mime格式为application/octet-stream的视频
ext := path.Ext(globalFilePath)
if util.IsSupportVideo(ext) {
vars.GlobalVideoPathList = append(vars.GlobalVideoPathList, globalFilePath)
bar.PrintBar(util.CalcPercentage(count, total))
continue
}
if strings.Contains(fileMime, "image/") { // 图片
vars.GlobalImagePathList = append(vars.GlobalImagePathList, globalFilePath)
bar.PrintBar(util.CalcPercentage(count, total))
continue
}
if util.IsSupportImage(ext) {
vars.GlobalImagePathList = append(vars.GlobalImagePathList, globalFilePath)
bar.PrintBar(util.CalcPercentage(count, total))
continue
}
// 其他的文件不处理
}
bar.PrintEnd("=== Finish")
}
// 定义walkFn回调函数visit
func visit(currentPath string, info os.FileInfo, err error) error {
if err != nil {
return err // 如果有错误,直接返回
}
if !info.IsDir() {
vars.GlobalFilePathList = append(vars.GlobalFilePathList, currentPath)
// filename, include ext
vars.GlobalFilePath2FileNameMap[currentPath] = filepath.Base(currentPath)
// file ext
vars.GlobalFilePath2FileExtMap[currentPath] = path.Ext(currentPath)
}
return nil
}