evcc-io/server/http_gridsessions_handler.go

44 lines
1 KiB
Go

package server
import (
"context"
"errors"
"net/http"
"github.com/evcc-io/evcc/hems/smartgrid"
"github.com/evcc-io/evcc/server/db"
"github.com/evcc-io/evcc/util/locale"
"golang.org/x/text/language"
)
// gridSessionsHandler returns the list of grid sessions
func gridSessionsHandler(w http.ResponseWriter, r *http.Request) {
if db.Instance == nil {
jsonError(w, http.StatusBadRequest, errors.New("database offline"))
return
}
var res smartgrid.GridSessions
if txn := db.Instance.Order("created DESC").Find(&res); txn.Error != nil {
jsonError(w, http.StatusInternalServerError, txn.Error)
return
}
if r.URL.Query().Get("format") == "csv" {
lang := r.URL.Query().Get("lang")
if lang == "" {
// get request language
lang = r.Header.Get("Accept-Language")
if tags, _, err := language.ParseAcceptLanguage(lang); err == nil && len(tags) > 0 {
lang = tags[0].String()
}
}
ctx := context.WithValue(context.Background(), locale.Locale, lang)
csvResult(ctx, w, &res, "gridsessions")
return
}
jsonWrite(w, res)
}