startNewTrack method

  1. @override
Future<TrackStartResult> startNewTrack(
  1. TrackStartRequest request
)
override

Implementation

@override
Future<TrackStartResult> startNewTrack(TrackStartRequest request) async {
  _requireOwner(request.owner);
  if (_currentTrack?.isResumable == true ||
      _currentTrack?.status == TrackStatus.active) {
    throw const TrackingConflictException(
      code: 'active_track_conflict',
      message: 'A fake route is already active or resumable.',
    );
  }
  if (!_readiness.canStart) {
    throw const TrackingNotReadyException(
      code: 'tracking_not_ready',
      message: 'Fake readiness blocks Start.',
    );
  }
  final now = _clock().toUtc();
  final id = request.requestedTrackId ?? 'fake-track-${_nextTrack++}';
  final track = Track(
    id: id,
    userId: _owner.userId,
    organizationId: _owner.organizationId,
    routeId:
        request.routeId == null ? null : createRouteId(request.routeId!, now),
    status: TrackStatus.active,
    startedAt: now,
    totalDistanceMeters: 0,
    acceptedPointCount: 0,
    rejectedPointCount: 0,
    segmentCount: 1,
    nextSequence: 1,
    currentSegmentId: '$id-segment-1',
    config: request.config ?? const TrackingConfig(),
  );
  _tracks[id] = track;
  _points[id] = <TrackPoint>[];
  calls.add(
      FakeTrackingCall('startNewTrack', <String, Object?>{'trackId': id}));
  _history.add(
      TrackHistoryEvent(kind: TrackHistoryChangeKind.created, trackId: id));
  _publish();
  return TrackStartResult(
    track: track,
    disposition: TrackStartDisposition.created,
    readiness: _readiness,
  );
}