feat: Add YAML support for added / modified metadata (#37)
This change introduces the ability to read additional or modified metadata like title or description from a YAML file. Just like thumbnails are read from "filename.jpg", we now look for "filename.yml" and override the meta data that is embedded in the video file. This is my very first look at golang, so please tell me if, or rather "where" I went wrong. ;-) Co-authored-by: Heinrich Langos <gumbo2000@noreply@mills.io> Reviewed-on: https://git.mills.io/prologic/tube/pulls/37 Co-authored-by: Heinrich 'Henrik' Langos <gumbo2000@noreply@mills.io> Co-committed-by: Heinrich 'Henrik' Langos <gumbo2000@noreply@mills.io>
This commit is contained in:
parent
a2cc622bc9
commit
7a4ef5b6df
2 changed files with 30 additions and 1 deletions
1
go.mod
1
go.mod
|
@ -15,6 +15,7 @@ require (
|
|||
github.com/sirupsen/logrus v1.9.0
|
||||
github.com/spf13/pflag v1.0.5
|
||||
github.com/wybiral/feeds v1.1.1
|
||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
|
||||
)
|
||||
|
||||
require (
|
||||
|
|
|
@ -3,14 +3,16 @@ package media
|
|||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/dhowden/tag"
|
||||
"git.mills.io/prologic/tube/utils"
|
||||
"github.com/dhowden/tag"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
// Video represents metadata for a single video.
|
||||
|
@ -29,6 +31,26 @@ type Video struct {
|
|||
Views int64
|
||||
}
|
||||
|
||||
func getTagsFromYml(v *Video) error {
|
||||
ymlFileName := fmt.Sprintf("%s.yml", strings.TrimSuffix(v.Path, filepath.Ext(v.Path)))
|
||||
if !utils.FileExists(ymlFileName) {
|
||||
return nil
|
||||
}
|
||||
|
||||
ymlFile, err := ioutil.ReadFile(ymlFileName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = yaml.Unmarshal(ymlFile, v)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
log.Println("Got tags from yml for", v.Path)
|
||||
return nil
|
||||
}
|
||||
|
||||
// ParseVideo parses a video file's metadata and returns a Video.
|
||||
func ParseVideo(p *Path, name string) (*Video, error) {
|
||||
pth := path.Join(p.Path, name)
|
||||
|
@ -73,6 +95,12 @@ func ParseVideo(p *Path, name string) (*Video, error) {
|
|||
Path: pth,
|
||||
Timestamp: timestamp,
|
||||
}
|
||||
// read yml if exists
|
||||
err = getTagsFromYml(v)
|
||||
if err != nil {
|
||||
log.Println("Failed to read yml for", v.Path)
|
||||
}
|
||||
|
||||
// Add thumbnail (if exists)
|
||||
pic := m.Picture()
|
||||
if pic != nil {
|
||||
|
|
Loading…
Reference in a new issue