From d78c557cfad6c6495e4f4a3137bca4872f4d9c48 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Thu, 20 Jul 2017 21:41:56 +0200 Subject: [PATCH] correctly set keyserver status on first lookup --- .../keychain/provider/KeyRepository.java | 26 +++++++++++++++++++ .../provider/KeyWritableRepository.java | 6 +++-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeyRepository.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeyRepository.java index a21db2cce..5277cd393 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeyRepository.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeyRepository.java @@ -280,6 +280,32 @@ public class KeyRepository { return lastUpdateTime; } + @Nullable + Boolean getSeenOnKeyservers(long masterKeyId) { + Cursor cursor = mContentResolver.query( + UpdatedKeys.CONTENT_URI, + new String[] { UpdatedKeys.SEEN_ON_KEYSERVERS }, + UpdatedKeys.MASTER_KEY_ID + " = ?", + new String[] { "" + masterKeyId }, + null + ); + if (cursor == null) { + return null; + } + + Boolean seenOnKeyservers; + try { + if (!cursor.moveToNext()) { + return null; + } + seenOnKeyservers = cursor.isNull(0) ? null : cursor.getInt(0) != 0; + } finally { + cursor.close(); + } + return seenOnKeyservers; + } + + public final byte[] loadPublicKeyRingData(long masterKeyId) throws NotFoundException { byte[] data = (byte[]) getGenericDataOrNull(KeyRingData.buildPublicKeyRingUri(masterKeyId), KeyRingData.KEY_RING_DATA, FIELD_TYPE_BLOB); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeyWritableRepository.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeyWritableRepository.java index 74b667e91..5adb992fd 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeyWritableRepository.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeyWritableRepository.java @@ -1349,11 +1349,13 @@ public class KeyWritableRepository extends KeyRepository { } public Uri renewKeyLastUpdatedTime(long masterKeyId, boolean seenOnKeyservers) { + boolean isFirstKeyserverStatusCheck = getSeenOnKeyservers(masterKeyId) == null; + ContentValues values = new ContentValues(); values.put(UpdatedKeys.MASTER_KEY_ID, masterKeyId); values.put(UpdatedKeys.LAST_UPDATED, GregorianCalendar.getInstance().getTimeInMillis() / 1000); - if (seenOnKeyservers) { - values.put(UpdatedKeys.SEEN_ON_KEYSERVERS, true); + if (seenOnKeyservers || isFirstKeyserverStatusCheck) { + values.put(UpdatedKeys.SEEN_ON_KEYSERVERS, seenOnKeyservers); } // this will actually update/replace, doing the right thing™ for seenOnKeyservers value