Files
pargar/backend/internal/storage/sample.go
T

57 lines
1.3 KiB
Go
Raw Normal View History

package storage
import (
"fmt"
"os"
"path/filepath"
)
const SampleVideoKey = "sample.mp4"
// EnsureSampleMP4 uploads the color-bars sample video when the storage key is missing.
// candidates are filesystem paths checked in order (first readable wins).
func EnsureSampleMP4(stg Storage, candidates ...string) error {
if stg == nil {
return fmt.Errorf("storage is nil")
}
if stg.Exists(SampleVideoKey) {
return nil
}
for _, path := range candidates {
if path == "" {
continue
}
f, err := os.Open(path)
if err != nil {
continue
}
info, err := f.Stat()
if err != nil {
f.Close()
continue
}
if info.IsDir() || info.Size() == 0 {
f.Close()
continue
}
_, err = stg.Put(SampleVideoKey, f, info.Size())
f.Close()
if err != nil {
return fmt.Errorf("upload %s: %w", SampleVideoKey, err)
}
return nil
}
return fmt.Errorf("%s missing in storage and no readable candidate found among %v", SampleVideoKey, candidates)
}
// DefaultSampleCandidates returns common relative locations for the checked-in sample.
func DefaultSampleCandidates() []string {
cwd, _ := os.Getwd()
return []string{
filepath.Join(cwd, "media", SampleVideoKey),
filepath.Join(cwd, "backend", "media", SampleVideoKey),
filepath.Join("media", SampleVideoKey),
filepath.Join("backend", "media", SampleVideoKey),
}
}