107 lines
2.5 KiB
Go
107 lines
2.5 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"fmt"
|
||
|
"io/ioutil"
|
||
|
"net/http"
|
||
|
"sort"
|
||
|
"strconv"
|
||
|
|
||
|
"github.com/gin-gonic/gin"
|
||
|
"github.com/osuripple/cheesegull/models"
|
||
|
)
|
||
|
|
||
|
type beatmapPageData struct {
|
||
|
baseTemplateData
|
||
|
|
||
|
Found bool
|
||
|
Beatmap models.Beatmap
|
||
|
Beatmapset models.Set
|
||
|
SetJSON string
|
||
|
}
|
||
|
|
||
|
func beatmapInfo(c *gin.Context) {
|
||
|
data := new(beatmapPageData)
|
||
|
defer resp(c, 200, "beatmap.html", data)
|
||
|
|
||
|
b := c.Param("bid")
|
||
|
if _, err := strconv.Atoi(b); err != nil {
|
||
|
c.Error(err)
|
||
|
} else {
|
||
|
data.Beatmap, err = getBeatmapData(b)
|
||
|
if err != nil {
|
||
|
c.Error(err)
|
||
|
return
|
||
|
}
|
||
|
data.Beatmapset, err = getBeatmapSetData(data.Beatmap)
|
||
|
if err != nil {
|
||
|
c.Error(err)
|
||
|
return
|
||
|
}
|
||
|
sort.Slice(data.Beatmapset.ChildrenBeatmaps, func(i, j int) bool {
|
||
|
if data.Beatmapset.ChildrenBeatmaps[i].Mode != data.Beatmapset.ChildrenBeatmaps[j].Mode {
|
||
|
return data.Beatmapset.ChildrenBeatmaps[i].Mode < data.Beatmapset.ChildrenBeatmaps[j].Mode
|
||
|
}
|
||
|
return data.Beatmapset.ChildrenBeatmaps[i].DifficultyRating < data.Beatmapset.ChildrenBeatmaps[j].DifficultyRating
|
||
|
})
|
||
|
}
|
||
|
|
||
|
if data.Beatmapset.ID == 0 {
|
||
|
data.TitleBar = T(c, "Beatmap not found.")
|
||
|
data.Messages = append(data.Messages, errorMessage{T(c, "Beatmap could not be found.")})
|
||
|
return
|
||
|
}
|
||
|
|
||
|
data.KyutGrill = fmt.Sprintf("https://assets.ppy.sh/beatmaps/%d/covers/cover.jpg?%d", data.Beatmapset.ID, data.Beatmapset.LastUpdate.Unix())
|
||
|
data.KyutGrillAbsolute = true
|
||
|
|
||
|
setJSON, err := json.Marshal(data.Beatmapset)
|
||
|
if err == nil {
|
||
|
data.SetJSON = string(setJSON)
|
||
|
} else {
|
||
|
data.SetJSON = "[]"
|
||
|
}
|
||
|
|
||
|
data.TitleBar = T(c, "%s - %s", data.Beatmapset.Artist, data.Beatmapset.Title)
|
||
|
data.Scripts = append(data.Scripts, "/static/tablesort.js", "/static/beatmap.js")
|
||
|
}
|
||
|
|
||
|
func getBeatmapData(b string) (beatmap models.Beatmap, err error) {
|
||
|
resp, err := http.Get(config.CheesegullAPI + "/b/" + b)
|
||
|
if err != nil {
|
||
|
return beatmap, err
|
||
|
}
|
||
|
defer resp.Body.Close()
|
||
|
body, err := ioutil.ReadAll(resp.Body)
|
||
|
if err != nil {
|
||
|
return beatmap, err
|
||
|
}
|
||
|
|
||
|
err = json.Unmarshal(body, &beatmap)
|
||
|
if err != nil {
|
||
|
return beatmap, err
|
||
|
}
|
||
|
|
||
|
return beatmap, nil
|
||
|
}
|
||
|
|
||
|
func getBeatmapSetData(beatmap models.Beatmap) (bset models.Set, err error) {
|
||
|
resp, err := http.Get(config.CheesegullAPI + "/s/" + strconv.Itoa(beatmap.ParentSetID))
|
||
|
if err != nil {
|
||
|
return bset, err
|
||
|
}
|
||
|
defer resp.Body.Close()
|
||
|
body, err := ioutil.ReadAll(resp.Body)
|
||
|
if err != nil {
|
||
|
return bset, err
|
||
|
}
|
||
|
|
||
|
err = json.Unmarshal(body, &bset)
|
||
|
if err != nil {
|
||
|
return bset, err
|
||
|
}
|
||
|
|
||
|
return bset, nil
|
||
|
}
|