2026-01-28 10:48:14 +00:00
|
|
|
package scanner
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"os"
|
2026-01-28 12:50:11 +00:00
|
|
|
"path"
|
2026-01-28 10:48:14 +00:00
|
|
|
"strings"
|
|
|
|
|
"time"
|
|
|
|
|
|
|
|
|
|
"github.com/pelletier/go-toml/v2"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type (
|
|
|
|
|
Category struct {
|
|
|
|
|
Name string
|
|
|
|
|
Type string
|
|
|
|
|
Url string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Metadata struct {
|
|
|
|
|
Title string
|
|
|
|
|
Date string
|
|
|
|
|
Part int
|
|
|
|
|
FootageDir string
|
|
|
|
|
Category *Category
|
2026-01-28 12:50:11 +00:00
|
|
|
Uploaded bool
|
2026-01-28 10:48:14 +00:00
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
|
2026-01-28 12:50:11 +00:00
|
|
|
const METADATA_FILENAME = "metadata.toml"
|
|
|
|
|
|
|
|
|
|
func ScanSegments(directory string, extension string) ([]string, error) {
|
2026-01-28 10:48:14 +00:00
|
|
|
entries, err := os.ReadDir(directory)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
files := []string{}
|
|
|
|
|
|
|
|
|
|
for _, item := range entries {
|
|
|
|
|
if item.IsDir() { continue }
|
2026-01-28 12:50:11 +00:00
|
|
|
if !strings.HasSuffix(item.Name(), "." + extension) { continue }
|
2026-01-28 10:48:14 +00:00
|
|
|
files = append(files, item.Name())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return files, nil
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-28 12:50:11 +00:00
|
|
|
func ReadMetadata(directory string) (*Metadata, error) {
|
|
|
|
|
metadata := &Metadata{}
|
|
|
|
|
file, err := os.OpenFile(
|
|
|
|
|
path.Join(directory, METADATA_FILENAME),
|
|
|
|
|
os.O_RDONLY, os.ModePerm,
|
|
|
|
|
)
|
2026-01-28 10:48:14 +00:00
|
|
|
if err != nil {
|
2026-01-28 12:50:11 +00:00
|
|
|
if err == os.ErrNotExist {
|
|
|
|
|
return nil, nil
|
|
|
|
|
}
|
2026-01-28 10:48:14 +00:00
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-28 12:50:11 +00:00
|
|
|
err = toml.NewDecoder(file).Decode(metadata)
|
|
|
|
|
if err != nil { return nil, err }
|
2026-01-28 10:48:14 +00:00
|
|
|
|
2026-01-28 12:50:11 +00:00
|
|
|
return metadata, nil
|
2026-01-28 10:48:14 +00:00
|
|
|
}
|
|
|
|
|
|
2026-01-28 12:50:11 +00:00
|
|
|
func WriteMetadata(directory string, metadata *Metadata) (error) {
|
|
|
|
|
file, err := os.OpenFile(
|
|
|
|
|
path.Join(directory, METADATA_FILENAME),
|
|
|
|
|
os.O_CREATE, 0644,
|
|
|
|
|
)
|
|
|
|
|
if err != nil { return err }
|
|
|
|
|
|
|
|
|
|
err = toml.NewEncoder(file).Encode(metadata)
|
|
|
|
|
|
|
|
|
|
return err
|
2026-01-28 10:48:14 +00:00
|
|
|
}
|
|
|
|
|
|
2026-01-28 12:50:11 +00:00
|
|
|
func DefaultMetadata() *Metadata {
|
|
|
|
|
return &Metadata{
|
2026-01-28 10:48:14 +00:00
|
|
|
Title: "Untitled Stream",
|
|
|
|
|
Date: time.Now().Format("2006-01-02"),
|
|
|
|
|
Part: 0,
|
|
|
|
|
Category: &Category{
|
|
|
|
|
Name: "Something",
|
|
|
|
|
Type: "",
|
|
|
|
|
Url: "",
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
}
|