diff options
Diffstat (limited to 'init.go')
| -rw-r--r-- | init.go | 67 |
1 files changed, 62 insertions, 5 deletions
@@ -1,9 +1,15 @@ package ENV +import ( + "os" + "path/filepath" + "strings" +) + // this is an experiment at this point to // see how this turns out - -func Init(appname, version, buildtime string, fromargv []string, goodFunc func(string), badFunc func(string, error)) error { +// normally called by "argv" (go.wit.com/lib/protobuf/argvpb) +func Init(appname, version, buildtime string, fromargv []string, goodFunc func(string), badFunc func(string, error)) { APPNAME = appname VERSION = version BUILDTIME = buildtime @@ -11,13 +17,44 @@ func Init(appname, version, buildtime string, fromargv []string, goodFunc func(s goodExit = goodFunc badExit = badFunc - err := loadENV() - if err == nil { - envPB.Init = true + if envPB != nil { + // log.Info("Init() already ran") + return } + envPB = NewKeys() + envPB.Init = true + SetGlobal("lib/ENV", "APPNAME", APPNAME) SetGlobal("lib/ENV", "VERSION", VERSION) SetGlobal("lib/ENV", "BUILDTIME", BUILDTIME) +} + +// if it exists, loads ~/.config/<appname>/<appname>.ENV +func InitENV() error { + err := loadAppENV() + + // TODO: load /usr/share/doc/<appname>.ENV + // TODO: load /etc/default/<appname> + return err +} + +// if it exists, loads ~/.config/<appname>/<appname>.ENV +func loadAppENV() error { + saveMu.Lock() + saveMu.Unlock() + configDir, err := os.UserConfigDir() + if err != nil { + return err + } + + envPB.Filename = filepath.Join(configDir, APPNAME+".ENV") + + data, err := os.ReadFile(envPB.Filename) + if err != nil { + return err + } + + parseENV(string(data)) return err } @@ -29,3 +66,23 @@ func InitValid() bool { } return envPB.Init } + +func parseENV(data string) { + // log.Info("loadENV()", filename) + for _, line := range strings.Split(data, "\n") { + line = strings.TrimSpace(line) + if line == "" { + continue + } + parts := strings.Split(line, "=") + if len(parts) != 2 { + // log.Info("INVALID LINE:", i, line) + continue + } + c := new(Key) + c.Var = parts[0] + c.Value = parts[1] + envPB.Append(c) + // log.Printf("ENV LINE: (%v)\n", c) + } +} |
