Add support for writing modified config file to disk

This commit is contained in:
2023-02-25 01:03:19 -07:00
parent 8a901413a8
commit 14390a27b2
+34 -15
View File
@@ -27,49 +27,68 @@ func getConfigDir(n string) string {
}
func (c *Config[T]) Get() (bool, error) {
config_dir := getConfigDir(c.Name)
configDir := getConfigDir(c.Name)
err := os.MkdirAll(config_dir, 0755)
err := os.MkdirAll(configDir, 0755)
if err != nil {
return false, fmt.Errorf("Could not create config directory: %v", err)
return false, fmt.Errorf("Could not create config directory: %w", err)
}
configFile := filepath.Join(config_dir, c.Filename+".toml")
c.ConfigFile = &configFile
configFilepath := filepath.Join(configDir, c.Filename+".toml")
c.ConfigFile = &configFilepath
// open file, creating it if empty
config_file, err := os.OpenFile(*c.ConfigFile, os.O_RDWR|os.O_CREATE, 0755)
defer config_file.Close()
configFile, err := os.OpenFile(*c.ConfigFile, os.O_RDWR|os.O_CREATE, 0755)
defer configFile.Close()
if err != nil {
return false, fmt.Errorf("Could not open config file: %v", err)
return false, fmt.Errorf("Could not open config file: %w", err)
}
fi, err := config_file.Stat()
fi, err := configFile.Stat()
if err != nil {
return false, fmt.Errorf("Could not get config file size: %v", err)
return false, fmt.Errorf("Could not get config file size: %w", err)
}
if fi.Size() == 0 {
// if file is empty, write default config
data, err := toml.Marshal(c.Config)
if err != nil {
return false, fmt.Errorf("Could not write default config to file: %v", err)
return false, fmt.Errorf("Could not write default config to file: %w", err)
}
config_file.Write(data)
configFile.Write(data)
// return nil as the user must edit the config file
return true, nil
} else {
// try to parse config file
data, err := ioutil.ReadAll(config_file)
data, err := ioutil.ReadAll(configFile)
if err != nil {
return false, fmt.Errorf("Could not read data from config file: %v", err)
return false, fmt.Errorf("Could not read data from config file: %w", err)
}
err = toml.Unmarshal(data, &c.Config)
if err != nil {
return false, fmt.Errorf("Could not parse config file contents: %v", err)
return false, fmt.Errorf("Could not parse config file contents: %w", err)
}
return false, nil
}
}
func (c *Config[T]) Write() error {
configDir := getConfigDir(c.Name)
configFilepath := filepath.Join(configDir)
data, err := toml.Marshal(c.Config)
if err != nil {
return fmt.Errorf("Could not marshal config: %w", err)
}
configFile, err := os.OpenFile(*c.ConfigFile, os.O_RDWR, 0755)
defer configFile.Close()
_, err = configFile.Write(data)
if err != nil {
return fmt.Errorf("Could not write to config file: %w", err)
}
return nil
}