From 8eded6b6b071f830d0c6fd832878d66cc96f1347 Mon Sep 17 00:00:00 2001 From: Unbewohnte <65883674+Unbewohnte@users.noreply.github.com> Date: Thu, 6 May 2021 10:38:33 +0300 Subject: [PATCH] Added forgotten default field --- settings.go | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 settings.go diff --git a/settings.go b/settings.go new file mode 100644 index 0000000..09b56ec --- /dev/null +++ b/settings.go @@ -0,0 +1,124 @@ +package settings + +import ( + "encoding/json" + "errors" + "fmt" + "os" + + "github.com/Unbewohnte/OBM/logger" + "github.com/Unbewohnte/OBM/util" +) + +const ( + settingsFilename string = "settings.json" +) + +// checks if the settings.json exists in current directory +func DoesExist() (bool, error) { + files, err := os.ReadDir(".") + if err != nil { + return false, errors.New(fmt.Sprintf("Unable to read current directory %s", err)) + } + + for _, file := range files { + if !file.IsDir() && file.Name() == settingsFilename { + return true, nil + } + } + + return false, nil +} + +// creates "settings.json" in current directory +func Create() error { + exists, err := DoesExist() + if err != nil { + return err + } + if exists { + return nil + } + + file, err := os.Create(settingsFilename) + if err != nil { + return errors.New(fmt.Sprintf("Unable to create settings file : %s", err)) + } + + // marshaling default settings + settingsJson, err := json.MarshalIndent(Settings{ + OsuDir: "", + BackgroundReplacement: backgroundReplacement{ + Enabled: true, + ReplacementImagePath: "", + }, + BackgroundRetrievement: backgroundRetrievement{ + Enabled: false, + RetrievementPath: "", + }, + BackgroundRemovement: backgroundRemovement{ + Enabled: false, + }, + CreateBlackBGImage: backgroundCreatement{ + Enabled: true, + Width: 1920, + Height: 1080, + }, + Workers: 100, + }, "", " ") + if err != nil { + return errors.New(fmt.Sprintf("Could not marshal settings into file : %s", err)) + } + + file.Write(settingsJson) + file.Close() + + return nil +} + +// unmarshalls settings.json into struct and processes the edge-cases +func Get() Settings { + settingsFileContents, err := os.ReadFile(settingsFilename) + if err != nil { + logger.LogError(true, fmt.Sprintf("Could not read settings file : %s", err)) + } + + var settings Settings + err = json.Unmarshal(settingsFileContents, &settings) + if err != nil { + logger.LogError(true, fmt.Sprintf("Could not unmarshal json file : %s", err)) + } + + // if all features are disabled + if !settings.BackgroundReplacement.Enabled && !settings.BackgroundRetrievement.Enabled { + logger.LogInfo("No features enabled. Exiting...") + os.Exit(0) + } + + // checking for edge cases or mistakes made in the settings file, + // enabled and disabled fields + if settings.BackgroundReplacement.Enabled { + if settings.BackgroundReplacement.ReplacementImagePath == "" || settings.BackgroundReplacement.ReplacementImagePath == " " { + logger.LogError(true, "`replacementImagePath` is not specified !") + } else if !util.IsImage(settings.BackgroundReplacement.ReplacementImagePath) { + logger.LogError(true, "`replacementImagePath` is pointing to a non-image file !`") + } + } else { + settings.BackgroundReplacement.ReplacementImagePath = "" + } + + if settings.BackgroundRetrievement.Enabled { + if settings.BackgroundRetrievement.RetrievementPath == "" || settings.BackgroundRetrievement.RetrievementPath == " " { + logger.LogError(true, "`retrievementPath` is not specified !") + } + } else { + settings.BackgroundRetrievement.RetrievementPath = "" + } + + if settings.Workers <= 0 { + settings.Workers = 1 + logger.LogWarning("`workers` is set to 0 or less. Replaced with 1") + } + + return settings +}