GoGronkh/gparser/cli.go

173 lines
5.6 KiB
Go

package main
import (
"os"
"log"
"time"
"flag"
"github.com/ChannelMeter/iso8601duration"
"git.1750studios.com/gronkhDE/gogronkh/config"
"git.1750studios.com/gronkhDE/gogronkh/database"
"git.1750studios.com/gronkhDE/gogronkh/image"
"git.1750studios.com/gronkhDE/gogronkh/youtube"
)
var mode string
var slug string
var name string
var aslug string
var youtubeid string
var poster string
var newslug string
var oldslug string
var newseason int64
func InitCli() {
flag.StringVar(&mode, "mode", "null", "Specifies the action to be done. Can be add_lt, merge_lps, change_poster, rename_lp, single_parse, rename_lps_regex")
// For add_lt
flag.StringVar(&slug, "slug", "null", "Slug as it would be on gronkh.de")
flag.StringVar(&name, "name", "null", "Name as it would be on gronkh.de")
flag.StringVar(&aslug, "author", "null", "Author slug")
flag.StringVar(&youtubeid, "youtube", "null", "YouTube ID of the video")
flag.StringVar(&poster, "poster", "null", "Poster URL that should be used")
// For merge_lps
flag.StringVar(&newslug, "newslug", "null", "Slug of the final LP")
flag.StringVar(&oldslug, "oldslug", "null", "Current slug of LP to be merged")
flag.Int64Var(&newseason, "newseason", -1, "Season the episodes of the old LP will become")
}
func DoCli() {
flag.Parse()
if mode != "null" {
if mode == "add_lt" {
if (slug == "null" || name == "null" || aslug == "null" || youtubeid == "null" || poster == "null") {
log.Fatalf("slug, name, author, youtube, poster must be specified")
}
ParseCliLT()
} else if mode == "merge_lps" {
if (oldslug == "null" || newslug == "null" || newseason == -1) {
log.Fatalf("oldslug, newslug, newseason must be specified")
}
MergeLPs()
} else if mode == "change_poster" {
if (slug == "null" || poster == "null") {
log.Fatalf("slug, poster must be specified")
}
ChangePoster()
} else if mode == "rename_lp" {
if (slug == "null" || name == "null") {
log.Fatalf("slug, name must be specified")
}
RenameLP()
} else if mode == "single_parse" {
ParseAll()
} else if mode == "rename_lps_regex" {
RenameLPsRegEx()
}
os.Exit(0)
}
}
func ParseCliLT() {
var err error
var LT database.LetsTest
LT.Slug.String = slug
LT.Name.String = name
LT.PosterS.String, LT.PosterB.String, err = image.ResizeCover(poster)
if err != nil {
log.Printf("WAR LT %s: Error resizing cover: %+v", slug, err)
}
var AT database.Author
database.Db.Where("slug = ?", aslug).First(&AT)
LT.AuthorID = AT.ID
LT.Youtube.String = youtubeid
ytres, err := youtube.GetVideos([]string {"snippet", "statistics", "status", "contentDetails"}, []string {LT.Youtube.String}, config.C.YoutubeKey)
if err != nil || len(ytres.Items) == 0 || ytres.Items[0].Status.UploadStatus != "processed" {
log.Printf("ERR LT %s: Video %s is private (%+v)", slug, LT.Youtube.String, err)
return
}
LT.Descr.String = ytres.Items[0].Snippet.Description
if thumb, ok := ytres.Items[0].Snippet.Thumbnails["maxres"]; ok {
LT.ThumbS.String, LT.ThumbB.String, err = image.ResizeThumb(thumb.Url)
} else if thumb, ok := ytres.Items[0].Snippet.Thumbnails["high"]; ok {
LT.ThumbS.String, LT.ThumbB.String, err = image.ResizeThumb(thumb.Url)
}
if err != nil {
log.Printf("WAR LT %s: Error resizing thumbnail: %+v", slug, err)
}
LT.Aired, err = time.Parse(time.RFC3339Nano, ytres.Items[0].Snippet.PublishedAt)
if err != nil {
log.Printf("ERR LT %s: Failed to parse aired", slug)
return
}
dur, err := duration.FromString(ytres.Items[0].ContentDetails.Duration)
if err == nil {
LT.Duration.Int64 = int64(dur.ToDuration().Seconds())
} else {
log.Printf("ERR LT %s: Failed to parse duration", slug)
return
}
LT.Rating.Float64, LT.Votes.Int64 = youtube.GetRatingAndVotesWithRes(ytres)
if err := database.Db.Create(&LT).Error; err != nil {
log.Printf("ERR LT %s: Could not be added to databse (%+v)", slug, err)
}
}
func MergeLPs() {
var OldLP database.LetsPlay
var NewLP database.LetsPlay
database.Db.Where("slug = ?", oldslug).First(&OldLP)
database.Db.Where("slug = ?", newslug).First(&NewLP)
database.Db.Exec("UPDATE episodes SET season=? WHERE lets_play_id = ?", newseason, OldLP.ID)
database.Db.Exec("UPDATE episodes SET lets_play_id=? WHERE lets_play_id = ?", NewLP.ID, OldLP.ID)
database.Db.Exec("UPDATE lets_plays SET aired=NULL WHERE id = ?", OldLP.ID)
OldLP.MergeID.Int64 = int64(NewLP.ID)
OldLP.MergeSeason.Int64 = newseason
OldLP.Aired = time.Time{}
database.Db.Save(&OldLP)
}
func ChangePoster() {
var err error
var LP database.LetsPlay
database.Db.Where("slug=?", slug).First(&LP)
LP.PosterS.String, LP.PosterB.String, err = image.ResizeCover(poster)
if err != nil {
log.Printf("WAR LP %s: Error resizing cover: %+v", slug, err)
}
database.Db.Save(&LP)
}
func RenameLP() {
var LP database.LetsPlay
database.Db.Where("slug=?", slug).First(&LP)
LP.Name.String = name
database.Db.Save(&LP)
}
func RenameLPsRegEx() {
var LPs []database.LetsPlay
database.Db.Find(&LPs)
for _, LP := range LPs {
LP.Name.String = lpRenameRegex.ReplaceAllString(LP.Name.String, "")
database.Db.Save(&LP)
}
}