Roadbound-BRR/lib/services/brr_export_service.dart

47 lines
1.3 KiB
Dart

import "dart:typed_data";
import "package:flutter/foundation.dart";
import "../models/operations/trip.dart";
import "../models/brr_metadata.dart";
import "../exporters/brr_exporter.dart";
import "../exporters/arriva_brr_exporter.dart";
import "../exporters/stagecoach_brr_exporter.dart";
enum BRROperator { arriva, stagecoach }
class ExportResult {
final Uint8List? bytes;
final List<String> errors;
bool get isSuccess => errors.isEmpty;
ExportResult.success(this.bytes) : errors = [];
ExportResult.error(this.errors) : bytes = null;
}
class BRRExportService {
final BRROperator operator;
BRRExportService({this.operator = BRROperator.arriva});
BRRExporter get _exporter {
switch (operator) {
case BRROperator.arriva:
return ArrivaBRRExporter();
case BRROperator.stagecoach:
return StagecoachBRRExporter();
}
}
Future<ExportResult> exportBRR(
List<Trip> trips,
BRRMetadata metadata,
) async {
try {
final bytes = await _exporter.export(trips, metadata);
return ExportResult.success(bytes);
} catch (e, stackTrace) {
debugPrint("[BRRExportService] exportBRR failed: $e");
debugPrintStack(stackTrace: stackTrace);
return ExportResult.error(["Export failed: $e"]);
}
}
}