77 lines
1.4 KiB
Go
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
|
||
|
|
}
|