Add path mapping for OpenLocation
This commit is contained in:
87
internal/config/config.go
Normal file
87
internal/config/config.go
Normal file
@@ -0,0 +1,87 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const appName = "luxtools-client"
|
||||
|
||||
// Config stores client configuration loaded from disk.
|
||||
type Config struct {
|
||||
PathMap map[string]string `json:"path_map"`
|
||||
}
|
||||
|
||||
// ConfigPath returns the full path to the config.json file.
|
||||
func ConfigPath() (string, error) {
|
||||
dir, err := configDir()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return filepath.Join(dir, "config.json"), nil
|
||||
}
|
||||
|
||||
func configDir() (string, error) {
|
||||
if dir, err := os.UserConfigDir(); err == nil && strings.TrimSpace(dir) != "" {
|
||||
return filepath.Join(dir, appName), nil
|
||||
}
|
||||
|
||||
home, err := os.UserHomeDir()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
switch runtime.GOOS {
|
||||
case "windows":
|
||||
if v := strings.TrimSpace(os.Getenv("APPDATA")); v != "" {
|
||||
return filepath.Join(v, appName), nil
|
||||
}
|
||||
return filepath.Join(home, "AppData", "Roaming", appName), nil
|
||||
case "darwin":
|
||||
return filepath.Join(home, "Library", "Application Support", appName), nil
|
||||
default:
|
||||
return filepath.Join(home, ".config", appName), nil
|
||||
}
|
||||
}
|
||||
|
||||
// Load reads the config from disk. If the file does not exist, it returns an empty config.
|
||||
func Load(path string) (Config, error) {
|
||||
cfg := Config{PathMap: map[string]string{}}
|
||||
|
||||
b, err := os.ReadFile(path)
|
||||
if err != nil {
|
||||
if os.IsNotExist(err) {
|
||||
return cfg, nil
|
||||
}
|
||||
return cfg, err
|
||||
}
|
||||
if len(b) == 0 {
|
||||
return cfg, nil
|
||||
}
|
||||
|
||||
if err := json.Unmarshal(b, &cfg); err != nil {
|
||||
return cfg, err
|
||||
}
|
||||
if cfg.PathMap == nil {
|
||||
cfg.PathMap = map[string]string{}
|
||||
}
|
||||
return cfg, nil
|
||||
}
|
||||
|
||||
// Save writes the config to disk.
|
||||
func Save(path string, cfg Config) error {
|
||||
if cfg.PathMap == nil {
|
||||
cfg.PathMap = map[string]string{}
|
||||
}
|
||||
if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil {
|
||||
return err
|
||||
}
|
||||
b, err := json.MarshalIndent(cfg, "", " ")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return os.WriteFile(path, b, 0o644)
|
||||
}
|
||||
Reference in New Issue
Block a user