openpdu/src/outlets_ui.go

92 lines
1.9 KiB
Go

package main
import (
"fmt"
"net/http"
"strconv"
"strings"
"github.com/spf13/viper"
"gopkg.in/macaron.v1"
)
func outletsPage(ctx *macaron.Context) {
ctx.Data["outlets"] = outlets
ctx.HTML(200, "outlets")
}
type OutletPostForm struct {
Description string `form:"description" binding:"Required"`
MQTTTopic string `form:"mqtttopic"`
OnBoot string `form:"onboot" binding:"Required"`
}
func outletEditPage(ctx *macaron.Context) {
var err error
var num uint64
var o *Outlet
num, err = strconv.ParseUint(ctx.Params(":num"), 10, 64)
if err != nil {
ctx.JSON(http.StatusOK, Dictionary{
"result": "error",
"error": err.Error(),
})
return
}
o = outlets[num]
ctx.Data["outlet"] = o
ctx.Data["onboot_values"] = []string{"on", "off", "last"}
ctx.HTML(200, "outlet_edit")
}
func outletEditPost(ctx *macaron.Context, f OutletPostForm) {
var err error
var num uint64
num, err = strconv.ParseUint(ctx.Params(":num"), 10, 64)
if err != nil {
ctx.JSON(http.StatusOK, Dictionary{
"result": "error",
"error": err.Error(),
})
return
}
onboot := "on"
onbootForm := strings.ToLower(strings.TrimSpace(f.OnBoot))
switch onbootForm {
case
"on",
"off",
"last":
onboot = onbootForm
default:
outletsPage(ctx)
return
}
outlets[num].Channel.OnBoot = onboot
s1 := fmt.Sprintf("boards.%s.channels.%s.onboot", outlets[num].Board.ID, outlets[num].Channel.ID)
viper.Set(s1, onboot)
outlets[num].Description = strings.TrimSpace(f.Description)
s2 := fmt.Sprintf("outlets.%s.description", outlets[num].ID)
viper.Set(s2, outlets[num].Description)
mqtt := strings.TrimSpace(f.MQTTTopic)
if mqtt == "" {
mqtt = outlets[num].Channel.Name
}
outlets[num].Channel.MQTTTopic = mqtt
s3 := fmt.Sprintf("boards.%s.channels.%s.mqtttopic", outlets[num].Board.ID, outlets[num].Channel.ID)
viper.Set(s3, mqtt)
viper.WriteConfig()
ctx.Redirect("/outlets")
}