process method
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(),
);
}
}