From 971cc396e1d01f53f65a86278fd0ac4490565335 Mon Sep 17 00:00:00 2001 From: Mitch Riedstra Date: Fri, 20 Nov 2020 19:56:29 -0500 Subject: Reorganize. Update to use go modules. --- config/config.go | 89 ++++++++++++++++++++++++++++++++++++++++++++++++ config/config_unix.go | 21 ++++++++++++ config/config_windows.go | 22 ++++++++++++ 3 files changed, 132 insertions(+) create mode 100644 config/config.go create mode 100644 config/config_unix.go create mode 100644 config/config_windows.go (limited to 'config') diff --git a/config/config.go b/config/config.go new file mode 100644 index 0000000..839acbf --- /dev/null +++ b/config/config.go @@ -0,0 +1,89 @@ +// Used to define and load this application's specific configuration +package config + +import ( + "gopkg.in/yaml.v2" + "io/ioutil" + "os" + "os/exec" +) + +type Config struct { + SteamRepositories []string `yaml:"SteamRepositories"` + DefaultRepository string `yaml:"DefaultRepository"` + Listen string +} + +var configFilename string = "steam-export.yml" + +// By default it reads 'config.yml' in the current directory +func LoadConfig() (*Config, error) { + c := &Config{} + err := c.ReadDefaultConfig() + return c, err +} + +func (c *Config) ReadConfig(cfg string) error { + contents, err := ioutil.ReadFile(cfg) + if err != nil { + return err + } + return yaml.Unmarshal([]byte(contents), c) +} + +func checkConfigFile(cf string) error { + // Check if our config file exists, or create it + if _, err := os.Stat(cf); err != nil { + if f, err := os.Create(cf); err != nil { + return err + } else { + f.WriteString(` +--- +listen: 0.0.0.0:9413 +# Repositories that you want to expose on the web server +SteamRepositories: + # We're ideally looking for the full path to the steamapps folder + # On windows you're going to escape the slashes + - "C:\\Program Files (x86)\\Steam\\steamapps" + # - "/usr/mitch/SteamGames/steamapps" + +# This defaults to: +# Only change this if your default Steam library is different than the Steam default +# DefaultRepository: "/usr/mitch/SteamGames/steamapps" +# DefaultRepository: "Z:\\SteamGames\\steamapps" +`) + f.Close() + } + } + return nil +} + +func (c *Config) ReadDefaultConfig() error { + if err := c.ReadConfig(configFilename); err != nil { + if err = checkConfigFile(fn); err != nil { + return err + } + return c.ReadConfig(fn) + } + return nil +} + +func EditDefaultConfig(e string) error { + if e != "" { + editor = e + } + + if _, err := os.Stat(configFilename); err != nil { + if _, err := os.Stat(fn); err != nil { + return err + } + c := exec.Command(editor, fn) + c.Stdout = os.Stdout + c.Stdin = os.Stdin + c.Stderr = os.Stderr + return c.Run() + } + cmd := exec.Command(editor, configFilename) + return cmd.Run() + +} diff --git a/config/config_unix.go b/config/config_unix.go new file mode 100644 index 0000000..8be1967 --- /dev/null +++ b/config/config_unix.go @@ -0,0 +1,21 @@ +// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris + +package config + +import ( + "os" + "path/filepath" +) + +var ( + editor string = setEditor() + fn string = filepath.Join(os.Getenv("HOME"), "."+configFilename) +) + +func setEditor() string { + e := os.Getenv("EDITOR") + if e == "" { + return "vi" + } + return e +} diff --git a/config/config_windows.go b/config/config_windows.go new file mode 100644 index 0000000..39b6b6c --- /dev/null +++ b/config/config_windows.go @@ -0,0 +1,22 @@ +// +build windows + +package config + +import ( + "os" + // "os/exec" + "path/filepath" +) + +var ( + editor string = setEditor() + fn string = filepath.Join(os.Getenv("LOCALAPPDATA"), configFilename) +) + +func setEditor() string { + e := os.Getenv("EDITOR") + if e == "" { + return `C:\Program Files\Windows NT\Accessories\wordpad.exe` + } + return e +} -- cgit v1.2.3