cleanGlobalTargets method
Cleans a list of global cache targets.
Implementation
Future<CleanResult> cleanGlobalTargets(List<CacheTarget> targets) async {
verboseLogger?.call('Cleaning ${targets.length} global target(s)...');
final deletedPaths = <String>[];
final failedPaths = <String, String>{};
int reclaimedSize = 0;
for (int i = 0; i < targets.length; i++) {
final target = targets[i];
verboseLogger?.call(' [$i/${targets.length}] ${target.type}: ${target.path}');
// Validate that it's a global target
if (!target.isGlobal) {
verboseLogger?.call(' ❌ Not a global cache target');
failedPaths[target.path] = 'Not a global cache target';
continue;
}
// Validate deletion safety
final validationError = SafetyUtils.validateDeletion(
target,
target.path, // For global targets, use the target path itself as root
);
if (validationError != null) {
verboseLogger?.call(' ❌ Validation failed: $validationError');
failedPaths[target.path] = validationError;
continue;
}
// Attempt deletion
verboseLogger?.call(' Deleting ${_formatSize(target.size)}...');
final deleteStart = DateTime.now();
final success = await _deleteTarget(target);
final deleteTime = DateTime.now().difference(deleteStart);
if (success) {
deletedPaths.add(target.path);
reclaimedSize += target.size;
verboseLogger?.call(' ✅ Deleted in ${deleteTime.inMilliseconds / 1000.0}s');
} else {
verboseLogger?.call(' ❌ Failed to delete');
failedPaths[target.path] = 'Failed to delete';
}
}
verboseLogger?.call('Global targets complete: ${deletedPaths.length} deleted, ${failedPaths.length} failed, ${_formatSize(reclaimedSize)} reclaimed');
return CleanResult(
deletedPaths: deletedPaths,
failedPaths: failedPaths,
reclaimedSize: reclaimedSize,
);
}