Loading app/core/src/main/java/com/fsck/k9/preferences/StorageEditor.java +1 −3 Original line number Diff line number Diff line Loading @@ -67,16 +67,14 @@ public class StorageEditor { for (String removeKey : removals) { ops.remove(removeKey); } Map<String, String> insertables = new HashMap<>(); for (Entry<String, String> entry : changes.entrySet()) { String key = entry.getKey(); String newValue = entry.getValue(); String oldValue = snapshot.get(key); if (removals.contains(key) || !newValue.equals(oldValue)) { insertables.put(key, newValue); ops.put(key, newValue); } } ops.put(insertables); } @Override Loading app/core/src/main/java/com/fsck/k9/preferences/StoragePersister.java +23 −20 Original line number Diff line number Diff line Loading @@ -73,6 +73,7 @@ public class StoragePersister { StoragePersistOperations storagePersistOperations = new StoragePersistOperations(workingStorage, workingDb); workingDb.beginTransaction(); operationCallback.persist(storagePersistOperations); storagePersistOperations.close(); workingDb.setTransactionSuccessful(); operationCallback.onPersistTransactionSuccess(workingStorage); Loading @@ -83,38 +84,40 @@ public class StoragePersister { } static class StoragePersistOperations { private SQLiteDatabase workingDB; private Map<String, String> workingStorage; private final SQLiteStatement deleteStatement; private final SQLiteStatement insertStatement; private StoragePersistOperations(Map<String, String> workingStorage, SQLiteDatabase workingDb) { this.workingDB = workingDb; private StoragePersistOperations(Map<String, String> workingStorage, SQLiteDatabase database) { this.workingStorage = workingStorage; } void put(Map<String, String> insertables) { String sql = "INSERT INTO preferences_storage (primkey, value) VALUES (?, ?)"; SQLiteStatement stmt = workingDB.compileStatement(sql); for (Map.Entry<String, String> entry : insertables.entrySet()) { String key = entry.getKey(); String value = entry.getValue(); stmt.bindString(1, key); stmt.bindString(2, value); stmt.execute(); stmt.clearBindings(); liveUpdate(key, value); } stmt.close(); insertStatement = database.compileStatement( "INSERT INTO preferences_storage (primkey, value) VALUES (?, ?)"); deleteStatement = database.compileStatement( "DELETE FROM preferences_storage WHERE primkey = ?"); } private void liveUpdate(String key, String value) { void put(String key, String value) { insertStatement.bindString(1, key); insertStatement.bindString(2, value); insertStatement.execute(); insertStatement.clearBindings(); workingStorage.put(key, value); } void remove(String key) { workingDB.delete("preferences_storage", "primkey = ?", new String[] { key }); deleteStatement.bindString(1, key); deleteStatement.executeUpdateDelete(); deleteStatement.clearBindings(); workingStorage.remove(key); } private void close() { insertStatement.close(); deleteStatement.close(); } } interface StoragePersistOperationCallback { Loading Loading
app/core/src/main/java/com/fsck/k9/preferences/StorageEditor.java +1 −3 Original line number Diff line number Diff line Loading @@ -67,16 +67,14 @@ public class StorageEditor { for (String removeKey : removals) { ops.remove(removeKey); } Map<String, String> insertables = new HashMap<>(); for (Entry<String, String> entry : changes.entrySet()) { String key = entry.getKey(); String newValue = entry.getValue(); String oldValue = snapshot.get(key); if (removals.contains(key) || !newValue.equals(oldValue)) { insertables.put(key, newValue); ops.put(key, newValue); } } ops.put(insertables); } @Override Loading
app/core/src/main/java/com/fsck/k9/preferences/StoragePersister.java +23 −20 Original line number Diff line number Diff line Loading @@ -73,6 +73,7 @@ public class StoragePersister { StoragePersistOperations storagePersistOperations = new StoragePersistOperations(workingStorage, workingDb); workingDb.beginTransaction(); operationCallback.persist(storagePersistOperations); storagePersistOperations.close(); workingDb.setTransactionSuccessful(); operationCallback.onPersistTransactionSuccess(workingStorage); Loading @@ -83,38 +84,40 @@ public class StoragePersister { } static class StoragePersistOperations { private SQLiteDatabase workingDB; private Map<String, String> workingStorage; private final SQLiteStatement deleteStatement; private final SQLiteStatement insertStatement; private StoragePersistOperations(Map<String, String> workingStorage, SQLiteDatabase workingDb) { this.workingDB = workingDb; private StoragePersistOperations(Map<String, String> workingStorage, SQLiteDatabase database) { this.workingStorage = workingStorage; } void put(Map<String, String> insertables) { String sql = "INSERT INTO preferences_storage (primkey, value) VALUES (?, ?)"; SQLiteStatement stmt = workingDB.compileStatement(sql); for (Map.Entry<String, String> entry : insertables.entrySet()) { String key = entry.getKey(); String value = entry.getValue(); stmt.bindString(1, key); stmt.bindString(2, value); stmt.execute(); stmt.clearBindings(); liveUpdate(key, value); } stmt.close(); insertStatement = database.compileStatement( "INSERT INTO preferences_storage (primkey, value) VALUES (?, ?)"); deleteStatement = database.compileStatement( "DELETE FROM preferences_storage WHERE primkey = ?"); } private void liveUpdate(String key, String value) { void put(String key, String value) { insertStatement.bindString(1, key); insertStatement.bindString(2, value); insertStatement.execute(); insertStatement.clearBindings(); workingStorage.put(key, value); } void remove(String key) { workingDB.delete("preferences_storage", "primkey = ?", new String[] { key }); deleteStatement.bindString(1, key); deleteStatement.executeUpdateDelete(); deleteStatement.clearBindings(); workingStorage.remove(key); } private void close() { insertStatement.close(); deleteStatement.close(); } } interface StoragePersistOperationCallback { Loading