package mic import ( "os" "path/filepath" "sort" "time" "tea.chunkbyte.com/kato/go-worm/lib/config" ) type FileInfo struct { Name string `json:"name"` Size int64 `json:"size"` ModifiedTime time.Time `json:"modified_time"` } func Dir() (string, error) { return config.MicDir() } func ListRecordings() ([]FileInfo, error) { dir, err := Dir() if err != nil { return nil, err } entries, err := os.ReadDir(dir) if err != nil { if os.IsNotExist(err) { return nil, nil } return nil, err } var files []FileInfo for _, entry := range entries { if entry.IsDir() || !ValidRecordingFilename(entry.Name()) { continue } info, err := entry.Info() if err != nil { continue } files = append(files, FileInfo{ Name: entry.Name(), Size: info.Size(), ModifiedTime: info.ModTime(), }) } sort.Slice(files, func(i, j int) bool { return files[i].ModifiedTime.After(files[j].ModifiedTime) }) return files, nil } func OpenRecording(name string) (*os.File, os.FileInfo, error) { if !ValidRecordingFilename(name) { return nil, nil, os.ErrInvalid } dir, err := Dir() if err != nil { return nil, nil, err } path := filepath.Join(dir, filepath.Base(name)) info, err := os.Stat(path) if err != nil { return nil, nil, err } if info.IsDir() { return nil, nil, os.ErrInvalid } file, err := os.Open(path) if err != nil { return nil, nil, err } return file, info, nil }