1
0
mirror of https://github.com/arduino/Arduino.git synced 2025-03-14 11:29:26 +01:00

Compiler now read progress through GRPC

This commit is contained in:
Cristian Maglie 2020-03-17 16:41:56 +01:00
parent b8e8e7842d
commit 7b79ec848e
2 changed files with 14 additions and 6 deletions

View File

@ -207,10 +207,10 @@ public class Compiler implements MessageConsumer {
CompileResult result;
try {
MessageConsumerOutputStream out = new MessageConsumerOutputStream(new ProgressAwareMessageConsumer(new I18NAwareMessageConsumer(System.out, System.err), progListeners), "\n");
MessageConsumerOutputStream out = new MessageConsumerOutputStream(new I18NAwareMessageConsumer(System.out, System.err), "\n");
MessageConsumerOutputStream err = new MessageConsumerOutputStream(new I18NAwareMessageConsumer(System.err, this), "\n");
result = core.compile(req.build(), out, err);
result = core.compile(req.build(), out, err, progListeners);
out.flush();
err.flush();
@ -221,7 +221,7 @@ public class Compiler implements MessageConsumer {
if (exception != null)
throw exception;
if (result == CompileResult.error) {
if (result == CompileResult.compile_error) {
RunnerException re = new RunnerException(I18n.format(tr("Error compiling for board {0}."), board.getName()));
re.hideStackTrace();
throw re;

View File

@ -39,6 +39,7 @@ import java.util.List;
import com.google.protobuf.ByteString;
import cc.arduino.CompilerProgressListener;
import cc.arduino.cli.commands.ArduinoCoreGrpc.ArduinoCoreBlockingStub;
import cc.arduino.cli.commands.Board.BoardDetailsReq;
import cc.arduino.cli.commands.Board.BoardDetailsResp;
@ -91,14 +92,14 @@ public class ArduinoCoreInstance {
}
}
public CompileResult compile(CompileReq req, OutputStream out,
OutputStream err) throws StatusException {
public CompileResult compile(CompileReq req, OutputStream out, OutputStream err,
List<CompilerProgressListener> progressListeners) throws StatusException {
req = CompileReq.newBuilder(req) //
.setInstance(instance) //
.build();
try {
Iterator<CompileResp> stream = stub.compile(req);
CompileResult result = CompileResult.error;
CompileResult result = CompileResult.compile_error;
while (stream.hasNext()) {
CompileResp resp = stream.next();
try {
@ -108,6 +109,13 @@ public class ArduinoCoreInstance {
ByteString errdata = resp.getErrStream();
if (errdata != null)
err.write(errdata.toByteArray());
TaskProgress taskProgress = resp.getTaskProgress();
if (taskProgress != null) {
float progress = taskProgress.getPercentCompleted();
if (progress > 0) {
progressListeners.forEach(l -> l.progress((int) progress));
}
}
} catch (IOException e) {
e.printStackTrace();
}