pullImage method

LogStream<ImagePullResult> pullImage({
  1. required String tag,
  2. List<DockerSecret> credentials = const [],
})

Implementation

LogStream<ImagePullResult> pullImage({required String tag, List<DockerSecret> credentials = const []}) {
  final requestId = Uuid().v4().toString();
  final controller = StreamController<String>();
  final completer = Completer<ImagePullResult>();
  final progress = StreamController<LogProgress>();

  final stream = LogStream<ImagePullResult>._(completer, controller.stream, progress.stream, () async {
    await room.sendRequest('containers.stop_logs', {'request_id': requestId});
  });
  _loggers[requestId] = controller;
  _progress[requestId] = progress;

  final req = _ImagePullRequest(requestId: requestId, tag: tag, credentials: credentials);

  room
      .sendRequest("containers.pull_image", req.toJson())
      .then(
        (result) {
          final json = result as JsonResponse;

          controller.close();
          completer.complete(ImagePullResult(logs: (json.json["logs"] as List).map((l) => l as String).toList()));
          _loggers.remove(requestId);
        },
        onError: (error) {
          controller.close();
          completer.completeError(error);
          _loggers.remove(requestId);
        },
      );

  return stream;
}