From 8737f2fe1a077a74242a5c4521d9b1a6468ebb0d Mon Sep 17 00:00:00 2001 From: KemoNine Date: Wed, 2 Sep 2020 23:47:07 -0400 Subject: [PATCH] Basic config file load --- cmd/gui/README.md | 25 ++++++++++++++++++++ cmd/gui/gui.go | 59 ++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 81 insertions(+), 3 deletions(-) diff --git a/cmd/gui/README.md b/cmd/gui/README.md index 1c51795..d3f937c 100644 --- a/cmd/gui/README.md +++ b/cmd/gui/README.md @@ -1,3 +1,28 @@ # gui This is the main source code for the custom UI used by PiFrame. This is responsible for things like restart, WiFi config, ensuring the slide show is running and more. + +## Config + +The GUI will work off a config similar to the following. Use the ```generate config``` option to generate a default configuration in ```/etc/default/pf.toml``` + +``` + +[slideshow] +duration = "300s" + +[hdmi] +# These are SYSTEMD.TIME formatted times +# You probably want to just adjust the actual times here +# See https://www.freedesktop.org/software/systemd/man/systemd.time.html +off = "*-*-* 00:00:00" +on = "*-*-* 06:00:00" + +[albums] +root = "/tank/pictures" +selected = [ + "/", + "/KemoNine" +] + +``` diff --git a/cmd/gui/gui.go b/cmd/gui/gui.go index c73fc42..afcebde 100644 --- a/cmd/gui/gui.go +++ b/cmd/gui/gui.go @@ -1,10 +1,63 @@ package main import ( - "git.kemonine.info/PiFrame/ui" + "log" + "os" + + "github.com/knadh/koanf" + "github.com/knadh/koanf/parsers/toml" + "github.com/knadh/koanf/providers/confmap" + "github.com/knadh/koanf/providers/file" + //"git.kemonine.info/PiFrame/ui" +) + +const ( + CONFIG_FILE_PATH = "/etc/default/pf.toml" + CONFIG_KEY_SLIDESHOW_DURATION = "slideshow.duration" + CONFIG_KEY_HDMI_OFF = "hdmi.off" + CONFIG_KEY_HDMI_ON = "hdmi.on" + CONFIG_KEY_ALBUMS_ROOT = "albums.root" + CONFIG_KEY_ALBUMS_SELECTED = "albums.selected" +) + +const ( + DEFAULT_SLIDESHOW_DURATION = "300s" + DEFAULT_HDMI_OFF = "*-*-* 00:00:00" + DEFAULT_HDMI_ON = "*-*-* 06:00:00" + DEFAULT_ALBUMS_ROOT = "/tank/pictures" + DEFAULT_ALBUM_SELECTED = "/" ) func main() { - ui.Slideshow() - ui.ConfigGui() + // Main config variable + var pfConfig = koanf.New(".") + + // Setup some defaults + pfConfig.Load(confmap.Provider(map[string]interface{}{ + CONFIG_KEY_SLIDESHOW_DURATION: DEFAULT_SLIDESHOW_DURATION, + CONFIG_KEY_HDMI_OFF: DEFAULT_HDMI_OFF, + CONFIG_KEY_HDMI_ON: DEFAULT_HDMI_ON, + CONFIG_KEY_ALBUMS_ROOT: DEFAULT_ALBUMS_ROOT, + CONFIG_KEY_ALBUMS_SELECTED: []string{DEFAULT_ALBUM_SELECTED}, + }, "."), nil) + + _, err := os.Stat(CONFIG_FILE_PATH) + if err != nil { + if os.IsNotExist(err) { + log.Printf("%s does not exist, USING DEFAULTS", CONFIG_FILE_PATH) + } else { + if errConfigFile := pfConfig.Load(file.Provider(CONFIG_FILE_PATH), toml.Parser()); errConfigFile != nil { + log.Fatalf("Error loading config: %s", err) + } + } + } + + // slideshowDuration := pfConfig.Duration(CONFIG_KEY_SLIDESHOW_DURATION) + // hdmiOff := pfConfig.String(CONFIG_KEY_HDMI_OFF) + // hdmiOn := pfConfig.String(CONFIG_KEY_HDMI_ON) + // albumsRoot := pfConfig.String(CONFIG_KEY_ALBUMS_ROOT) + // albumsSelected := pfConfig.Strings(CONFIG_KEY_ALBUMS_SELECTED) + + //ui.Slideshow() + //ui.ConfigGui() }