90 lines
1.6 KiB
Go
90 lines
1.6 KiB
Go
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: "",
|
|
},
|
|
}
|
|
}
|