migrateSettingsFile function

Future<MigrationResult> migrateSettingsFile(
  1. String path
)

Migrate a settings file in place (with backup).

Implementation

Future<MigrationResult> migrateSettingsFile(String path) async {
  final file = File(path);
  if (!await file.exists()) {
    return MigrationResult(
      success: false,
      fromVersion: 0,
      toVersion: 0,
      errors: ['File not found: $path'],
    );
  }

  final content = await file.readAsString();
  final data = jsonDecode(content) as Map<String, dynamic>;
  final fromVersion = (data['configVersion'] as int?) ?? 1;

  if (fromVersion >= currentConfigVersion) {
    return MigrationResult(
      success: true,
      fromVersion: fromVersion,
      toVersion: fromVersion,
    );
  }

  // Create backup
  final backupPath = '$path.backup.v$fromVersion';
  await file.copy(backupPath);

  final result = await migrateSettings(data);
  if (result.success) {
    await file.writeAsString(const JsonEncoder.withIndent('  ').convert(data));
  }

  return MigrationResult(
    success: result.success,
    fromVersion: result.fromVersion,
    toVersion: result.toVersion,
    migrationsApplied: result.migrationsApplied,
    errors: result.errors,
    backupPath: backupPath,
  );
}