update README, lots of polish
This commit is contained in:
parent
4624c56e54
commit
ce836b2d46
11 changed files with 210 additions and 121 deletions
86
main.go
86
main.go
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue