Adding way to merge LPs

This commit is contained in:
Andreas Mieke 2016-02-27 23:10:00 +01:00
parent a1e2b5e683
commit bc76465c82
7 changed files with 75 additions and 7 deletions

View file

@ -43,6 +43,9 @@ type LetsPlay struct {
PosterB sql.NullString PosterB sql.NullString
Aired time.Time `sql:"default:null"` Aired time.Time `sql:"default:null"`
MergeID sql.NullInt64
MergeSeason sql.NullInt64
Episodes []Episode Episodes []Episode
} }
@ -79,7 +82,6 @@ type Episode struct {
Slug sql.NullString `sql:"not null;unique_index"` Slug sql.NullString `sql:"not null;unique_index"`
Name sql.NullString `sql:"not null"` Name sql.NullString `sql:"not null"`
Season sql.NullInt64 `sql:"not null"`
Episode sql.NullInt64 `sql:"not null"` Episode sql.NullInt64 `sql:"not null"`
ThumbS sql.NullString ThumbS sql.NullString
ThumbB sql.NullString ThumbB sql.NullString
@ -89,6 +91,7 @@ type Episode struct {
Rating sql.NullFloat64 Rating sql.NullFloat64
Votes sql.NullInt64 Votes sql.NullInt64
Duration sql.NullInt64 Duration sql.NullInt64
Season sql.NullInt64 `sql:"not null;default:1"`
} }
var Db gorm.DB var Db gorm.DB
@ -102,6 +105,11 @@ func InitDb(connection string) (error) {
} }
Db.LogMode(false) Db.LogMode(false)
Db.Model(&LetsPlay{}).AddForeignKey("author_id", "authors(id)", "RESTRICT", "RESTRICT")
Db.Model(&LetsTest{}).AddForeignKey("author_id", "authors(id)", "RESTRICT", "RESTRICT")
Db.Model(&Episode{}).AddForeignKey("author_id", "authors(id)", "RESTRICT", "RESTRICT")
Db.Model(&Episode{}).AddForeignKey("lets_play_id", "lets_plays(id)", "RESTRICT", "RESTRICT")
Db.AutoMigrate(&Author{}, &LetsPlay{}, &LetsTest{}, &Episode{}) Db.AutoMigrate(&Author{}, &LetsPlay{}, &LetsTest{}, &Episode{})
return err return err
@ -168,6 +176,16 @@ func (l *LetsPlay) BeforeSave() (err error) {
} else { } else {
l.PosterB.Valid = true l.PosterB.Valid = true
} }
if l.MergeID.Int64 == 0 {
l.MergeID.Valid = false
} else {
l.MergeID.Valid = true
}
if l.MergeSeason.Int64 == 0 {
l.MergeSeason.Valid = false
} else {
l.MergeSeason.Valid = true
}
return return
} }

View file

@ -22,6 +22,10 @@ var aslug string
var youtubeid string var youtubeid string
var poster string var poster string
var newslug string
var oldslug string
var newseason int64
func InitCli() { func InitCli() {
flag.StringVar(&mode, "mode", "", "Specifies the action to be done. Can be add_lt and merge_lps") flag.StringVar(&mode, "mode", "", "Specifies the action to be done. Can be add_lt and merge_lps")
@ -31,6 +35,11 @@ func InitCli() {
flag.StringVar(&aslug, "author", "", "Author slug") flag.StringVar(&aslug, "author", "", "Author slug")
flag.StringVar(&youtubeid, "youtube", "", "YouTube ID of the video") flag.StringVar(&youtubeid, "youtube", "", "YouTube ID of the video")
flag.StringVar(&poster, "poster", "", "Poster URL that should be used") flag.StringVar(&poster, "poster", "", "Poster URL that should be used")
// For merge_lps
flag.StringVar(&newslug, "newslug", "", "Slug of the final LP")
flag.StringVar(&oldslug, "oldslug", "", "Current slug of LP to be merged")
flag.Int64Var(&newseason, "newseason", 0, "Season the episodes of the old LP will become")
} }
func DoCli() { func DoCli() {
@ -43,7 +52,10 @@ func DoCli() {
} }
ParseCliLT() ParseCliLT()
} else if mode == "merge_lps" { } else if mode == "merge_lps" {
if (oldslug == "" || newslug == "" || newseason == 0) {
log.Fatalf("oldslug, newslug, newseason must be specified")
}
MergeLPs()
} }
os.Exit(0) os.Exit(0)
} }
@ -101,3 +113,18 @@ func ParseCliLT() {
log.Printf("ERR LT %s: Could not be added to databse (%+v)", slug, err) 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)
OldLP.MergeID.Int64 = int64(NewLP.ID)
OldLP.MergeSeason.Int64 = newseason
database.Db.Save(&OldLP)
}

View file

@ -69,7 +69,13 @@ func ParseEpisode(i int, s *goquery.Selection) {
ur, _ = url.Parse(u) ur, _ = url.Parse(u)
var LP database.LetsPlay var LP database.LetsPlay
database.Db.Where("slug = ?", path.Base(ur.Path)).First(&LP) database.Db.Where("slug = ?", path.Base(ur.Path)).First(&LP)
EP.LetsPlayID = LP.ID if LP.MergeID.Valid == false {
EP.LetsPlayID = LP.ID
EP.Season.Int64 = 1
} else {
EP.LetsPlayID = uint(LP.MergeID.Int64)
EP.Season.Int64 = LP.MergeSeason.Int64
}
res, err := GetHTTPResource(gu) res, err := GetHTTPResource(gu)
if err != nil { if err != nil {
log.Printf("ERR EP %s: Request failed (%+v)", slug, err) log.Printf("ERR EP %s: Request failed (%+v)", slug, err)

View file

@ -83,7 +83,13 @@ func ParseFeedEpisode(u string) {
return return
} }
} }
EP.LetsPlayID = LP.ID if LP.MergeID.Valid == false {
EP.LetsPlayID = LP.ID
EP.Season.Int64 = 1
} else {
EP.LetsPlayID = uint(LP.MergeID.Int64)
EP.Season.Int64 = LP.MergeSeason.Int64
}
res, err := GetHTTPResource(u) res, err := GetHTTPResource(u)
if err != nil { if err != nil {
log.Printf("ERR RS %s: Request failed (%+v)", slug, err) log.Printf("ERR RS %s: Request failed (%+v)", slug, err)
@ -106,7 +112,6 @@ func ParseFeedEpisode(u string) {
log.Printf("WAR RSS %s: Name does not match RegEx", slug) log.Printf("WAR RSS %s: Name does not match RegEx", slug)
EP.Episode.Int64 = 0 EP.Episode.Int64 = 0
} }
EP.Season.Int64 = 1
doc.Find(".article > p").Each(func(i int, s *goquery.Selection) { doc.Find(".article > p").Each(func(i int, s *goquery.Selection) {
EP.Descr.String += s.Text() + "\n" EP.Descr.String += s.Text() + "\n"
}) })

View file

@ -70,6 +70,12 @@ func PostAdminLetsPlay(c *gin.Context) {
if id, err := strconv.ParseUint(c.PostForm("authorid"), 10, 0); err == nil { if id, err := strconv.ParseUint(c.PostForm("authorid"), 10, 0); err == nil {
LP.AuthorID = uint(id) LP.AuthorID = uint(id)
} }
if mergeid, err := strconv.ParseUint(c.PostForm("mergeid"), 10, 0); err == nil {
LP.MergeID.Int64 = int64(mergeid)
}
if mergeseason, err := strconv.ParseUint(c.PostForm("mergeseason"), 10, 0); err == nil {
LP.MergeSeason.Int64 = int64(mergeseason)
}
LP.Slug.String = c.PostForm("slug") LP.Slug.String = c.PostForm("slug")
LP.Name.String = c.PostForm("name") LP.Name.String = c.PostForm("name")
if c.PostForm("posters") == "" && !strings.HasPrefix(c.PostForm("posterb"), "/") { if c.PostForm("posters") == "" && !strings.HasPrefix(c.PostForm("posterb"), "/") {

View file

@ -9,6 +9,12 @@
<label> <label>
AuthorID <input type="text" name="authorid" value="{{ .LP.AuthorID }}"> AuthorID <input type="text" name="authorid" value="{{ .LP.AuthorID }}">
</label> </label>
<label>
MergeID <input type="text" name="mergeid" value="{{ .LP.MergeID.Int64 }}">
</label>
<label>
MergeSeason <input type="text" name="mergeseason" value="{{ .LP.MergeSeason.Int64 }}">
</label>
<label> <label>
Slug <input type="text" name="slug" value="{{ .LP.Slug.String }}"> Slug <input type="text" name="slug" value="{{ .LP.Slug.String }}">
</label> </label>

View file

@ -31,7 +31,7 @@ func GetIndex(c *gin.Context) {
func GetLps(c *gin.Context) { func GetLps(c *gin.Context) {
var LPs []database.LetsPlay var LPs []database.LetsPlay
database.Db.Where("aired IS NOT NULL").Order("name asc").Find(&LPs) database.Db.Where("aired IS NOT NULL and merge_id IS NULL").Order("name asc").Find(&LPs)
var data []gin.H var data []gin.H
for _, LP := range LPs { for _, LP := range LPs {
var AT database.Author var AT database.Author
@ -235,7 +235,7 @@ func GetLEpisode(c *gin.Context) {
//No EP in URL //No EP in URL
var EPs []database.Episode var EPs []database.Episode
var AT database.Author var AT database.Author
database.Db.Model(&LP).Order("episode asc").Related(&EPs) database.Db.Model(&LP).Order("season asc").Order("episode asc").Related(&EPs)
database.Db.Model(&LP).Related(&AT) database.Db.Model(&LP).Related(&AT)
var DEP []gin.H var DEP []gin.H
for _, EP := range EPs { for _, EP := range EPs {