84 lines
1.4 KiB
Go
84 lines
1.4 KiB
Go
package config
|
|
|
|
import (
|
|
"caltrack/types"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/BurntSushi/toml"
|
|
)
|
|
|
|
func DefaultConfig() types.Config {
|
|
return types.Config{
|
|
CurrentWeightKg: 80.0,
|
|
TargetWeightKg: 70.0,
|
|
HeightCm: 175,
|
|
Age: 30,
|
|
Sex: "male",
|
|
ActivityLevel: "moderate",
|
|
WeeklyLossKg: 0.5,
|
|
ListenAddr: ":8080",
|
|
}
|
|
}
|
|
|
|
func DataDir() (string, error) {
|
|
if dir := os.Getenv("CALTRACK_DATA_DIR"); dir != "" {
|
|
return dir, nil
|
|
}
|
|
home, err := os.UserHomeDir()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return filepath.Join(home, ".config", "caltrack"), nil
|
|
}
|
|
|
|
func ConfigPath() (string, error) {
|
|
dir, err := DataDir()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return filepath.Join(dir, "config.toml"), nil
|
|
}
|
|
|
|
func Load() (types.Config, error) {
|
|
cfg := DefaultConfig()
|
|
|
|
path, err := ConfigPath()
|
|
if err != nil {
|
|
return cfg, err
|
|
}
|
|
|
|
if _, err := os.Stat(path); os.IsNotExist(err) {
|
|
return cfg, nil
|
|
}
|
|
|
|
_, err = toml.DecodeFile(path, &cfg)
|
|
if err != nil {
|
|
return cfg, err
|
|
}
|
|
|
|
if cfg.ListenAddr == "" {
|
|
cfg.ListenAddr = ":8080"
|
|
}
|
|
|
|
return cfg, nil
|
|
}
|
|
|
|
func Save(cfg types.Config) error {
|
|
path, err := ConfigPath()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := os.MkdirAll(filepath.Dir(path), 0755); err != nil {
|
|
return err
|
|
}
|
|
|
|
f, err := os.Create(path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer f.Close()
|
|
|
|
return toml.NewEncoder(f).Encode(cfg)
|
|
}
|