51 lines
1.2 KiB
Go
51 lines
1.2 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
|
|
}
|
|
|
|
format := r.URL.Query().Get("format")
|
|
|
|
if format == "json" {
|
|
jsonAttachment(w, &res, "gridsessions")
|
|
return
|
|
}
|
|
|
|
if format == "csv" || format == "xlsx" {
|
|
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)
|
|
exportResult(ctx, w, format, &res, "gridsessions")
|
|
return
|
|
}
|
|
|
|
jsonWrite(w, res)
|
|
}
|