diff --git a/app/src/main/java/eu/faircode/email/DaoOperation.java b/app/src/main/java/eu/faircode/email/DaoOperation.java index 9936a2c3a5..ac9eb162df 100644 --- a/app/src/main/java/eu/faircode/email/DaoOperation.java +++ b/app/src/main/java/eu/faircode/email/DaoOperation.java @@ -100,6 +100,9 @@ public interface DaoOperation { @Query("SELECT * FROM operation WHERE name = :name") List getOperations(String name); + @Query("SELECT * FROM operation WHERE account = :account AND name = :name") + List getOperations(long account, String name); + @Query("SELECT * FROM operation WHERE id = :id") EntityOperation getOperation(long id); @@ -139,7 +142,4 @@ public interface DaoOperation { @Query("DELETE FROM operation WHERE id = :id") int deleteOperation(long id); - - @Query("DELETE FROM operation WHERE account = :account AND name = :name") - int deleteOperations(long account, String name); } diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index 0ab0cdc2d0..6e6bd7d947 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -1522,8 +1522,14 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences boolean enabled = prefs.getBoolean("enabled", true); int pollInterval = prefs.getInt("poll_interval", DEFAULT_POLL_INTERVAL); if (!enabled || account.ondemand || (pollInterval > 0 && !account.poll_exempted)) { - int syncs = db.operation().deleteOperations(account.id, EntityOperation.SYNC); - Log.i(account.name + " cancelled syncs=" + syncs); + List syncs = db.operation().getOperations(account.id, EntityOperation.SYNC); + if (syncs != null) { + for (EntityOperation op : syncs) { + db.folder().setFolderSyncState(op.folder, null); + db.operation().deleteOperation(op.id); + } + Log.i(account.name + " cancelled syncs=" + syncs.size()); + } } // Long back-off period, let device sleep