vodular/scanner/scanner.go

91 lines
1.6 KiB
Go
Raw Normal View History

2026-01-28 10:48:14 +00:00
package scanner
import (
"os"
"path/filepath"
"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
}
)
func FetchVideos(directory string) ([]string, error) {
entries, err := os.ReadDir(directory)
if err != nil {
return nil, err
}
files := []string{}
for _, item := range entries {
if item.IsDir() { continue }
if !strings.HasSuffix(item.Name(), ".mkv") { continue }
files = append(files, item.Name())
}
return files, nil
}
func FetchMetadata(directory string) (*Metadata, error) {
entries, err := os.ReadDir(directory)
if err != nil {
return nil, err
}
for _, item := range entries {
if item.IsDir() { continue }
if item.Name() == "metadata.toml" {
metadata, err := ParseMetadata(filepath.Join(directory, item.Name()))
if err != nil {
return nil, err
}
metadata.FootageDir = filepath.Join(directory, metadata.FootageDir)
return metadata, nil
}
}
return nil, nil
}
func ParseMetadata(filename string) (*Metadata, error) {
metadata := &Metadata{}
file, err := os.OpenFile(filename, os.O_RDONLY, 0o644)
if err != nil {
return nil, err
}
err = toml.NewDecoder(file).Decode(metadata)
if err != nil {
return nil, err
}
return metadata, nil
}
func DefaultMetadata() Metadata {
return Metadata{
Title: "Untitled Stream",
Date: time.Now().Format("2006-01-02"),
Part: 0,
Category: &Category{
Name: "Something",
Type: "",
Url: "",
},
}
}