Files
EMLy/backend/utils/ini-reader.go
Lyz Coote d6a5cb8a67 v1.0.0
2026-02-02 18:41:13 +01:00

64 lines
1.4 KiB
Go

package utils
import (
"log"
"os"
"path/filepath"
"gopkg.in/ini.v1"
)
// Config represents the structure of config.ini
type Config struct {
EMLy EMLyConfig `ini:"EMLy"`
}
type EMLyConfig struct {
SDKDecoderSemver string `ini:"SDK_DECODER_SEMVER"`
SDKDecoderReleaseChannel string `ini:"SDK_DECODER_RELEASE_CHANNEL"`
GUISemver string `ini:"GUI_SEMVER"`
GUIReleaseChannel string `ini:"GUI_RELEASE_CHANNEL"`
}
// LoadConfig reads the config.ini file at the given path and returns a Config struct
func LoadConfig(path string) (*Config, error) {
cfg, err := ini.Load(path)
if err != nil {
log.Printf("Fail to read file: %v", err)
return nil, err
}
config := new(Config)
if err := cfg.MapTo(config); err != nil {
log.Printf("Fail to map config: %v", err)
return nil, err
}
return config, nil
}
func SaveConfig(path string, config *Config) error {
cfg := ini.Empty()
if err := cfg.ReflectFrom(config); err != nil {
log.Printf("Fail to reflect config: %v", err)
return err
}
if err := cfg.SaveTo(path); err != nil {
log.Printf("Fail to save config file: %v", err)
return err
}
return nil
}
func DefaultConfigPath() string {
// Prefer config.ini next to the executable (packaged app), fallback to CWD (dev).
exe, err := os.Executable()
if err == nil {
p := filepath.Join(filepath.Dir(exe), "config.ini")
if _, statErr := os.Stat(p); statErr == nil {
return p
}
}
return "config.ini"
}