package config import ( "encoding/json" "fmt" "io/ioutil" "os" "path" "runtime" ) type FileConfig struct { Path string Name string Type string } func GetDefaultConfigPath() string { var filePath string switch os_name := runtime.GOOS; os_name { case "windows": appData := os.Getenv("APPDATA") filePath = path.Join(appData, "hudly", ".conf") case "darwin": homePath := os.Getenv("HOME") filePath = path.Join(homePath, "Library", "Application Support", "hudly", ".conf") case "linux": homePath := os.Getenv("HOME") filePath = path.Join(homePath, ".config", "hudly", ".conf") default: panic("unknown operating system") } return filePath } type Config struct { ConfigVersion int PlayerName string PlayerUUID string AltNames []string AltUUIDs []string AppFeaturesConfig AppFeaturesConfig } type AppFeaturesConfig struct { CheckGuildChat bool CheckOfficerChat bool CheckPartyChat bool CheckPartyList bool CheckLobbyMessages bool CheckQueueMessages bool CheckInGameMessages bool } func GetDefaultConfig() *Config { return &Config{ ConfigVersion: 1, PlayerName: "", PlayerUUID: "", AltNames: []string{}, AltUUIDs: []string{}, AppFeaturesConfig: AppFeaturesConfig{ CheckGuildChat: true, CheckOfficerChat: false, CheckPartyChat: true, CheckPartyList: true, CheckLobbyMessages: false, CheckQueueMessages: true, CheckInGameMessages: true, }, } } // SaveConfig saves the given config struct to the file in JSON format func SaveConfig(config *Config, filePath string) error { // Convert the config struct to JSON data, err := json.MarshalIndent(config, "", " ") if err != nil { return fmt.Errorf("failed to serialize config: %v", err) } // Write the JSON data to a file err = ioutil.WriteFile(filePath, data, 0644) if err != nil { return fmt.Errorf("failed to write config to file: %v", err) } return nil } // LoadConfig loads the config from the given file path func LoadConfig(filePath string) (*Config, error) { // Check if the file exists if _, err := os.Stat(filePath); os.IsNotExist(err) { return nil, fmt.Errorf("config file does not exist: %s", filePath) } // Read the file content data, err := ioutil.ReadFile(filePath) if err != nil { return nil, fmt.Errorf("failed to read config file: %v", err) } // Create a Config object config := &Config{} // Deserialize the JSON data into the Config object err = json.Unmarshal(data, config) if err != nil { return nil, fmt.Errorf("failed to deserialize config: %v", err) } return config, nil }