You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
NoiseTorch/config.go

75 lines
1.6 KiB
Go

package main
import (
"bytes"
"io/ioutil"
"log"
"os"
"path/filepath"
"github.com/BurntSushi/toml"
)
type config struct {
Threshold int
DisplayMonitorSources bool
}
const configDir = ".config/noisetorch/"
const configFile = "config.toml"
func initializeConfigIfNot() {
log.Println("Checking if config needs to be initialized")
conf := config{Threshold: 95, DisplayMonitorSources: false}
configdir := filepath.Join(os.Getenv("HOME"), configDir)
ok, err := exists(configdir)
if err != nil {
log.Fatalf("Couldn't check if config directory exists: %v\n", err)
}
if !ok {
err = os.MkdirAll(configdir, 0700)
if err != nil {
log.Fatalf("Couldn't create config directory: %v\n", err)
}
}
tomlfile := filepath.Join(configdir, configFile)
ok, err = exists(tomlfile)
if err != nil {
log.Fatalf("Couldn't check if config file exists: %v\n", err)
}
if !ok {
log.Println("Initializing config")
writeConfig(&conf)
}
}
func readConfig() *config {
f := filepath.Join(os.Getenv("HOME"), configDir, configFile)
config := config{}
if _, err := toml.DecodeFile(f, &config); err != nil {
log.Fatalf("Couldn't read config file: %v\n", err)
}
return &config
}
func writeConfig(conf *config) {
f := filepath.Join(os.Getenv("HOME"), configDir, configFile)
var buffer bytes.Buffer
if err := toml.NewEncoder(&buffer).Encode(&conf); err != nil {
log.Fatalf("Couldn't write config file: %v\n", err)
}
ioutil.WriteFile(f, []byte(buffer.String()), 0644)
}
func exists(path string) (bool, error) {
_, err := os.Stat(path)
if err == nil {
return true, nil
}
if os.IsNotExist(err) {
return false, nil
}
return false, err
}