156 lines
3.9 KiB
Go
156 lines
3.9 KiB
Go
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 ScriptArgs []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")
|
|
ScriptArgs = strings.Split(os.Getenv("SLIDESHOW_SCRIPT_ARGS"), " ")
|
|
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"
|
|
}
|