diff --git a/database/database.go b/database/database.go
index 8daca90..8e582a3 100644
--- a/database/database.go
+++ b/database/database.go
@@ -43,6 +43,9 @@ type LetsPlay struct {
PosterB sql.NullString
Aired time.Time `sql:"default:null"`
+ MergeID sql.NullInt64
+ MergeSeason sql.NullInt64
+
Episodes []Episode
}
@@ -79,7 +82,6 @@ type Episode struct {
Slug sql.NullString `sql:"not null;unique_index"`
Name sql.NullString `sql:"not null"`
- Season sql.NullInt64 `sql:"not null"`
Episode sql.NullInt64 `sql:"not null"`
ThumbS sql.NullString
ThumbB sql.NullString
@@ -89,6 +91,7 @@ type Episode struct {
Rating sql.NullFloat64
Votes sql.NullInt64
Duration sql.NullInt64
+ Season sql.NullInt64 `sql:"not null;default:1"`
}
var Db gorm.DB
@@ -102,6 +105,11 @@ func InitDb(connection string) (error) {
}
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{})
return err
@@ -168,6 +176,16 @@ func (l *LetsPlay) BeforeSave() (err error) {
} else {
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
}
diff --git a/gparser/cli.go b/gparser/cli.go
index 0310027..4523b91 100644
--- a/gparser/cli.go
+++ b/gparser/cli.go
@@ -22,6 +22,10 @@ var aslug string
var youtubeid string
var poster string
+var newslug string
+var oldslug string
+var newseason int64
+
func InitCli() {
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(&youtubeid, "youtube", "", "YouTube ID of the video")
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() {
@@ -43,7 +52,10 @@ func DoCli() {
}
ParseCliLT()
} else if mode == "merge_lps" {
-
+ if (oldslug == "" || newslug == "" || newseason == 0) {
+ log.Fatalf("oldslug, newslug, newseason must be specified")
+ }
+ MergeLPs()
}
os.Exit(0)
}
@@ -100,4 +112,19 @@ func ParseCliLT() {
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)
+
+ OldLP.MergeID.Int64 = int64(NewLP.ID)
+ OldLP.MergeSeason.Int64 = newseason
+
+ database.Db.Save(&OldLP)
}
\ No newline at end of file
diff --git a/gparser/episodeparser.go b/gparser/episodeparser.go
index 3920bab..36a9b34 100644
--- a/gparser/episodeparser.go
+++ b/gparser/episodeparser.go
@@ -69,7 +69,13 @@ func ParseEpisode(i int, s *goquery.Selection) {
ur, _ = url.Parse(u)
var LP database.LetsPlay
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)
if err != nil {
log.Printf("ERR EP %s: Request failed (%+v)", slug, err)
diff --git a/gparser/feedparser.go b/gparser/feedparser.go
index 4160c67..038453e 100644
--- a/gparser/feedparser.go
+++ b/gparser/feedparser.go
@@ -83,7 +83,13 @@ func ParseFeedEpisode(u string) {
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)
if err != nil {
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)
EP.Episode.Int64 = 0
}
- EP.Season.Int64 = 1
doc.Find(".article > p").Each(func(i int, s *goquery.Selection) {
EP.Descr.String += s.Text() + "\n"
})
diff --git a/gserver/admin.go b/gserver/admin.go
index 4e5e5d6..47b1449 100644
--- a/gserver/admin.go
+++ b/gserver/admin.go
@@ -70,6 +70,12 @@ func PostAdminLetsPlay(c *gin.Context) {
if id, err := strconv.ParseUint(c.PostForm("authorid"), 10, 0); err == nil {
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.Name.String = c.PostForm("name")
if c.PostForm("posters") == "" && !strings.HasPrefix(c.PostForm("posterb"), "/") {
diff --git a/gserver/templates/admin_lp.html b/gserver/templates/admin_lp.html
index 6ecbf45..a164873 100644
--- a/gserver/templates/admin_lp.html
+++ b/gserver/templates/admin_lp.html
@@ -9,6 +9,12 @@
+
+
diff --git a/gserver/webapp.go b/gserver/webapp.go
index 25b5c00..823e2e7 100644
--- a/gserver/webapp.go
+++ b/gserver/webapp.go
@@ -31,7 +31,7 @@ func GetIndex(c *gin.Context) {
func GetLps(c *gin.Context) {
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
for _, LP := range LPs {
var AT database.Author
@@ -235,7 +235,7 @@ func GetLEpisode(c *gin.Context) {
//No EP in URL
var EPs []database.Episode
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)
var DEP []gin.H
for _, EP := range EPs {