loadConfig function

Future<AppConfig> loadConfig()

Reads the TOML configuration file from the cross-platform user config directory.

Implementation

Future<AppConfig> loadConfig() async {
  // Note: Return type is now AppConfig (non-nullable)
  try {
    // 1. Determine the Config Directory using the pure Dart helper
    final String baseConfigPath = configDir;

    if (baseConfigPath.isEmpty) {
      throw Exception(
        "Could not determine configuration directory for the current OS.",
      );
    }

    // 2. Locate the File
    // Note: We use baseConfigPath directly, NOT Directory(baseConfigPath)
    final String configPath = p.join(baseConfigPath, appName, configFileName);

    // 2.5. Create the config file with default values if it doesn't exist
    final File configFile = File(configPath);
    if (!configFile.existsSync()) {
      await _createDefaultConfigFile(configPath);
    }

    // 3. Read and Parse the TOML
    final TomlDocument document = await TomlDocument.load(configPath);
    final Map<String, dynamic> rootMap = document.toMap();

    // 4. Convert to Strongly-Typed Class
    final AppConfig config = AppConfig.fromMap(rootMap);

    print('✅ Config file loaded and parsed successfully from: $configPath');
    return config;
  } on TomlParserException catch (e) {
    print('❌ ERROR: Failed to parse TOML configuration file. Check syntax.');
    print('Returning default configuration due to parsing error.');
    print(e.message);
    return defaultAppConfig; // Return default on parsing failure
  } on FileSystemException catch (e) {
    print('❌ ERROR: File system error while accessing config file.');
    print('Returning default configuration due to file error.');
    print(e.message);
    return defaultAppConfig; // Return default on file access failure
  } catch (e) {
    print('❌ An unexpected error occurred: $e');
    print('Returning default configuration.');
    return defaultAppConfig; // Return default for any other error
  }
}