|
|
|
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: "",
|
|
|
|
},
|
|
|
|
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
|
|
|
|
}
|