openpdu/src/webui/outlets_ui.go

98 lines
2.1 KiB
Go

package webui
import (
"fmt"
"net/http"
"strconv"
"strings"
"git.openpdu.org/OpenPDU/openpdu/events"
"git.openpdu.org/OpenPDU/openpdu/outlet"
"github.com/spf13/viper"
"gopkg.in/macaron.v1"
)
func outletsPage(ctx *macaron.Context) {
ctx.Data["outlets"] = outlet.Outlets
ctx.HTML(200, "outlets")
}
type OutletPostForm struct {
Description string `form:"description" binding:"Required"`
MQTTStateTopic string `form:"mqttstatetopic"`
MQTTCommandTopic string `form:"mqttcommandtopic"`
OnBoot string `form:"onboot" binding:"Required"`
}
func outletEditPage(ctx *macaron.Context) {
var err error
var num uint64
var o *outlet.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 = outlet.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
}
outlet.Outlets[num].Channel.SetOnBoot(onboot)
outlet.Outlets[num].Description = strings.TrimSpace(f.Description)
s2 := fmt.Sprintf("outlets.%s.description", outlet.Outlets[num].ID)
viper.Set(s2, outlet.Outlets[num].Description)
mqttstate := strings.TrimSpace(f.MQTTStateTopic)
if mqttstate == "" {
mqttstate = outlet.Outlets[num].Channel.Name()
}
outlet.Outlets[num].Channel.SetMQTTStateTopic(mqttstate)
mqttcommand := strings.TrimSpace(f.MQTTCommandTopic)
if mqttcommand == "" {
mqttcommand = outlet.Outlets[num].Channel.Name()
}
outlet.Outlets[num].Channel.SetMQTTCommandTopic(mqttcommand)
viper.WriteConfig()
events.FireEvent("outlet_config_changed")
ctx.Redirect("/outlets")
}