package cmd import ( "context" "reflect" "strings" "strconv" "fmt" "os" "os/exec" "git.pixelridgesoftworks.com/BackGo/config" ) func OpenConfigInNano() error { configFilePath := config.GetConfigFilePath() cmd := exec.Command("nano", configFilePath) cmd.Stdin, cmd.Stdout, cmd.Stderr = os.Stdin, os.Stdout, os.Stderr err := cmd.Run() if err != nil { return fmt.Errorf("error opening config in nano: %v", err) } return nil } func EditConfigOption(ctx context.Context, optionName, newValue string) error { cfg, err := config.LoadConfigFromFile() if err != nil { return fmt.Errorf("loading config: %v", err) } if err := setConfigOption(cfg, optionName, newValue); err != nil { return err } if err := config.SaveConfigToFile(cfg); err != nil { return fmt.Errorf("saving config: %v", err) } return nil } func setConfigOption(cfg *config.Config, optionName, newValue string) error { rConfig := reflect.ValueOf(cfg).Elem() field := rConfig.FieldByNameFunc(func(s string) bool { return strings.EqualFold(s, optionName) }) if !field.IsValid() { return fmt.Errorf("unknown configuration option: %s", optionName) } if !field.CanSet() { return fmt.Errorf("cannot set configuration option: %s", optionName) } switch field.Kind() { case reflect.String: field.SetString(newValue) case reflect.Bool: boolVal, err := strconv.ParseBool(newValue) if err != nil { return fmt.Errorf("invalid value for %s: %v", optionName, err) } field.SetBool(boolVal) case reflect.Int, reflect.Int64: intVal, err := strconv.ParseInt(newValue, 10, 64) if err != nil { return fmt.Errorf("invalid value for %s: %v", optionName, err) } field.SetInt(intVal) default: return fmt.Errorf("unsupported configuration type for: %s", optionName) } return nil }