update README, lots of polish

This commit is contained in:
ari melody 2026-01-30 18:53:09 +00:00
parent 4624c56e54
commit ce836b2d46
Signed by: ari
GPG key ID: CF99829C92678188
11 changed files with 210 additions and 121 deletions

86
main.go
View file

@ -11,16 +11,15 @@ import (
"path"
"strings"
"sync"
"time"
"golang.org/x/oauth2"
"golang.org/x/oauth2/google"
"google.golang.org/api/youtube/v3"
"arimelody.space/live-vod-uploader/config"
"arimelody.space/live-vod-uploader/scanner"
vid "arimelody.space/live-vod-uploader/video"
yt "arimelody.space/live-vod-uploader/youtube"
"arimelody.space/vodular/config"
"arimelody.space/vodular/scanner"
vid "arimelody.space/vodular/video"
yt "arimelody.space/vodular/youtube"
)
//go:embed res/help.txt
@ -35,6 +34,27 @@ func showHelp() {
}
func main() {
// config
cfg, err := config.ReadConfig(config.CONFIG_FILENAME)
if err != nil {
log.Fatalf("Failed to read config: %v", err)
os.Exit(1)
}
if cfg == nil {
err = config.GenerateConfig(config.CONFIG_FILENAME)
if err != nil {
log.Fatalf("Failed to generate config: %v", err)
os.Exit(1)
}
log.Printf(
"New config file created (%s). " +
"Please edit this file before running again!",
config.CONFIG_FILENAME,
)
os.Exit(0)
}
// arguments
if len(os.Args) < 2 || os.Args[1] == "--help" || os.Args[1] == "-h" {
showHelp()
os.Exit(0)
@ -42,6 +62,7 @@ func main() {
var verbose bool = false
var initDirectory bool = false
var logout bool = false
var deleteFullVod bool = false
var forceUpload bool = false
var directory string
@ -65,6 +86,9 @@ func main() {
case "--init":
initDirectory = true
case "--logout":
logout = true
case "-d":
fallthrough
case "--deleteAfter":
@ -85,33 +109,18 @@ func main() {
}
}
// config
cfg, err := config.ReadConfig(config.CONFIG_FILENAME)
if err != nil {
log.Fatalf("Failed to read config: %v", err)
os.Exit(1)
}
if cfg == nil {
err = config.GenerateConfig(config.CONFIG_FILENAME)
// logout (--logout)
if logout {
cfg.Token = nil
err = config.WriteConfig(cfg, config.CONFIG_FILENAME)
if err != nil {
log.Fatalf("Failed to generate config: %v", err)
log.Fatalf("Failed to write config: %v", err)
os.Exit(1)
}
log.Printf(
"New config file created (%s). " +
"Please edit this file before running again!",
config.CONFIG_FILENAME,
)
log.Println("Logged out successfully.")
os.Exit(0)
}
// fetch default tags
yt.DefaultTags, err = yt.GetDefaultTags(path.Join("template", "tags.txt"))
if err != nil {
log.Fatalf("Failed to fetch default tags: %v", err)
os.Exit(1)
}
// initialising directory (--init)
if initDirectory {
err = initialiseDirectory(directory)
@ -127,6 +136,13 @@ func main() {
os.Exit(0)
}
// good to have early on
templates, err := yt.FetchTemplates()
if err != nil {
log.Fatalf("Failed to fetch templates: %v", err)
os.Exit(1)
}
// read directory metadata
metadata, err := scanner.ReadMetadata(directory)
if err != nil {
@ -154,6 +170,8 @@ func main() {
// default footage directory
if len(metadata.FootageDir) == 0 {
metadata.FootageDir = directory
} else if !strings.HasPrefix(metadata.FootageDir, "/") {
metadata.FootageDir = path.Join(directory, metadata.FootageDir)
}
// scan for VOD segments
@ -189,18 +207,21 @@ func main() {
fmt.Printf("\nVideo template: ")
enc.Encode(video)
title, err := yt.BuildTitle(video)
title, err := yt.BuildTemplate(video, templates.Title)
if err != nil {
log.Fatalf("Failed to build video title: %v", err)
os.Exit(1)
}
description, err := yt.BuildDescription(video)
description, err := yt.BuildTemplate(video, templates.Description)
if err != nil {
log.Fatalf("Failed to build video description: %v", err)
os.Exit(1)
}
fmt.Printf(
"\nTITLE: %s\nDESCRIPTION: %s\n",
"\n================================\n" +
"TITLE:\n%s\n\n" +
"DESCRIPTION:\n%s\n" +
"\n================================\n",
title, description,
)
}
@ -244,7 +265,7 @@ func main() {
}
// okay actually upload now!
ytVideo, err := yt.UploadVideo(ctx, tokenSource, video)
ytVideo, err := yt.UploadVideo(ctx, tokenSource, video, templates)
if err != nil {
log.Fatalf("Failed to upload video: %v", err)
os.Exit(1)
@ -277,7 +298,7 @@ func main() {
func initialiseDirectory(directory string) error {
dirInfo, err := os.Stat(directory)
if err != nil {
if err == os.ErrNotExist {
if os.IsNotExist(err) {
return fmt.Errorf("no such directory: %s", directory)
}
return fmt.Errorf("failed to open directory: %v", err)
@ -354,8 +375,5 @@ func generateOAuthToken(
}
wg.Wait()
// TODO: save this token; look into token refresh
log.Printf("Token expires at: %s\n", token.Expiry.Format(time.DateTime))
return token, nil
}