full release edit capabilities oh my goodness gracious

Signed-off-by: ari melody <ari@arimelody.me>
This commit is contained in:
ari melody 2024-08-31 01:30:30 +01:00
parent 34cddcfdb2
commit 604e2a4a7c
25 changed files with 1043 additions and 202 deletions

View file

@ -45,6 +45,18 @@ func serveRelease() http.Handler {
case "newcredit":
serveNewCredit().ServeHTTP(w, r)
return
case "editlinks":
serveEditLinks(release).ServeHTTP(w, r)
return
case "edittracks":
serveEditTracks(release).ServeHTTP(w, r)
return
case "addtrack":
serveAddTrack(release).ServeHTTP(w, r)
return
case "newtrack":
serveNewTrack(release).ServeHTTP(w, r)
return
}
http.NotFound(w, r)
return
@ -52,11 +64,11 @@ func serveRelease() http.Handler {
tracks := []gatewayTrack{}
for i, track := range release.Tracks {
tracks = append([]gatewayTrack{{
tracks = append(tracks, gatewayTrack{
Track: track,
Lyrics: template.HTML(strings.Replace(track.Lyrics, "\n", "<br>", -1)),
Number: len(release.Tracks) - i,
}}, tracks...)
Number: i + 1,
})
}
lrw := global.LoggingResponseWriter{ResponseWriter: w, Code: http.StatusOK}
@ -121,3 +133,84 @@ func serveNewCredit() http.Handler {
return
})
}
func serveEditLinks(release *model.Release) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/html")
serveComponent(path.Join("links", "editlinks.html"), release).ServeHTTP(w, r)
return
})
}
func serveEditTracks(release *model.Release) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/html")
type Track struct {
*model.Track
Number int
}
type Release struct {
*model.Release
Tracks []Track
}
var data = Release{ release, []Track{} }
for i, track := range release.Tracks {
data.Tracks = append(data.Tracks, Track{track, i + 1})
}
serveComponent(path.Join("tracks", "edittracks.html"), data).ServeHTTP(w, r)
return
})
}
func serveAddTrack(release *model.Release) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
var tracks = []*model.Track{}
for _, track := range global.Tracks {
var exists = false
for _, t := range release.Tracks {
if t == track {
exists = true
break
}
}
if !exists {
tracks = append(tracks, track)
}
}
type response struct {
ReleaseID string;
Tracks []*model.Track
}
w.Header().Set("Content-Type", "text/html")
serveComponent(path.Join("tracks", "addtrack.html"), response{
ReleaseID: release.ID,
Tracks: tracks,
}).ServeHTTP(w, r)
return
})
}
func serveNewTrack(release *model.Release) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
track := global.GetTrack(strings.Split(r.URL.Path, "/")[3])
if track == nil {
http.NotFound(w, r)
return
}
type Track struct {
*model.Track
Number int
}
w.Header().Set("Content-Type", "text/html")
serveComponent(path.Join("tracks", "newtrack.html"), Track{
track,
len(release.Tracks) + 1,
}).ServeHTTP(w, r)
return
})
}