package music import ( "arimelody-web/admin/templates" "arimelody-web/controller" "arimelody-web/model" "fmt" "net/http" "os" ) func Handler(app *model.AppState) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Println(r.URL.Path) mux := http.NewServeMux() mux.Handle("/release/", http.StripPrefix("/release", serveRelease(app))) mux.Handle("/artist/", http.StripPrefix("/artist", serveArtist(app))) mux.Handle("/track/", http.StripPrefix("/track", serveTrack(app))) mux.Handle("/", musicHandler(app)) mux.ServeHTTP(w, r) }) } func musicHandler(app *model.AppState) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { session := r.Context().Value("session").(*model.Session) releases, err := controller.GetAllReleases(app.DB, false, 0, true) if err != nil { fmt.Fprintf(os.Stderr, "WARN: Failed to pull releases: %s\n", err) http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } artists, err := controller.GetAllArtists(app.DB) if err != nil { fmt.Fprintf(os.Stderr, "WARN: Failed to pull artists: %s\n", err) http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } tracks, err := controller.GetOrphanTracks(app.DB) if err != nil { fmt.Fprintf(os.Stderr, "WARN: Failed to pull orphan tracks: %s\n", err) http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } type MusicData struct { Session *model.Session Releases []*model.Release Artists []*model.Artist Tracks []*model.Track } err = templates.MusicTemplate.Execute(w, MusicData{ Session: session, Releases: releases, Artists: artists, Tracks: tracks, }) if err != nil { fmt.Fprintf(os.Stderr, "WARN: Failed to render admin index: %s\n", err) http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } }) }