Start to refactor config to support new version of configuration with multiple watchers.
This commit is contained in:
parent
e3a7fad7a9
commit
7f3161143f
@ -4,7 +4,6 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
daulog "github.com/tardisx/discord-auto-upload/log"
|
daulog "github.com/tardisx/discord-auto-upload/log"
|
||||||
@ -13,7 +12,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Config for the application
|
// Config for the application
|
||||||
var Config struct {
|
type ConfigV1 struct {
|
||||||
WebHookURL string
|
WebHookURL string
|
||||||
Path string
|
Path string
|
||||||
Watch int
|
Watch int
|
||||||
@ -22,44 +21,64 @@ var Config struct {
|
|||||||
Exclude string
|
Exclude string
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load the current config or initialise with defaults
|
type ConfigV2Watcher struct {
|
||||||
func LoadOrInit() {
|
WebHookURL string
|
||||||
configPath := configPath()
|
Path string
|
||||||
|
Username string
|
||||||
|
NoWatermark bool
|
||||||
|
Exclude string
|
||||||
|
}
|
||||||
|
|
||||||
|
type ConfigV2 struct {
|
||||||
|
WatchInterval int
|
||||||
|
Version int
|
||||||
|
Watchers []ConfigV2Watcher
|
||||||
|
}
|
||||||
|
|
||||||
|
var Config ConfigV2
|
||||||
|
var configPath string
|
||||||
|
|
||||||
|
func Init() {
|
||||||
|
configPath = defaultConfigPath()
|
||||||
|
}
|
||||||
|
|
||||||
|
// LoadOrInit loads the current configuration from the config file, or creates
|
||||||
|
// a new config file if none exists.
|
||||||
|
func LoadOrInit() error {
|
||||||
daulog.SendLog(fmt.Sprintf("Trying to load config from %s", configPath), daulog.LogTypeDebug)
|
daulog.SendLog(fmt.Sprintf("Trying to load config from %s", configPath), daulog.LogTypeDebug)
|
||||||
_, err := os.Stat(configPath)
|
_, err := os.Stat(configPath)
|
||||||
if os.IsNotExist(err) {
|
if os.IsNotExist(err) {
|
||||||
daulog.SendLog("NOTE: No config file, writing out sample configuration", daulog.LogTypeInfo)
|
daulog.SendLog("NOTE: No config file, writing out sample configuration", daulog.LogTypeInfo)
|
||||||
daulog.SendLog("You need to set the configuration via the web interface", daulog.LogTypeInfo)
|
daulog.SendLog("You need to set the configuration via the web interface", daulog.LogTypeInfo)
|
||||||
|
Config.Version = 2
|
||||||
Config.WebHookURL = ""
|
Config.WatchInterval = 10
|
||||||
Config.Path = homeDir() + string(os.PathSeparator) + "screenshots"
|
return SaveConfig()
|
||||||
Config.Watch = 10
|
|
||||||
SaveConfig()
|
|
||||||
} else {
|
} else {
|
||||||
LoadConfig()
|
return LoadConfig()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func LoadConfig() {
|
// LoadConfig will load the configuration from a known-to-exist config file.
|
||||||
path := configPath()
|
func LoadConfig() error {
|
||||||
data, err := ioutil.ReadFile(path)
|
data, err := ioutil.ReadFile(configPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("cannot read config file %s: %s", path, err.Error())
|
return fmt.Errorf("cannot read config file %s: %s", configPath, err.Error())
|
||||||
}
|
}
|
||||||
err = json.Unmarshal([]byte(data), &Config)
|
err = json.Unmarshal([]byte(data), &Config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("cannot decode config file %s: %s", path, err.Error())
|
return fmt.Errorf("cannot decode config file %s: %s", configPath, err.Error())
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func SaveConfig() {
|
func SaveConfig() error {
|
||||||
daulog.SendLog("saving configuration", daulog.LogTypeInfo)
|
daulog.SendLog("saving configuration", daulog.LogTypeInfo)
|
||||||
path := configPath()
|
|
||||||
jsonString, _ := json.Marshal(Config)
|
jsonString, _ := json.Marshal(Config)
|
||||||
err := ioutil.WriteFile(path, jsonString, os.ModePerm)
|
err := ioutil.WriteFile(configPath, jsonString, os.ModePerm)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Cannot save config %s: %s", path, err.Error())
|
return fmt.Errorf("cannot save config %s: %s", configPath, err.Error())
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func homeDir() string {
|
func homeDir() string {
|
||||||
@ -70,7 +89,7 @@ func homeDir() string {
|
|||||||
return dir
|
return dir
|
||||||
}
|
}
|
||||||
|
|
||||||
func configPath() string {
|
func defaultConfigPath() string {
|
||||||
homeDir := homeDir()
|
homeDir := homeDir()
|
||||||
return homeDir + string(os.PathSeparator) + ".dau.json"
|
return homeDir + string(os.PathSeparator) + ".dau.json"
|
||||||
}
|
}
|
||||||
|
60
config/config_test.go
Normal file
60
config/config_test.go
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestNoConfig(t *testing.T) {
|
||||||
|
if Config.Version != 0 {
|
||||||
|
t.Error("not 0 empty config")
|
||||||
|
}
|
||||||
|
|
||||||
|
configPath = emptyTempFile()
|
||||||
|
os.Remove(configPath)
|
||||||
|
|
||||||
|
err := LoadOrInit()
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("unexpected failure from load: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if Config.Version != 2 {
|
||||||
|
t.Error("not version 2 starting config")
|
||||||
|
}
|
||||||
|
|
||||||
|
if fileSize(configPath) < 40 {
|
||||||
|
t.Errorf("File is too small %d bytes", fileSize(configPath))
|
||||||
|
}
|
||||||
|
|
||||||
|
os.Remove(configPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestEmptyFileConfig(t *testing.T) {
|
||||||
|
|
||||||
|
configPath = emptyTempFile()
|
||||||
|
|
||||||
|
err := LoadOrInit()
|
||||||
|
if err == nil {
|
||||||
|
t.Error("unexpected success from LoadOrInit()")
|
||||||
|
}
|
||||||
|
|
||||||
|
os.Remove(configPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
func emptyTempFile() string {
|
||||||
|
f, err := ioutil.TempFile("", "dautest-*")
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return f.Name()
|
||||||
|
}
|
||||||
|
|
||||||
|
func fileSize(file string) int {
|
||||||
|
fi, err := os.Stat(file)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return int(fi.Size())
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user