package config import ( "os" "os/exec" "strconv" "strings" "time" "git.velvettear.de/velvettear/loggo" ) var ApiAddress string var Interval time.Duration var Resolution string var PaletteFile string var PaletteAlgorithm string var PaletteColors int var Script string var ScriptAsync bool var ScriptStage string // initialize the config func Initialize() { loggo.SetLogLevelByName(os.Getenv("SLIDESHOW_LOGLEVEL")) ApiAddress = os.Getenv("SLIDESHOW_API") if len(ApiAddress) == 0 { loggo.Fatal("no adress of the slideshow-api server has been specified") } if !strings.HasPrefix(ApiAddress, "http://") && !strings.HasPrefix(ApiAddress, "https://") { ApiAddress = "http://" + ApiAddress } tmpInt, _ := strconv.Atoi(os.Getenv("SLIDESHOW_INTERVAL")) if tmpInt <= 0 { tmpInt = 60 } Interval = time.Duration(tmpInt) * time.Second Resolution = os.Getenv("SLIDESHOW_RESOLUTION") if len(Resolution) > 0 { width, height, found := strings.Cut(Resolution, "x") if !found { loggo.Fatal("encountered an error parsing the configured resolution, make sure to specify the format like '1920x1080'") } _, error := strconv.Atoi(width) if error != nil { loggo.Fatal("encountered an error parsing the configured width '" + width + "'") } _, error = strconv.Atoi(height) if error != nil { loggo.Fatal("encountered an error parsing the configured height '" + height + "'") } } PaletteFile = os.Getenv("SLIDESHOW_PALETTE") PaletteAlgorithm = os.Getenv("SLIDESHOW_PALETTE_ALGORITHM") tmpInt, _ = strconv.Atoi(os.Getenv("SLIDESHOW_PALETTE_COLORS")) if tmpInt <= 0 { tmpInt = 16 } PaletteColors = tmpInt Script = os.Getenv("SLIDESHOW_SCRIPT") ScriptAsync, _ = strconv.ParseBool(os.Getenv("SLIDESHOW_SCRIPT_ASYNC")) ScriptStage = strings.ToLower(os.Getenv("SLIDESHOW_SCRIPT_STAGE")) checkScript() checkFehCommand() } // check if a script has been specified and exists func checkScript() { if len(Script) == 0 { return } stats, error := os.Stat(Script) if error != nil { loggo.Warning("encountered an error getting stats for the script '"+Script+"', script execution is unavailable", error.Error()) Script = "" return } if stats.IsDir() { loggo.Warning("the script '"+Script+"' seems to be a directory, script execution is unavailable", error.Error()) Script = "" return } if string(stats.Mode().Perm().String()[3]) != "x" { loggo.Warning("the script '"+Script+"' seems to be a directory, script execution is unavailable", error.Error()) Script = "" } checkScriptStage() } // check if the specified script stage is valid func checkScriptStage() { switch ScriptStage { case "pre_image": fallthrough case "post_image": fallthrough case "pre_palette": fallthrough case "post_palette": return default: ScriptStage = "" } } // check if 'feh' is available func checkFehCommand() { cmd := exec.Command("which", "feh") error := cmd.Run() if error == nil { return } loggo.Fatal("could not find command 'feh'") } // check if a resolution has been specified func IsResolutionSet() bool { return len(Resolution) > 0 } // check if a color palette should be generated func IsPaletteSet() bool { return len(PaletteFile) > 0 } // check if a script has been specified func IsScriptSet() bool { return len(Script) > 0 } // check if a script stage has been specified func IsScriptStageSet() bool { return len(ScriptStage) > 0 } // check if script stage 'pre_image' has been specified func IsScriptStagePreImage() bool { return ScriptStage == "pre_image" } // check if script stage 'post_image' has been specified func IsScriptStagePostImage() bool { return ScriptStage == "post_image" } // check if script stage 'pre_palette' has been specified func IsScriptStagePrePalette() bool { return ScriptStage == "pre_palette" } // check if script stage 'post_palette' has been specified func IsScriptStagePostPalette() bool { return ScriptStage == "post_palette" }