added retry on upload failure
This commit is contained in:
@@ -41,6 +41,7 @@ import org.sufficientlysecure.keychain.service.ExportKeyringParcel;
|
||||
import org.sufficientlysecure.keychain.service.PassphraseCacheService;
|
||||
import org.sufficientlysecure.keychain.service.SaveKeyringParcel;
|
||||
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
|
||||
import org.sufficientlysecure.keychain.service.input.RequiredInputParcel;
|
||||
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
|
||||
import org.sufficientlysecure.keychain.util.ProgressScaler;
|
||||
|
||||
@@ -137,13 +138,14 @@ public class EditKeyOperation extends BaseOperation<SaveKeyringParcel> {
|
||||
new ExportKeyringParcel(saveParcel.getUploadKeyserver(), ring);
|
||||
ExportResult uploadResult =
|
||||
new ExportOperation(mContext, mProviderHelper, mProgressable)
|
||||
.execute(exportKeyringParcel, cryptoInput);
|
||||
.execute(exportKeyringParcel, cryptoInput);
|
||||
if (uploadResult.isPending()) {
|
||||
return uploadResult;
|
||||
} else if (!uploadResult.success() && saveParcel.isUploadAtomic()) {
|
||||
// if atomic, update fail implies edit operation should also fail and not save
|
||||
log.add(uploadResult, 2);
|
||||
return new EditKeyResult(EditKeyResult.RESULT_ERROR, log, saveParcel.mMasterKeyId);
|
||||
return new EditKeyResult(log, RequiredInputParcel.createRetryUploadOperation(),
|
||||
cryptoInput);
|
||||
} else {
|
||||
// upload succeeded or not atomic so we continue
|
||||
log.add(uploadResult, 2);
|
||||
|
||||
@@ -91,6 +91,8 @@ public class ExportOperation extends BaseOperation<ExportKeyringParcel> {
|
||||
}
|
||||
|
||||
public ExportResult uploadKeyRingToServer(HkpKeyserver server, UncachedKeyRing keyring, Proxy proxy) {
|
||||
mProgressable.setProgress(R.string.progress_uploading, 0, 1);
|
||||
|
||||
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
||||
ArmoredOutputStream aos = null;
|
||||
OperationLog log = new OperationLog();
|
||||
@@ -119,6 +121,7 @@ public class ExportOperation extends BaseOperation<ExportKeyringParcel> {
|
||||
log.add(LogType.MSG_EXPORT_ERROR_UPLOAD, 1);
|
||||
return new ExportResult(ExportResult.RESULT_ERROR, log);
|
||||
} finally {
|
||||
mProgressable.setProgress(R.string.progress_uploading, 1, 1);
|
||||
try {
|
||||
if (aos != null) {
|
||||
aos.close();
|
||||
|
||||
@@ -20,6 +20,9 @@ package org.sufficientlysecure.keychain.operations.results;
|
||||
|
||||
import android.os.Parcel;
|
||||
|
||||
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
|
||||
import org.sufficientlysecure.keychain.service.input.RequiredInputParcel;
|
||||
|
||||
public class EditKeyResult extends InputPendingResult {
|
||||
|
||||
public final Long mMasterKeyId;
|
||||
@@ -29,6 +32,12 @@ public class EditKeyResult extends InputPendingResult {
|
||||
mMasterKeyId = masterKeyId;
|
||||
}
|
||||
|
||||
public EditKeyResult(OperationLog log, RequiredInputParcel requiredInput,
|
||||
CryptoInputParcel cryptoInputParcel) {
|
||||
super(log, requiredInput, cryptoInputParcel);
|
||||
mMasterKeyId = null;
|
||||
}
|
||||
|
||||
public EditKeyResult(Parcel source) {
|
||||
super(source);
|
||||
mMasterKeyId = source.readInt() != 0 ? source.readLong() : null;
|
||||
|
||||
Reference in New Issue
Block a user