Files
go-worm/lib/mic/list.go
T
2026-09-02 01:00:09 +03:00

77 lines
1.4 KiB
Go

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
}