don't load signed prekeys on startup

This commit is contained in:
Daniel Gultsch 2017-05-04 11:03:58 +02:00
parent f47cf7ae67
commit cc1402442a
4 changed files with 35 additions and 7 deletions

View file

@ -602,7 +602,7 @@ public class AxolotlService implements OnAdvancedStreamFeaturesLoaded {
// Validate signedPreKeyRecord + ID // Validate signedPreKeyRecord + ID
SignedPreKeyRecord signedPreKeyRecord; SignedPreKeyRecord signedPreKeyRecord;
int numSignedPreKeys = axolotlStore.loadSignedPreKeys().size(); int numSignedPreKeys = axolotlStore.getSignedPreKeysCount();
try { try {
signedPreKeyRecord = axolotlStore.loadSignedPreKey(bundle.getSignedPreKeyId()); signedPreKeyRecord = axolotlStore.loadSignedPreKey(bundle.getSignedPreKeyId());
if (flush if (flush

View file

@ -79,9 +79,6 @@ public class SQLiteAxolotlStore implements AxolotlStore {
this.mXmppConnectionService = service; this.mXmppConnectionService = service;
this.localRegistrationId = loadRegistrationId(); this.localRegistrationId = loadRegistrationId();
this.currentPreKeyId = loadCurrentPreKeyId(); this.currentPreKeyId = loadCurrentPreKeyId();
for (SignedPreKeyRecord record : loadSignedPreKeys()) {
Log.d(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Got Axolotl signed prekey record:" + record.getId());
}
} }
public int getCurrentPreKeyId() { public int getCurrentPreKeyId() {
@ -415,6 +412,10 @@ public class SQLiteAxolotlStore implements AxolotlStore {
return mXmppConnectionService.databaseBackend.loadSignedPreKeys(account); return mXmppConnectionService.databaseBackend.loadSignedPreKeys(account);
} }
public int getSignedPreKeysCount() {
return mXmppConnectionService.databaseBackend.getSignedPreKeysCount(account);
}
/** /**
* Store a local SignedPreKeyRecord. * Store a local SignedPreKeyRecord.
* *

View file

@ -1086,6 +1086,25 @@ public class DatabaseBackend extends SQLiteOpenHelper {
return prekeys; return prekeys;
} }
public int getSignedPreKeysCount(Account account) {
String[] columns = {"count("+SQLiteAxolotlStore.KEY+")"};
String[] selectionArgs = {account.getUuid()};
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(SQLiteAxolotlStore.SIGNED_PREKEY_TABLENAME,
columns,
SQLiteAxolotlStore.ACCOUNT + "=?",
selectionArgs,
null, null, null);
final int count;
if (cursor.moveToFirst()) {
count = cursor.getInt(0);
} else {
count = 0;
}
cursor.close();
return count;
}
public boolean containsSignedPreKey(Account account, int signedPreKeyId) { public boolean containsSignedPreKey(Account account, int signedPreKeyId) {
Cursor cursor = getCursorForPreKey(account, signedPreKeyId); Cursor cursor = getCursorForPreKey(account, signedPreKeyId);
int count = cursor.getCount(); int count = cursor.getCount();

View file

@ -991,7 +991,9 @@ public class XmppConnectionService extends Service {
} }
}; };
Log.d(Config.LOGTAG,"initializing database...");
this.databaseBackend = DatabaseBackend.getInstance(getApplicationContext()); this.databaseBackend = DatabaseBackend.getInstance(getApplicationContext());
Log.d(Config.LOGTAG,"restoring accounts...");
this.accounts = databaseBackend.getAccounts(); this.accounts = databaseBackend.getAccounts();
if (Config.FREQUENT_RESTARTS_THRESHOLD != 0 if (Config.FREQUENT_RESTARTS_THRESHOLD != 0
@ -1449,6 +1451,8 @@ public class XmppConnectionService extends Service {
for (Account account : this.accounts) { for (Account account : this.accounts) {
accountLookupTable.put(account.getUuid(), account); accountLookupTable.put(account.getUuid(), account);
} }
Log.d(Config.LOGTAG,"restoring conversations...");
final long startTimeConversationsRestore = SystemClock.elapsedRealtime();
this.conversations.addAll(databaseBackend.getConversations(Conversation.STATUS_AVAILABLE)); this.conversations.addAll(databaseBackend.getConversations(Conversation.STATUS_AVAILABLE));
for(Iterator<Conversation> iterator = conversations.listIterator(); iterator.hasNext();) { for(Iterator<Conversation> iterator = conversations.listIterator(); iterator.hasNext();) {
Conversation conversation = iterator.next(); Conversation conversation = iterator.next();
@ -1460,6 +1464,8 @@ public class XmppConnectionService extends Service {
iterator.remove(); iterator.remove();
} }
} }
long diffConversationsRestore = SystemClock.elapsedRealtime() - startTimeConversationsRestore;
Log.d(Config.LOGTAG,"finished restoring conversations in "+diffConversationsRestore+"ms");
Runnable runnable = new Runnable() { Runnable runnable = new Runnable() {
@Override @Override
public void run() { public void run() {
@ -1469,14 +1475,15 @@ public class XmppConnectionService extends Service {
Log.d(Config.LOGTAG, "deleting messages that are older than "+AbstractGenerator.getTimestamp(deletionDate)); Log.d(Config.LOGTAG, "deleting messages that are older than "+AbstractGenerator.getTimestamp(deletionDate));
databaseBackend.expireOldMessages(deletionDate); databaseBackend.expireOldMessages(deletionDate);
} }
Log.d(Config.LOGTAG, "restoring roster"); Log.d(Config.LOGTAG,"restoring roster...");
for (Account account : accounts) { for (Account account : accounts) {
databaseBackend.readRoster(account.getRoster()); databaseBackend.readRoster(account.getRoster());
account.initAccountServices(XmppConnectionService.this); //roster needs to be loaded at this stage account.initAccountServices(XmppConnectionService.this); //roster needs to be loaded at this stage
} }
getBitmapCache().evictAll(); getBitmapCache().evictAll();
loadPhoneContacts(); loadPhoneContacts();
Log.d(Config.LOGTAG, "restoring messages"); Log.d(Config.LOGTAG, "restoring messages...");
final long startMessageRestore = SystemClock.elapsedRealtime();
for (Conversation conversation : conversations) { for (Conversation conversation : conversations) {
conversation.addAll(0, databaseBackend.getMessages(conversation, Config.PAGE_SIZE)); conversation.addAll(0, databaseBackend.getMessages(conversation, Config.PAGE_SIZE));
checkDeletedFiles(conversation); checkDeletedFiles(conversation);
@ -1496,7 +1503,8 @@ public class XmppConnectionService extends Service {
} }
mNotificationService.finishBacklog(false); mNotificationService.finishBacklog(false);
mRestoredFromDatabase = true; mRestoredFromDatabase = true;
Log.d(Config.LOGTAG, "restored all messages"); final long diffMessageRestore = SystemClock.elapsedRealtime() - startMessageRestore;
Log.d(Config.LOGTAG, "finished restoring messages in "+diffMessageRestore+"ms");
updateConversationUi(); updateConversationUi();
} }
}; };