47 lines
1.3 KiB
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"]);
|
|
}
|
|
}
|
|
}
|