78 lines
1.5 KiB
Go
78 lines
1.5 KiB
Go
package gui
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
type Configuration struct {
|
|
Host string `json:"host"`
|
|
Port uint64 `json:"port"`
|
|
Password string `json:"password"`
|
|
IsConnected bool `json:"connected"`
|
|
Panel string `json:"panel"`
|
|
SortField string `json:"sortField"`
|
|
SortDesc bool `json:"sortDesc"`
|
|
ItemSize int `json:"itemSize"`
|
|
}
|
|
|
|
func readConfig(config *Configuration) error {
|
|
filename, filenameErr := getConfigFile()
|
|
if filenameErr != nil {
|
|
return filenameErr
|
|
}
|
|
|
|
file, fileErr := os.Open(filename)
|
|
if fileErr != nil {
|
|
return fileErr
|
|
}
|
|
defer file.Close()
|
|
|
|
return json.NewDecoder(file).Decode(config)
|
|
}
|
|
|
|
func writeConfig(config *Configuration) error {
|
|
filename, filenameErr := getConfigFile()
|
|
if filenameErr != nil {
|
|
return filenameErr
|
|
}
|
|
|
|
file, fileErr := os.Create(filename)
|
|
if fileErr != nil {
|
|
return fileErr
|
|
}
|
|
defer file.Close()
|
|
|
|
encoder := json.NewEncoder(file)
|
|
encoder.SetIndent("", "\t")
|
|
|
|
return encoder.Encode(&config)
|
|
}
|
|
|
|
func getConfigFile() (string, error) {
|
|
configDir, configDirErr := getConfigDir()
|
|
if configDirErr != nil {
|
|
return "", configDirErr
|
|
}
|
|
|
|
createErr := ensureConfigDirExists(configDir)
|
|
if createErr != nil {
|
|
return "", createErr
|
|
}
|
|
|
|
return filepath.Join(configDir, "config.json"), nil
|
|
}
|
|
|
|
func ensureConfigDirExists(folder string) error {
|
|
return os.MkdirAll(folder, 0o750)
|
|
}
|
|
|
|
func getConfigDir() (string, error) {
|
|
configDir, configDirErr := os.UserConfigDir()
|
|
if configDirErr != nil {
|
|
return "", configDirErr
|
|
}
|
|
|
|
return filepath.Join(configDir, "mcg"), nil
|
|
}
|