Fill out GUI some more, enable saving of config file on exit

This commit is contained in:
KemoNine 2020-09-04 20:28:32 -04:00
parent e326984ca6
commit 769029b9c2
4 changed files with 60 additions and 16 deletions

View file

@ -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"
]
``` ```

View file

@ -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)
} }

View file

@ -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

View file

@ -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"