GoGronkh/gserver/webapp.go
Andreas Mieke d473ba437c Changing image file format to jpg
* Also changing sizes to be Kodi compatible
* Small improvements to keep the templates Retina compatible
with new picture sizes.
2015-09-26 12:55:12 +02:00

200 lines
7.4 KiB
Go

package main
import (
"html/template"
"strings"
"net/http"
. "git.1750studios.com/gronkhDE/gogronkh/gserver/utlis"
"git.1750studios.com/gronkhDE/gogronkh/database"
"github.com/gin-gonic/gin"
)
func GetIndex(c *gin.Context) {
var EPs []database.Episode
database.Db.Order("aired desc").Limit(50).Find(&EPs)
var data []gin.H
for _, EP := range EPs {
var LP database.LetsPlay
var AT database.Author
database.Db.Model(&EP).Related(&LP).Related(&AT)
data = append(data, gin.H{"EP": EP, "LP": LP, "AT": AT})
}
c.HTML(http.StatusOK, "index.html", gin.H{
"title": "Neue Episoden",
"data": data,
})
}
func GetLps(c *gin.Context) {
var LPs []database.LetsPlay
database.Db.Order("name asc").Find(&LPs)
var data []gin.H
for _, LP := range LPs {
var AT database.Author
database.Db.Model(&LP).Related(&AT)
data = append(data, gin.H{"LP": LP, "AT": AT})
}
c.HTML(http.StatusOK, "lps.html", gin.H{
"title": "Let's Plays",
"data": data,
})
}
func GetLt(c *gin.Context) {
if tslug, ok := CleanParam(c.Param("tslug")); ok {
//LT in URL
var LT database.LetsTest
if database.Db.Where("slug = ?", tslug).First(&LT).Error == nil {
//LT found
var AT database.Author
database.Db.Model(&LT).Related(&AT)
LT.Descr.String = descRegEx.ReplaceAllString(LT.Descr.String, "<hr />")
LT.Descr.String = strings.Replace(LT.Descr.String, "\n", "<br />", -1)
c.HTML(http.StatusOK, "lt.html", gin.H{
"title": LT.Name.String,
"data": gin.H{"LT": LT, "AT": AT, "DESC": template.HTML(LT.Descr.String)},
})
} else {
//LT not found
c.AbortWithStatus(404)
}
} else {
var LTs []database.LetsTest
database.Db.Order("name asc").Find(&LTs)
var data []gin.H
for _, LT := range LTs {
var AT database.Author
database.Db.Model(&LT).Related(&AT)
data = append(data, gin.H{"LT": LT, "AT": AT})
}
c.HTML(http.StatusOK, "lts.html", gin.H{
"title": "Let's Tests",
"data": data,
})
}
}
func GetAt(c *gin.Context) {
if aslug, ok := CleanParam(c.Param("aslug")); ok {
//AT in URL
var AT database.Author
if database.Db.Where("slug = ?", aslug).First(&AT).Error == nil {
//AT found
var LPs []database.LetsPlay
var LTs []database.LetsTest
var EPs []database.Episode
var DEPs []gin.H
database.Db.Model(&AT).Limit(5).Order("aired desc").Related(&LPs).Related(&LTs).Related(&EPs)
for _, EP := range EPs {
var ELP database.LetsPlay
database.Db.Model(&EP).Related(&ELP)
DEPs = append(DEPs, gin.H{"LP": ELP, "EP": EP})
}
var data gin.H = gin.H{"AT": AT, "LPs": LPs, "LTs": LTs, "EPs": DEPs,}
c.HTML(http.StatusOK, "at.html", gin.H{
"title": AT.Name.String,
"data": data,
})
} else {
//LT not found
c.AbortWithStatus(404)
}
} else {
var ATs []database.Author
var data []gin.H
database.Db.Order("name asc").Find(&ATs)
for _, AT := range ATs {
data = append(data, gin.H{"AT": AT})
}
c.HTML(http.StatusOK, "ats.html", gin.H{
"title": "Sprecher",
"data": data,
})
}
}
func GetLEpisode(c *gin.Context) {
if lslug, ok := CleanParam(c.Param("lslug")); ok {
//LP in URL
var LP database.LetsPlay
if database.Db.Where("slug = ?", lslug).First(&LP).Error == nil {
//LP found
if eslug, ok := CleanParam(c.Param("eslug")); ok {
//EP in URL
var EP database.Episode
var AT database.Author
if database.Db.Where("slug = ?", eslug).First(&EP).Error == nil {
database.Db.Model(&EP).Related(&AT)
EP.Descr.String = descRegEx.ReplaceAllString(EP.Descr.String, "<hr />")
EP.Descr.String = strings.Replace(EP.Descr.String, "\n", "<br />", -1)
var next database.Episode
var previous database.Episode
database.Db.Where("aired::date > ?::date and lets_play_id = ?", EP.Aired, EP.LetsPlayID).Order("aired asc").First(&next)
database.Db.Where("aired::date < ?::date and lets_play_id = ?", EP.Aired, EP.LetsPlayID).Order("aired desc").First(&previous)
c.HTML(http.StatusOK, "episode.html", gin.H{
"title": EP.Name.String,
"data": gin.H{"EP": EP, "LP": LP, "AT": AT, "DESC": template.HTML(EP.Descr.String), "NEXT": next, "PREV": previous},
})
} else {
//EP not found
var EPs []database.Episode
var AT database.Author
database.Db.Model(&LP).Order("episode asc").Related(&EPs)
database.Db.Model(&LP).Related(&AT)
var DEP []gin.H
for _, EP := range EPs {
if len(EP.Descr.String) >= 230 {
ints := []rune(EP.Descr.String)
EP.Descr.String = string(ints[:230]) + "…"
}
DEP = append(DEP, gin.H{"EP": EP, "LP": LP,})
}
var data gin.H = gin.H{"LP": LP, "AT": AT, "EPs": DEP}
c.HTML(http.StatusNotFound, "lp.html", gin.H{
"title": LP.Name.String,
"data": data,
"message": Message{Type: "alert", String: "Fehler 404: Episode nicht gefunden!"},
})
}
} else {
//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).Related(&AT)
var DEP []gin.H
for _, EP := range EPs {
if len(EP.Descr.String) >= 230 {
ints := []rune(EP.Descr.String)
EP.Descr.String = string(ints[:230]) + "…"
}
DEP = append(DEP, gin.H{"EP": EP, "LP": LP,})
}
var data gin.H = gin.H{"LP": LP, "AT": AT, "EPs": DEP}
c.HTML(http.StatusOK, "lp.html", gin.H{
"title": LP.Name.String,
"data": data,
})
}
} else {
if eslug, ok := CleanParam(c.Param("eslug")); ok {
var EP database.Episode
var LP database.LetsPlay
if database.Db.Where("slug = ?", eslug).First(&EP).Error == nil {
database.Db.Model(&EP).Related(&LP)
c.Redirect(301, "/lets-play/" + LP.Slug.String + "/" + EP.Slug.String)
} else {
c.AbortWithStatus(404)
}
} else {
c.AbortWithStatus(404)
}
}
}
}