package fs import ( "ZhenTuLocalPassiveAdapter/config" "ZhenTuLocalPassiveAdapter/dto" "ZhenTuLocalPassiveAdapter/util" "fmt" "os" "path" "sort" "time" ) type LocalAdapter struct { StorageConfig config.StorageConfig } func (l *LocalAdapter) GetFileList(dirPath string, relDt time.Time) ([]dto.File, error) { if l.StorageConfig.Path == "" { return nil, fmt.Errorf("未配置存储路径") } // 读取文件夹下目录 files, err := os.ReadDir(path.Join(l.StorageConfig.Path, dirPath)) if err != nil { return nil, err } var fileList []dto.File for _, file := range files { if file.IsDir() { continue } if !util.IsVideoFile(file.Name()) { continue } info, err := file.Info() if err != nil { continue } startTime, stopTime, err := util.ParseStartStopTime(info.Name(), relDt) if err != nil { continue } if startTime.Equal(stopTime) || stopTime.IsZero() { // 如果文件名没有时间戳,则认为该文件是未录制完成的 // 尝试读取一下视频信息 duration, err := util.GetVideoDuration(path.Join(l.StorageConfig.Path, dirPath, file.Name())) if err != nil { // 如果还是没有,就按照配置文件里的加起来 stopTime = stopTime.Add(time.Second * time.Duration(config.Config.Record.Duration)) } else { stopTime = stopTime.Add(time.Second * time.Duration(duration)) } } fileList = append(fileList, dto.File{ BasePath: l.StorageConfig.Path, Name: file.Name(), Path: dirPath, Url: path.Join(l.StorageConfig.Path, dirPath, file.Name()), StartTime: startTime, EndTime: stopTime, }) sort.Slice(fileList, func(i, j int) bool { return fileList[i].StartTime.Before(fileList[j].StartTime) }) } return fileList, nil }