stopRecording method

Future<CockpitRecordingResult> stopRecording({
  1. required CockpitRecordingSession session,
})

Implementation

Future<CockpitRecordingResult> stopRecording({
  required CockpitRecordingSession session,
}) async {
  final payload = await _channel
      .invokeMethod<Object?>('stopRecording', <String, Object?>{
        'purpose': session.request.purpose.name,
        'name': session.request.name,
        'relativePath': cockpitRecordingRelativePathFor(session.request),
      });
  if (payload is! Map<Object?, Object?>) {
    throw StateError('Stop recording returned an invalid payload.');
  }

  final bytes = payload['bytes'];
  final state = CockpitRecordingState.fromJson(payload['state']);
  final relativePath = cockpitRecordingRelativePathFor(session.request);

  return CockpitRecordingResult(
    state: state,
    purpose: session.request.purpose,
    recordingKind: payload['recordingKind'] == null
        ? CockpitRecordingKind.nativeScreen
        : CockpitRecordingKind.fromJson(payload['recordingKind']),
    requestedMode: session.request.mode,
    requestedLayer: session.request.layer,
    effectiveLayer: payload['effectiveLayer'] == null
        ? session.request.layer
        : CockpitRecordingLayer.fromJson(payload['effectiveLayer']),
    fallbackUsed: payload['fallbackUsed'] as bool? ?? false,
    fallbackReason: payload['fallbackReason'] as String?,
    artifact: state == CockpitRecordingState.completed
        ? CockpitArtifactRef(role: 'recording', relativePath: relativePath)
        : null,
    durationMs: payload['durationMs'] as int?,
    bytes: bytes == null ? null : (bytes is Uint8List ? bytes : null),
    sourceFilePath: payload['sourceFilePath'] as String?,
    failureReason: payload['failureReason'] as String?,
  );
}