migrateSettingsFile function
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,
);
}