properly error out if upload fails. fixes #4052

This commit is contained in:
Daniel Gultsch 2021-04-09 15:49:33 +02:00
parent 37ce311764
commit 202bde46ed
1 changed files with 13 additions and 11 deletions

View File

@ -44,7 +44,6 @@ public class HttpUploadConnection implements Transferable, AbstractConnectionMan
private boolean delayed = false; private boolean delayed = false;
private DownloadableFile file; private DownloadableFile file;
private final Message message; private final Message message;
private String mime;
private SlotRequester.Slot slot; private SlotRequester.Slot slot;
private byte[] key = null; private byte[] key = null;
@ -86,11 +85,14 @@ public class HttpUploadConnection implements Transferable, AbstractConnectionMan
public void cancel() { public void cancel() {
final ListenableFuture<SlotRequester.Slot> slotFuture = this.slotFuture; final ListenableFuture<SlotRequester.Slot> slotFuture = this.slotFuture;
if (slotFuture != null && !slotFuture.isDone()) { if (slotFuture != null && !slotFuture.isDone()) {
slotFuture.cancel(true); if (slotFuture.cancel(true)) {
Log.d(Config.LOGTAG,"cancelled slot requester");
}
} }
final Call call = this.mostRecentCall; final Call call = this.mostRecentCall;
if (call != null && !call.isCanceled()) { if (call != null && !call.isCanceled()) {
call.cancel(); call.cancel();
Log.d(Config.LOGTAG,"cancelled HTTP request");
} }
} }
@ -102,11 +104,6 @@ public class HttpUploadConnection implements Transferable, AbstractConnectionMan
mXmppConnectionService.markMessage(message, Message.STATUS_SEND_FAILED, cancelled ? Message.ERROR_MESSAGE_CANCELLED : errorMessage); mXmppConnectionService.markMessage(message, Message.STATUS_SEND_FAILED, cancelled ? Message.ERROR_MESSAGE_CANCELLED : errorMessage);
} }
private void markAsCancelled() {
finish();
mXmppConnectionService.markMessage(message, Message.STATUS_SEND_FAILED, Message.ERROR_MESSAGE_CANCELLED);
}
private void finish() { private void finish() {
mHttpConnectionManager.finishUploadConnection(this); mHttpConnectionManager.finishUploadConnection(this);
message.setTransferable(null); message.setTransferable(null);
@ -115,10 +112,11 @@ public class HttpUploadConnection implements Transferable, AbstractConnectionMan
public void init(boolean delay) { public void init(boolean delay) {
final Account account = message.getConversation().getAccount(); final Account account = message.getConversation().getAccount();
this.file = mXmppConnectionService.getFileBackend().getFile(message, false); this.file = mXmppConnectionService.getFileBackend().getFile(message, false);
final String mime;
if (message.getEncryption() == Message.ENCRYPTION_PGP || message.getEncryption() == Message.ENCRYPTION_DECRYPTED) { if (message.getEncryption() == Message.ENCRYPTION_PGP || message.getEncryption() == Message.ENCRYPTION_DECRYPTED) {
this.mime = "application/pgp-encrypted"; mime = "application/pgp-encrypted";
} else { } else {
this.mime = this.file.getMimeType(); mime = this.file.getMimeType();
} }
final long originalFileSize = file.getSize(); final long originalFileSize = file.getSize();
this.delayed = delay; this.delayed = delay;
@ -136,7 +134,11 @@ public class HttpUploadConnection implements Transferable, AbstractConnectionMan
@Override @Override
public void onSuccess(@NullableDecl SlotRequester.Slot result) { public void onSuccess(@NullableDecl SlotRequester.Slot result) {
HttpUploadConnection.this.slot = result; HttpUploadConnection.this.slot = result;
try {
HttpUploadConnection.this.upload(); HttpUploadConnection.this.upload();
} catch (final Exception e) {
fail(e.getMessage());
}
} }
@Override @Override
@ -171,7 +173,7 @@ public class HttpUploadConnection implements Transferable, AbstractConnectionMan
} }
@Override @Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { public void onResponse(@NotNull Call call, @NotNull Response response) {
final int code = response.code(); final int code = response.code();
if (code == 200 || code == 201) { if (code == 200 || code == 201) {
Log.d(Config.LOGTAG, "finished uploading file"); Log.d(Config.LOGTAG, "finished uploading file");