release edit page! + a lot of other stuff oml

Signed-off-by: ari melody <ari@arimelody.me>
This commit is contained in:
ari melody 2024-08-05 01:23:17 +01:00
parent f276ef1ff2
commit 10f19d46db
23 changed files with 981 additions and 347 deletions

View file

@ -76,7 +76,7 @@ func CreateReleaseDB(db *sqlx.DB, release *model.Release) error {
release.Title,
release.Description,
release.ReleaseType,
release.ReleaseDate.Format("2-Jan-2006"),
release.ReleaseDate.Format("2006-01-02 15:04:05"),
release.Artwork,
release.Buyname,
release.Buylink,
@ -91,15 +91,14 @@ func CreateReleaseDB(db *sqlx.DB, release *model.Release) error {
func UpdateReleaseDB(db *sqlx.DB, release *model.Release) error {
_, err := db.Exec(
"UPDATE musicrelease SET "+
"visible=$2, title=$3, description=$4, type=$5, release_date=$6, artwork=$7, buyname=$8, buylink=$9) "+
"VALUES ($2, $3, $4, $5, $6, $7, $8, $9) "+
"visible=$2, title=$3, description=$4, type=$5, release_date=$6, artwork=$7, buyname=$8, buylink=$9 "+
"WHERE id=$1",
release.ID,
release.Visible,
release.Title,
release.Description,
release.ReleaseType,
release.ReleaseDate.Format("2-Jan-2006"),
release.ReleaseDate.Format("2006-01-02 15:04:05"),
release.Artwork,
release.Buyname,
release.Buylink,

View file

@ -2,13 +2,17 @@ package model
type (
Artist struct {
ID string `json:"id"`
ID string `json:"id"`
Name string `json:"name"`
Website string `json:"website"`
Avatar string `json:"avatar"`
}
)
func (artist Artist) GetWebsite() string {
return artist.Website
}
func (artist Artist) GetAvatar() string {
if artist.Avatar == "" {
return "/img/default-avatar.png"

View file

@ -8,18 +8,18 @@ import (
type (
ReleaseType string
Release struct {
ID string `json:"id"`
Visible bool `json:"visible"`
Title string `json:"title"`
Description string `json:"description"`
ReleaseType ReleaseType `json:"type" db:"type"`
ReleaseDate time.Time `json:"releaseDate" db:"release_date"`
Artwork string `json:"artwork"`
Buyname string `json:"buyname"`
Buylink string `json:"buylink"`
Links []*Link `json:"links"`
Credits []*Credit `json:"credits"`
Tracks []*Track `json:"tracks"`
ID string `json:"id"`
Visible bool `json:"visible"`
Title string `json:"title"`
Description string `json:"description"`
ReleaseType ReleaseType `json:"type" db:"type"`
ReleaseDate time.Time `json:"releaseDate" db:"release_date"`
Artwork string `json:"artwork"`
Buyname string `json:"buyname"`
Buylink string `json:"buylink"`
Links []*Link `json:"links"`
Credits []*Credit `json:"credits"`
Tracks []*Track `json:"tracks"`
}
)
@ -32,11 +32,8 @@ const (
// GETTERS
func (release Release) GetArtwork() string {
if release.Artwork == "" {
return "/img/default-cover-art.png"
}
return release.Artwork
func (release Release) TextReleaseDate() string {
return release.ReleaseDate.Format("2006-01-02T15:04")
}
func (release Release) PrintReleaseDate() string {
@ -47,6 +44,13 @@ func (release Release) GetReleaseYear() int {
return release.ReleaseDate.Year()
}
func (release Release) GetArtwork() string {
if release.Artwork == "" {
return "/img/default-cover-art.png"
}
return release.Artwork
}
func (release Release) IsSingle() bool {
return len(release.Tracks) == 1;
}

View file

@ -12,6 +12,19 @@ import (
"arimelody.me/arimelody.me/music/model"
)
type (
gatewayTrack struct {
*model.Track
Lyrics template.HTML
Number int
}
gatewayRelease struct {
*model.Release
Tracks []gatewayTrack
}
)
// HTTP HANDLERS
func ServeRelease() http.Handler {
@ -51,19 +64,6 @@ func ServeGateway() http.Handler {
return
}
type (
GatewayTrack struct {
*model.Track
Lyrics template.HTML
Number int
}
GatewayRelease struct {
*model.Release
Tracks []GatewayTrack
}
)
id := r.URL.Path[1:]
release := global.GetRelease(id)
if release == nil {
@ -71,9 +71,9 @@ func ServeGateway() http.Handler {
return
}
tracks := []GatewayTrack{}
tracks := []gatewayTrack{}
for i, track := range release.Tracks {
tracks = append([]GatewayTrack{GatewayTrack{
tracks = append([]gatewayTrack{{
Track: track,
Lyrics: template.HTML(strings.Replace(track.Lyrics, "\n", "<br>", -1)),
Number: len(release.Tracks) - i,
@ -87,9 +87,9 @@ func ServeGateway() http.Handler {
return
}
lrw := global.LoggingResponseWriter{w, http.StatusOK}
lrw := global.LoggingResponseWriter{ResponseWriter: w, Code: http.StatusOK}
global.ServeTemplate("music-gateway.html", GatewayRelease{release, tracks}).ServeHTTP(&lrw, r)
global.ServeTemplate("music-gateway.html", gatewayRelease{release, tracks}).ServeHTTP(&lrw, r)
if lrw.Code != http.StatusOK {
fmt.Printf("Error rendering music gateway for %s\n", id)