Enable saving album selections

This commit is contained in:
KemoNine 2020-09-05 01:01:48 -04:00
parent 728c281ad3
commit 7afb3f17ee
2 changed files with 51 additions and 6 deletions

View file

@ -4,6 +4,7 @@ import (
"fmt"
"log"
"os"
"time"
"github.com/knadh/koanf"
"github.com/knadh/koanf/parsers/toml"
@ -63,6 +64,10 @@ func main() {
return
}
// Give the config UI a chance to save and exit clean
time.Sleep(time.Minute)
// Bail on slideshow if there is a config change so it restarts with updated config
log.Fatalf("Config file changed! Exiting!")
})

View file

@ -38,6 +38,11 @@ const (
PAGE_POWEROFF = "PAGE_POWEROFF"
)
// Bullshit to remove an element from a slice
func remove(s []string, index int) []string {
return append(s[:index], s[index+1:]...)
}
// Housekeeping
var app *tview.Application
var main *tview.Flex
@ -54,7 +59,7 @@ func ConfigGui(pfconfig *koanf.Koanf) {
meminfo := &procmeminfo.MemInfo{}
err := meminfo.Update()
if err != nil {
log.Printf("Error getting memory info : %s", err)
log.Fatalf("Error getting memory info : %s", err)
}
// Network interfaces for status panel
@ -181,6 +186,7 @@ func ConfigGui(pfconfig *koanf.Koanf) {
// Select Albums Form
selectAlbumsForm := tview.NewForm()
configSelectedAlbums := pfconfig.Strings(config.CONFIG_KEY_ALBUMS_SELECTED)
albumCheckboxes := []*tview.Checkbox{}
for _, album := range albums {
albumSelected := false
for _, configSelectedAlbum := range configSelectedAlbums {
@ -191,7 +197,11 @@ func ConfigGui(pfconfig *koanf.Koanf) {
albumSelected = true
}
}
selectAlbumsForm.AddCheckbox(album, albumSelected, nil)
albumCheckbox := tview.NewCheckbox()
albumCheckbox.SetLabel(album)
albumCheckbox.SetChecked(albumSelected)
albumCheckboxes = append(albumCheckboxes, albumCheckbox)
selectAlbumsForm.AddFormItem(albumCheckbox)
}
selectAlbumsForm.AddButton("Apply", resetMain)
selectAlbumsForm.AddButton("Cancel", resetMain)
@ -377,10 +387,37 @@ func ConfigGui(pfconfig *koanf.Koanf) {
AddButtons([]string{"Yes", "Cancel"}).
SetDoneFunc(func(buttonIndex int, buttonLabel string) {
if buttonLabel == "Yes" {
// Housekeeping var for data to be written to disk
var hdmiForDisk bytes.Buffer
// Deal with selected albums
for _, checkbox := range albumCheckboxes {
checkboxLabel := checkbox.GetLabel()
// Undo beautification of checkbox label
if checkboxLabel == "Main Folder" {
checkboxLabel = "/"
}
// Track whether or not we need to add OR remove from config
selected := checkbox.IsChecked()
inConfig := false
configIndex := 0
// Walk the existing config values and bail if/when we find the album
for configIndex = range configSelectedAlbums {
if checkboxLabel == configSelectedAlbums[configIndex] {
inConfig = true
break
}
}
// We need to add to the config
if selected && !inConfig {
configSelectedAlbums = append(configSelectedAlbums, checkboxLabel)
}
// We need to remove from the config
if !selected && inConfig {
configSelectedAlbums = remove(configSelectedAlbums, configIndex)
}
}
// Apply HDMI configuration (on/off)
var hdmiForDisk bytes.Buffer
valueForTemplate := utils.SystemdTimer{OnCalendar: configHDMIOn}
screenOn, err := template.New("screenon.systemd.timer").Parse(utils.SCREEN_ON_DOT_TIMER)
if err != nil {
@ -409,8 +446,11 @@ func ConfigGui(pfconfig *koanf.Koanf) {
// Apply configuration updates to main config manager prior to saving
pfconfig.Load(confmap.Provider(map[string]interface{}{
config.CONFIG_KEY_HDMI_ON: configHDMIOn,
config.CONFIG_KEY_HDMI_OFF: configHDMIOff,
config.CONFIG_KEY_SLIDESHOW_INTERVAL: configSlideInterval,
config.CONFIG_KEY_SLIDESHOW_RESTART_INTERVAL: configRestartInterval,
config.CONFIG_KEY_HDMI_ON: configHDMIOn,
config.CONFIG_KEY_HDMI_OFF: configHDMIOff,
config.CONFIG_KEY_ALBUMS_SELECTED: configSelectedAlbums,
}, "."), nil)
// Save configuration