use batch transactions when writing roster

Fixes https://github.com/siacs/Conversations/issues/1648
This commit is contained in:
Dheeraj CVR 2016-01-13 11:55:46 +04:00
parent 3e9fd0185a
commit ffb49c7217
1 changed files with 3 additions and 0 deletions

View File

@ -577,6 +577,7 @@ public class DatabaseBackend extends SQLiteOpenHelper {
public void writeRoster(final Roster roster) { public void writeRoster(final Roster roster) {
final Account account = roster.getAccount(); final Account account = roster.getAccount();
final SQLiteDatabase db = this.getWritableDatabase(); final SQLiteDatabase db = this.getWritableDatabase();
db.beginTransaction();
for (Contact contact : roster.getContacts()) { for (Contact contact : roster.getContacts()) {
if (contact.getOption(Contact.Options.IN_ROSTER)) { if (contact.getOption(Contact.Options.IN_ROSTER)) {
db.insert(Contact.TABLENAME, null, contact.getContentValues()); db.insert(Contact.TABLENAME, null, contact.getContentValues());
@ -586,6 +587,8 @@ public class DatabaseBackend extends SQLiteOpenHelper {
db.delete(Contact.TABLENAME, where, whereArgs); db.delete(Contact.TABLENAME, where, whereArgs);
} }
} }
db.setTransactionSuccessful();
db.endTransaction();
account.setRosterVersion(roster.getVersion()); account.setRosterVersion(roster.getVersion());
updateAccount(account); updateAccount(account);
} }