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(<).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) } }