diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/ImportOperation.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/ImportOperation.java index e1c1db5cf..189d596fd 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/ImportOperation.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/ImportOperation.java @@ -110,20 +110,20 @@ public class ImportOperation extends BaseReadWriteOperation // Overloaded functions for using progressable supplied in constructor during import public ImportKeyResult serialKeyRingImport(Iterator entries, int num, - HkpKeyserverAddress keyserver, ParcelableProxy proxy, boolean skipSave) { - return serialKeyRingImport(entries, num, keyserver, mProgressable, proxy, skipSave); + HkpKeyserverAddress keyserver, ParcelableProxy proxy, boolean skipSave, boolean forceReinsert) { + return serialKeyRingImport(entries, num, keyserver, mProgressable, proxy, skipSave, forceReinsert); } @NonNull private ImportKeyResult serialKeyRingImport(ParcelableFileCache cache, - HkpKeyserverAddress keyserver, ParcelableProxy proxy, boolean skipSave) { + HkpKeyserverAddress keyserver, ParcelableProxy proxy, boolean skipSave, boolean forceReinsert) { // get entries from cached file try { IteratorWithSize it = cache.readCache(); int numEntries = it.getSize(); - return serialKeyRingImport(it, numEntries, keyserver, mProgressable, proxy, skipSave); + return serialKeyRingImport(it, numEntries, keyserver, mProgressable, proxy, skipSave, forceReinsert); } catch (IOException e) { // Special treatment here, we need a lot @@ -148,8 +148,8 @@ public class ImportOperation extends BaseReadWriteOperation */ @NonNull private ImportKeyResult serialKeyRingImport(Iterator entries, int numTotalKeys, - HkpKeyserverAddress hkpKeyserver, Progressable progressable, - @NonNull ParcelableProxy proxy, boolean skipSave) { + HkpKeyserverAddress hkpKeyserver, Progressable progressable, @NonNull ParcelableProxy proxy, + boolean skipSave, boolean forceReinsert) { if (progressable != null) { progressable.setProgress(R.string.progress_importing, 0, 100); } @@ -232,7 +232,7 @@ public class ImportOperation extends BaseReadWriteOperation result = mKeyWritableRepository.saveSecretKeyRing(key, canKeyRings, skipSave); } else { result = mKeyWritableRepository.savePublicKeyRing(key, entry.getExpectedFingerprint(), canKeyRings, - false, skipSave); + forceReinsert, skipSave); } } if (!result.success()) { @@ -490,12 +490,13 @@ public class ImportOperation extends BaseReadWriteOperation List keyList = importInput.getKeyList(); HkpKeyserverAddress keyServer = importInput.getKeyserver(); boolean skipSave = importInput.isSkipSave(); + boolean forceReinsert = importInput.isForceReinsert(); ImportKeyResult result; if (keyList == null) {// import from file, do serially ParcelableFileCache cache = new ParcelableFileCache<>(mContext, CACHE_FILE_NAME); - result = serialKeyRingImport(cache, null, null, skipSave); + result = serialKeyRingImport(cache, null, null, skipSave, forceReinsert); } else { ParcelableProxy proxy; if (cryptoInput.getParcelableProxy() == null) { @@ -510,7 +511,7 @@ public class ImportOperation extends BaseReadWriteOperation proxy = cryptoInput.getParcelableProxy(); } - result = multiThreadedKeyImport(keyList, keyServer, proxy, skipSave); + result = multiThreadedKeyImport(keyList, keyServer, proxy, skipSave, forceReinsert); } if (!skipSave) { @@ -520,9 +521,8 @@ public class ImportOperation extends BaseReadWriteOperation } @NonNull - private ImportKeyResult multiThreadedKeyImport(List keyList, - final HkpKeyserverAddress keyServer, final ParcelableProxy proxy, - final boolean skipSave) { + private ImportKeyResult multiThreadedKeyImport(List keyList, HkpKeyserverAddress keyServer, + ParcelableProxy proxy, boolean skipSave, boolean forceReinsert) { Timber.d("Multi-threaded key import starting"); final Iterator keyListIterator = keyList.iterator(); @@ -551,7 +551,7 @@ public class ImportOperation extends BaseReadWriteOperation ProgressScaler ignoreProgressable = new ProgressScaler(); return serialKeyRingImport(list.iterator(), 1, keyServer, ignoreProgressable, - proxy, skipSave); + proxy, skipSave, forceReinsert); } }; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/KeySyncOperation.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/KeySyncOperation.java index f332eeee2..ba4f5d79e 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/KeySyncOperation.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/KeySyncOperation.java @@ -57,13 +57,13 @@ public class KeySyncOperation extends BaseReadWriteOperation { // no explicit proxy, retrieve from preferences. Check if we should do a staggered sync CryptoInputParcel cryptoInputParcel = CryptoInputParcel.createCryptoInputParcel(); + boolean reinsertAll = input.getRefreshAll(); ImportKeyResult importKeyResult; - if (preferences.getParcelableProxy().isTorEnabled()) { + if (!reinsertAll && preferences.getParcelableProxy().isTorEnabled()) { importKeyResult = staggeredUpdate(staleKeyParcelableKeyRings, cryptoInputParcel); } else { - importKeyResult = - directUpdate(staleKeyParcelableKeyRings, cryptoInputParcel); + importKeyResult = directUpdate(staleKeyParcelableKeyRings, cryptoInputParcel, reinsertAll); } return importKeyResult; } @@ -77,12 +77,12 @@ public class KeySyncOperation extends BaseReadWriteOperation { return result; } - private ImportKeyResult directUpdate(List keyList, - CryptoInputParcel cryptoInputParcel) { + private ImportKeyResult directUpdate(List keyList, CryptoInputParcel cryptoInputParcel, + boolean reinsertAll) { Timber.d("Starting normal update"); ImportOperation importOp = new ImportOperation(mContext, mKeyWritableRepository, mProgressable, mCancelled); return importOp.execute( - ImportKeyringParcel.createImportKeyringParcel(keyList, preferences.getPreferredKeyserver()), + ImportKeyringParcel.createImportKeyringParcel(keyList, preferences.getPreferredKeyserver(), reinsertAll), cryptoInputParcel ); } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/ImportKeyringParcel.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/ImportKeyringParcel.java index 582d19bb7..bf8d20033 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/ImportKeyringParcel.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/ImportKeyringParcel.java @@ -35,31 +35,37 @@ public abstract class ImportKeyringParcel implements Parcelable { @Nullable // must be set if keys are to be imported from a keyserver public abstract HkpKeyserverAddress getKeyserver(); public abstract boolean isSkipSave(); + public abstract boolean isForceReinsert(); public static ImportKeyringParcel createImportKeyringParcel(List keyList, HkpKeyserverAddress keyserver) { - return new AutoValue_ImportKeyringParcel(keyList, keyserver, false); + return new AutoValue_ImportKeyringParcel(keyList, keyserver, false, false); + } + + public static ImportKeyringParcel createImportKeyringParcel(List keyList, + HkpKeyserverAddress keyserver, boolean forceReinsert) { + return new AutoValue_ImportKeyringParcel(keyList, keyserver, false, forceReinsert); } public static ImportKeyringParcel createWithSkipSave(List keyList, HkpKeyserverAddress keyserver) { - return new AutoValue_ImportKeyringParcel(keyList, keyserver, true); + return new AutoValue_ImportKeyringParcel(keyList, keyserver, true, false); } public static ImportKeyringParcel createImportKeyringParcel(ParcelableKeyRing key) { - return new AutoValue_ImportKeyringParcel(Collections.singletonList(key), null, false); + return new AutoValue_ImportKeyringParcel(Collections.singletonList(key), null, false, false); } public static ImportKeyringParcel createFromBytes(byte[] keyData) { ParcelableKeyRing keyRing = ParcelableKeyRing.createFromEncodedBytes(keyData); - return new AutoValue_ImportKeyringParcel(Collections.singletonList(keyRing), null, false); + return new AutoValue_ImportKeyringParcel(Collections.singletonList(keyRing), null, false, false); } public static ImportKeyringParcel createFromFileCacheWithSkipSave() { - return new AutoValue_ImportKeyringParcel(null, null, true); + return new AutoValue_ImportKeyringParcel(null, null, true, false); } public static ImportKeyringParcel createFromFileCache() { - return new AutoValue_ImportKeyringParcel(null, null, false); + return new AutoValue_ImportKeyringParcel(null, null, false, false); } } \ No newline at end of file