Fill out GUI some more, enable saving of config file on exit
This commit is contained in:
parent
e326984ca6
commit
769029b9c2
|
@ -8,22 +8,18 @@ The GUI will work off a config similar to the following. Use the ```generate con
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
[slideshow]
|
# Slideshow intervals
|
||||||
slideinterval = "300s"
|
slideshow.slideinterval = "300s"
|
||||||
restartinterval = "7d"
|
slideshow.restartinterval = "7d"
|
||||||
|
|
||||||
[hdmi]
|
|
||||||
# These are SYSTEMD.TIME formatted times
|
# These are SYSTEMD.TIME formatted times
|
||||||
# You probably want to just adjust the actual times here
|
# You probably want to just adjust the actual times here
|
||||||
# See https://www.freedesktop.org/software/systemd/man/systemd.time.html
|
# See https://www.freedesktop.org/software/systemd/man/systemd.time.html
|
||||||
off = "*-*-* 00:00:00"
|
hdmi.off = "*-*-* 00:00:00"
|
||||||
on = "*-*-* 06:00:00"
|
hdmi.on = "*-*-* 06:00:00"
|
||||||
|
|
||||||
[albums]
|
# Album configuration
|
||||||
root = "/tank/pictures"
|
albums.root = "/tank/pictures"
|
||||||
selected = [
|
albums.selected = ["/", "/KemoNine"]
|
||||||
"/",
|
|
||||||
"/KemoNine"
|
|
||||||
]
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -74,5 +74,10 @@ func main() {
|
||||||
ui.Slideshow(pfConfig)
|
ui.Slideshow(pfConfig)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reset the CLI flag so it's never writted to the config as 'true'
|
||||||
|
pfConfig.Load(confmap.Provider(map[string]interface{}{
|
||||||
|
ui.CLI_FLAG_CONFIG_ONLY: false,
|
||||||
|
}, "."), nil)
|
||||||
|
|
||||||
ui.ConfigGui(pfConfig)
|
ui.ConfigGui(pfConfig)
|
||||||
}
|
}
|
||||||
|
|
50
ui/config.go
50
ui/config.go
|
@ -7,12 +7,14 @@ import (
|
||||||
"net"
|
"net"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
"io/ioutil"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/gdamore/tcell"
|
"github.com/gdamore/tcell"
|
||||||
"github.com/guillermo/go.procmeminfo"
|
"github.com/guillermo/go.procmeminfo"
|
||||||
"github.com/knadh/koanf"
|
"github.com/knadh/koanf"
|
||||||
|
"github.com/knadh/koanf/parsers/toml"
|
||||||
"github.com/rivo/tview"
|
"github.com/rivo/tview"
|
||||||
|
|
||||||
"git.kemonine.info/PiFrame/utils"
|
"git.kemonine.info/PiFrame/utils"
|
||||||
|
@ -27,6 +29,7 @@ const (
|
||||||
|
|
||||||
const (
|
const (
|
||||||
PAGE_MAIN_UI = "PAGE_MAIN_UI"
|
PAGE_MAIN_UI = "PAGE_MAIN_UI"
|
||||||
|
PAGE_SAVE_EXIT = "PAGE_SAVE_EXIT"
|
||||||
PAGE_EXIT = "PAGE_EXIT"
|
PAGE_EXIT = "PAGE_EXIT"
|
||||||
PAGE_REBOOT = "PAGE_REBOOT"
|
PAGE_REBOOT = "PAGE_REBOOT"
|
||||||
PAGE_POWEROFF = "PAGE_POWEROFF"
|
PAGE_POWEROFF = "PAGE_POWEROFF"
|
||||||
|
@ -103,12 +106,20 @@ func ConfigGui(config *koanf.Koanf) {
|
||||||
AddItem(headerSubTitle, 0, 1, false)
|
AddItem(headerSubTitle, 0, 1, false)
|
||||||
|
|
||||||
// Footer fields (Left Column)
|
// Footer fields (Left Column)
|
||||||
|
saveExitButton := tview.NewButton("Save & Exit").
|
||||||
|
SetBackgroundColorActivated(tcell.ColorGray)
|
||||||
|
saveExitButton.SetLabelColor(tcell.ColorBlack).
|
||||||
|
SetBorder(true).
|
||||||
|
SetBorderColor(tcell.ColorBlack).
|
||||||
|
SetBackgroundColor(tcell.ColorGreen).
|
||||||
|
SetRect(0, 0, 22, 3)
|
||||||
|
|
||||||
exitButton := tview.NewButton("Exit").
|
exitButton := tview.NewButton("Exit").
|
||||||
SetBackgroundColorActivated(tcell.ColorGray)
|
SetBackgroundColorActivated(tcell.ColorGray)
|
||||||
exitButton.SetLabelColor(tcell.ColorBlack).
|
exitButton.SetLabelColor(tcell.ColorBlack).
|
||||||
SetBorder(true).
|
SetBorder(true).
|
||||||
SetBorderColor(tcell.ColorBlack).
|
SetBorderColor(tcell.ColorBlack).
|
||||||
SetBackgroundColor(tcell.ColorGreen).
|
SetBackgroundColor(tcell.ColorYellow).
|
||||||
SetRect(0, 0, 22, 3)
|
SetRect(0, 0, 22, 3)
|
||||||
|
|
||||||
rebootButton := tview.NewButton("Reboot").
|
rebootButton := tview.NewButton("Reboot").
|
||||||
|
@ -116,7 +127,7 @@ func ConfigGui(config *koanf.Koanf) {
|
||||||
rebootButton.SetLabelColor(tcell.ColorBlack).
|
rebootButton.SetLabelColor(tcell.ColorBlack).
|
||||||
SetBorder(true).
|
SetBorder(true).
|
||||||
SetBorderColor(tcell.ColorBlack).
|
SetBorderColor(tcell.ColorBlack).
|
||||||
SetBackgroundColor(tcell.ColorYellow).
|
SetBackgroundColor(tcell.ColorFuchsia).
|
||||||
SetRect(0, 0, 22, 3)
|
SetRect(0, 0, 22, 3)
|
||||||
|
|
||||||
powerOffButton := tview.NewButton("Power Off").
|
powerOffButton := tview.NewButton("Power Off").
|
||||||
|
@ -129,7 +140,8 @@ func ConfigGui(config *koanf.Koanf) {
|
||||||
|
|
||||||
// Footer
|
// Footer
|
||||||
footer := tview.NewFlex()
|
footer := tview.NewFlex()
|
||||||
footer.AddItem(exitButton, 0, 1, false).
|
footer.AddItem(saveExitButton, 0, 1, false).
|
||||||
|
AddItem(exitButton, 0, 1, false).
|
||||||
AddItem(rebootButton, 0, 1, false).
|
AddItem(rebootButton, 0, 1, false).
|
||||||
AddItem(powerOffButton, 0, 1, false)
|
AddItem(powerOffButton, 0, 1, false)
|
||||||
// Setup menu
|
// Setup menu
|
||||||
|
@ -360,6 +372,36 @@ func ConfigGui(config *koanf.Koanf) {
|
||||||
pages.AddPage(PAGE_MAIN_UI, mainUI, true, true)
|
pages.AddPage(PAGE_MAIN_UI, mainUI, true, true)
|
||||||
|
|
||||||
// Button modals
|
// Button modals
|
||||||
|
saveExitModal := tview.NewModal().
|
||||||
|
SetText("Are you sure you want to [red]SAVE [red]& [red]EXIT?").
|
||||||
|
AddButtons([]string{"Yes", "Cancel"}).
|
||||||
|
SetDoneFunc(func(buttonIndex int, buttonLabel string) {
|
||||||
|
if buttonLabel == "Yes" {
|
||||||
|
parser := toml.Parser()
|
||||||
|
dataForDisk, err := config.Marshal(parser)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Error preparing config for disk write : %s", err)
|
||||||
|
}
|
||||||
|
existingStat, err := os.Lstat(CONFIG_FILE_PATH)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Error checking if config exists : %s", err)
|
||||||
|
}
|
||||||
|
if err := ioutil.WriteFile(CONFIG_FILE_PATH_TMP, dataForDisk, existingStat.Mode()); err != nil {
|
||||||
|
log.Fatalf("Error writing temp config file : %s", err)
|
||||||
|
}
|
||||||
|
if err := os.Rename(CONFIG_FILE_PATH_TMP, CONFIG_FILE_PATH); err != nil {
|
||||||
|
log.Fatalf("Error moving new config in place : %s", err)
|
||||||
|
}
|
||||||
|
app.Stop()
|
||||||
|
os.Exit(0)
|
||||||
|
}
|
||||||
|
pages.SwitchToPage(PAGE_MAIN_UI)
|
||||||
|
})
|
||||||
|
pages.AddPage(PAGE_SAVE_EXIT, saveExitModal, true, false)
|
||||||
|
saveExitButton.SetSelectedFunc(func() {
|
||||||
|
pages.ShowPage(PAGE_SAVE_EXIT)
|
||||||
|
})
|
||||||
|
|
||||||
exitModal := tview.NewModal().
|
exitModal := tview.NewModal().
|
||||||
SetText("Are you sure you want to [red]EXIT?").
|
SetText("Are you sure you want to [red]EXIT?").
|
||||||
AddButtons([]string{"Yes", "Cancel"}).
|
AddButtons([]string{"Yes", "Cancel"}).
|
||||||
|
@ -409,7 +451,7 @@ func ConfigGui(config *koanf.Koanf) {
|
||||||
})
|
})
|
||||||
|
|
||||||
// Setup tracking of which are of the UI can/has focus
|
// Setup tracking of which are of the UI can/has focus
|
||||||
primitivesThatCanFocus := []tview.Primitive{menu, exitButton, rebootButton, powerOffButton}
|
primitivesThatCanFocus := []tview.Primitive{menu, saveExitButton, exitButton, rebootButton, powerOffButton}
|
||||||
currentFocus := 0
|
currentFocus := 0
|
||||||
|
|
||||||
// Setup basic switching between main menu and buttons for the UI
|
// Setup basic switching between main menu and buttons for the UI
|
||||||
|
|
|
@ -6,6 +6,7 @@ const (
|
||||||
|
|
||||||
const (
|
const (
|
||||||
CONFIG_FILE_PATH = "/etc/default/pf.toml"
|
CONFIG_FILE_PATH = "/etc/default/pf.toml"
|
||||||
|
CONFIG_FILE_PATH_TMP = "/etc/default/pf.toml.new"
|
||||||
CONFIG_KEY_SLIDESHOW_INTERVAL = "slideshow.slideinterval"
|
CONFIG_KEY_SLIDESHOW_INTERVAL = "slideshow.slideinterval"
|
||||||
CONFIG_KEY_SLIDESHOW_RESTART_INTERVAL = "slideshow.restartinterval"
|
CONFIG_KEY_SLIDESHOW_RESTART_INTERVAL = "slideshow.restartinterval"
|
||||||
CONFIG_KEY_HDMI_OFF = "hdmi.off"
|
CONFIG_KEY_HDMI_OFF = "hdmi.off"
|
||||||
|
|
Loading…
Reference in a new issue