updateTrackingConfig method

  1. @override
Future<TrackingConfigurationUpdateResult> updateTrackingConfig(
  1. TrackingConfig config
)
override

Implementation

@override
Future<TrackingConfigurationUpdateResult> updateTrackingConfig(
  TrackingConfig config,
) async {
  config.validate(context: 'Fake runtime TrackingConfig');
  final track = _requireCurrent();
  if (track.status != TrackStatus.active) {
    throw StateError('A fake route must be active to update configuration.');
  }
  final updated = Track(
    id: track.id,
    userId: track.userId,
    organizationId: track.organizationId,
    routeId: track.routeId,
    status: track.status,
    startedAt: track.startedAt,
    pausedAt: track.pausedAt,
    resumedAt: track.resumedAt,
    endedAt: track.endedAt,
    totalDistanceMeters: track.totalDistanceMeters,
    acceptedPointCount: track.acceptedPointCount,
    rejectedPointCount: track.rejectedPointCount,
    segmentCount: track.segmentCount,
    nextSequence: track.nextSequence,
    currentSegmentId: track.currentSegmentId,
    lastPointAt: track.lastPointAt,
    completionReason: track.completionReason,
    config: config,
  );
  _tracks[track.id] = updated;
  final now = _clock().toUtc();
  final epoch = TrackingConfigurationEpoch(
    id: 'fake-epoch-${track.id}-${track.nextSequence}',
    trackId: track.id,
    epochNumber: track.segmentCount + 1,
    resolvedConfig: config,
    presetDefinitionVersion: TrackingPolicyVersions.presetDefinition,
    qualityPolicyVersion: TrackingPolicyVersions.qualityPolicy,
    createdAt: now,
    activationSequence: track.nextSequence,
    activatedAt: now,
  );
  calls.add(FakeTrackingCall(
    'updateTrackingConfig',
    <String, Object?>{'trackId': track.id},
  ));
  _publish();
  return TrackingConfigurationUpdateResult(
    trackId: track.id,
    epoch: epoch,
    resumedCapture: true,
  );
}