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: "", }, } }