deliver method
Implementation
@override
Future<ChartExportDeliveryResult> deliver(ChartExportFile file) async {
if (adapters.isEmpty) {
return ChartExportDeliveryResult.failure(
file: file,
error: 'No delivery adapters were configured.',
metadata: _metadata(const []),
);
}
final results = <ChartExportDeliveryResult>[];
for (var index = 0; index < adapters.length; index++) {
final result = await _deliverWithAdapter(adapters[index], file);
results.add(result);
if (!result.success && stopOnFirstFailure) {
return ChartExportDeliveryResult.failure(
file: result.file ?? file,
error:
'Composite delivery failed at adapter ${index + 1}/'
'${adapters.length}: ${result.errorText ?? 'Delivery failed.'}',
stackTrace: result.stackTrace,
metadata: _metadata(results),
);
}
}
final failedCount = results.where((result) => !result.success).length;
if (failedCount > 0) {
return ChartExportDeliveryResult.failure(
file: file,
error:
'Composite delivery failed for $failedCount of '
'${adapters.length} adapters.',
metadata: _metadata(results),
);
}
return ChartExportDeliveryResult.success(
file,
metadata: _metadata(results),
);
}