process method

  1. @override
Future<void> process(
  1. String inputPath,
  2. String outputPath
)
override

Implementation

@override
Future<void> process(String inputPath, String outputPath) async {
  final inputExtension = inputPath.split('.').last;
  final inputPathNoExtension = inputPath.replaceAll('.$inputExtension', '');
  final inputFilenameNoExtension = inputPathNoExtension.split('/').last;

  final inputMedia =
      await _storage.objects.get(
            _bucket,
            inputPath,
            downloadOptions: DownloadOptions.fullMedia,
          )
          as Media;

  final sourceArtifact =
      await getArtifact(inputPath) ??
      (_isLocalMode
          ? Artifact(
            path: inputPath,
            createdAt: DateTime.now(),
            updatedAt: DateTime.now(),
            mimeType: inputMedia.contentType,
          )
          : null);

  if (sourceArtifact == null) {
    throw Exception('Source artifact not found');
  }
  final job = await _jobsService.create(name, sourceArtifact);
  try {
    final outputFile = await processMedia(inputMedia, sourceArtifact);
    if (outputFile != null) {
      final components = outputFile.path.split('.');
      final outputFileExtension =
          components.isNotEmpty ? components.last : '';
      final outputFilename =
          '$outputPath$inputFilenameNoExtension.$outputFileExtension';
      final length = outputFile.lengthSync();
      final fileStream = outputFile.openRead();
      await _storage.objects.insert(
        Object(name: outputFilename, contentType: outputMimeType),
        _bucket,
        uploadMedia: Media(fileStream, length, contentType: outputMimeType),
      );
      await outputFile.delete();

      await logItem(outputFilename, sourceArtifact: sourceArtifact);
    }
    await _jobsService.updateStatus(job.id!, JobStatus.completed);
  } catch (e) {
    await _jobsService.updateStatus(
      job.id!,
      JobStatus.failed,
      error: e.toString(),
    );
  }
}