2016-02-27 15:13:07 +00:00
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
2016-02-27 22:10:00 +00:00
var newslug string
var oldslug string
var newseason int64
2016-02-27 15:13:07 +00:00
func InitCli ( ) {
2016-02-28 21:38:23 +00:00
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" )
2016-02-27 15:13:07 +00:00
// For add_lt
2016-02-28 15:31:27 +00:00
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" )
2016-02-27 22:10:00 +00:00
// For merge_lps
2016-02-28 15:31:27 +00:00
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" )
2016-02-27 15:13:07 +00:00
}
func DoCli ( ) {
flag . Parse ( )
2016-02-28 15:31:27 +00:00
if mode != "null" {
2016-02-27 15:13:07 +00:00
if mode == "add_lt" {
2016-02-28 15:31:27 +00:00
if ( slug == "null" || name == "null" || aslug == "null" || youtubeid == "null" || poster == "null" ) {
2016-02-27 15:13:07 +00:00
log . Fatalf ( "slug, name, author, youtube, poster must be specified" )
}
ParseCliLT ( )
} else if mode == "merge_lps" {
2016-02-28 15:31:27 +00:00
if ( oldslug == "null" || newslug == "null" || newseason == - 1 ) {
2016-02-27 22:10:00 +00:00
log . Fatalf ( "oldslug, newslug, newseason must be specified" )
}
MergeLPs ( )
2016-02-28 16:52:36 +00:00
} 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 ( )
2016-02-28 21:25:21 +00:00
} else if mode == "single_parse" {
ParseAll ( )
2016-02-28 21:38:23 +00:00
} else if mode == "rename_lps_regex" {
RenameLPsRegEx ( )
2016-02-27 15:13:07 +00:00
}
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 )
}
2016-02-27 22:10:00 +00:00
}
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 )
2016-02-28 14:39:37 +00:00
database . Db . Exec ( "UPDATE lets_plays SET aired=NULL WHERE id = ?" , OldLP . ID )
2016-02-27 22:10:00 +00:00
OldLP . MergeID . Int64 = int64 ( NewLP . ID )
OldLP . MergeSeason . Int64 = newseason
2016-02-28 14:39:37 +00:00
OldLP . Aired = time . Time { }
2016-02-27 22:10:00 +00:00
database . Db . Save ( & OldLP )
2016-02-28 16:52:36 +00:00
}
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 )
}
2016-02-28 21:38:23 +00:00
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 )
}
}