From a54ae08fbcbba94749feb01aa62e992a6ac07456 Mon Sep 17 00:00:00 2001 From: M66B Date: Fri, 1 Mar 2019 14:32:18 +0000 Subject: [PATCH] Removed per account on demand sync --- .../main/java/eu/faircode/email/ActivityMain.java | 2 +- app/src/main/java/eu/faircode/email/DaoAccount.java | 13 ++++--------- app/src/main/java/eu/faircode/email/DaoFolder.java | 13 +++++-------- .../main/java/eu/faircode/email/DaoOperation.java | 4 ++-- .../main/java/eu/faircode/email/EntityAccount.java | 5 +---- .../java/eu/faircode/email/EntityOperation.java | 6 +++--- .../java/eu/faircode/email/FragmentAccount.java | 9 --------- .../java/eu/faircode/email/FragmentFolders.java | 2 +- .../java/eu/faircode/email/FragmentMessages.java | 2 +- .../java/eu/faircode/email/FragmentOptions.java | 2 +- .../main/java/eu/faircode/email/FragmentSetup.java | 2 +- .../java/eu/faircode/email/ServiceSynchronize.java | 13 ++++--------- .../main/java/eu/faircode/email/TupleFolderEx.java | 2 -- app/src/main/res/layout/fragment_account.xml | 13 ++----------- app/src/main/res/values/strings.xml | 1 - 15 files changed, 26 insertions(+), 63 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ActivityMain.java b/app/src/main/java/eu/faircode/email/ActivityMain.java index 0e5ddaa0cf..b1593834ad 100644 --- a/app/src/main/java/eu/faircode/email/ActivityMain.java +++ b/app/src/main/java/eu/faircode/email/ActivityMain.java @@ -49,7 +49,7 @@ public class ActivityMain extends AppCompatActivity implements FragmentManager.O new SimpleTask>() { @Override protected List onExecute(Context context, Bundle args) { - return DB.getInstance(context).account().getSynchronizingAccounts(true); + return DB.getInstance(context).account().getSynchronizingAccounts(); } @Override diff --git a/app/src/main/java/eu/faircode/email/DaoAccount.java b/app/src/main/java/eu/faircode/email/DaoAccount.java index 5aecda365c..15df8e51fc 100644 --- a/app/src/main/java/eu/faircode/email/DaoAccount.java +++ b/app/src/main/java/eu/faircode/email/DaoAccount.java @@ -32,10 +32,8 @@ public interface DaoAccount { @Query("SELECT * FROM account") List getAccounts(); - @Query("SELECT * FROM account" + - " WHERE synchronize" + - " AND (:all OR NOT ondemand)") - List getSynchronizingAccounts(boolean all); + @Query("SELECT * FROM account WHERE synchronize") + List getSynchronizingAccounts(); @Query("SELECT * FROM account WHERE tbd = 1") List getAccountsTbd(); @@ -43,9 +41,7 @@ public interface DaoAccount { @Query("SELECT * FROM account") LiveData> liveAccounts(); - @Query("SELECT * FROM account" + - " WHERE synchronize") - // including on demand + @Query("SELECT * FROM account WHERE synchronize") LiveData> liveSynchronizingAccounts(); @Query("SELECT *" + @@ -78,12 +74,11 @@ public interface DaoAccount { @Query("SELECT" + " (SELECT COUNT(account.id) FROM account" + " WHERE synchronize" + - " AND NOT ondemand" + " AND state = 'connected') AS accounts" + ", (SELECT COUNT(operation.id) FROM operation" + " JOIN folder ON folder.id = operation.folder" + " JOIN account ON account.id = folder.account" + // not outbox - " WHERE account.synchronize) AS operations") // including on demand + " WHERE account.synchronize) AS operations") LiveData liveStats(); @Query("SELECT account.id, swipe_left, l.type AS left_type, swipe_right, r.type AS right_type" + diff --git a/app/src/main/java/eu/faircode/email/DaoFolder.java b/app/src/main/java/eu/faircode/email/DaoFolder.java index 838ea824ac..802546e8b8 100644 --- a/app/src/main/java/eu/faircode/email/DaoFolder.java +++ b/app/src/main/java/eu/faircode/email/DaoFolder.java @@ -36,8 +36,8 @@ public interface DaoFolder { @Query("SELECT folder.* FROM folder" + " JOIN account ON account.id = folder.account" + " WHERE folder.synchronize" + - " AND (account.synchronize AND NOT account.ondemand)") - List getFoldersAutoSync(); + " AND account.synchronize") + List getSynchronizingFolders(); @Query("SELECT folder.* FROM folder" + " JOIN account ON account.id = folder.account" + @@ -52,8 +52,7 @@ public interface DaoFolder { EntityFolder getBrowsableFolder(long folder, boolean search); @Query("SELECT folder.*" + - ", account.name AS accountName, account.color AS accountColor" + - ", account.state AS accountState, account.ondemand AS accountOnDemand" + + ", account.name AS accountName, account.color AS accountColor, account.state AS accountState" + ", COUNT(message.id) AS messages" + ", SUM(CASE WHEN message.content = 1 THEN 1 ELSE 0 END) AS content" + ", SUM(CASE WHEN message.ui_seen = 0 THEN 1 ELSE 0 END) AS unseen" + @@ -68,8 +67,7 @@ public interface DaoFolder { LiveData> liveFolders(Long account); @Query("SELECT folder.*" + - ", account.name AS accountName, account.color AS accountColor" + - ", account.state AS accountState, account.ondemand AS accountOnDemand" + + ", account.name AS accountName, account.color AS accountColor, account.state AS accountState" + ", COUNT(message.id) AS messages" + ", SUM(CASE WHEN message.content = 1 THEN 1 ELSE 0 END) AS content" + ", SUM(CASE WHEN message.ui_seen = 0 THEN 1 ELSE 0 END) AS unseen" + @@ -87,8 +85,7 @@ public interface DaoFolder { LiveData livePrimaryDrafts(); @Query("SELECT folder.*" + - ", account.name AS accountName, account.color AS accountColor" + - ", account.state AS accountState, account.ondemand AS accountOnDemand" + + ", account.name AS accountName, account.color AS accountColor, account.state AS accountState" + ", COUNT(message.id) AS messages" + ", SUM(CASE WHEN message.content = 1 THEN 1 ELSE 0 END) AS content" + ", SUM(CASE WHEN message.ui_seen = 0 THEN 1 ELSE 0 END) AS unseen" + diff --git a/app/src/main/java/eu/faircode/email/DaoOperation.java b/app/src/main/java/eu/faircode/email/DaoOperation.java index 91ba2a5e0a..786db60752 100644 --- a/app/src/main/java/eu/faircode/email/DaoOperation.java +++ b/app/src/main/java/eu/faircode/email/DaoOperation.java @@ -29,7 +29,7 @@ import androidx.room.Query; @Dao public interface DaoOperation { @Query("SELECT operation.*, account.name AS accountName, folder.name AS folderName" + - " ,((account.synchronize IS NULL OR account.synchronize)" + // including on demand + " ,((account.synchronize IS NULL OR account.synchronize)" + " AND (NOT folder.account IS NULL OR identity.synchronize IS NULL OR identity.synchronize)) AS synchronize" + " FROM operation" + " JOIN folder ON folder.id = operation.folder" + @@ -50,7 +50,7 @@ public interface DaoOperation { " LEFT JOIN account ON account.id = message.account" + " LEFT JOIN identity ON identity.id = message.identity" + " WHERE operation.folder = :folder" + - " AND (account.synchronize IS NULL OR account.synchronize)" + // including on demand + " AND (account.synchronize IS NULL OR account.synchronize)" + " AND (NOT folder.account IS NULL OR identity.synchronize IS NULL OR identity.synchronize)" + " ORDER BY" + " CASE WHEN operation.name = '" + EntityOperation.SYNC + "' THEN" + diff --git a/app/src/main/java/eu/faircode/email/EntityAccount.java b/app/src/main/java/eu/faircode/email/EntityAccount.java index 2e3dc35bd6..1430e9162a 100644 --- a/app/src/main/java/eu/faircode/email/EntityAccount.java +++ b/app/src/main/java/eu/faircode/email/EntityAccount.java @@ -72,7 +72,7 @@ public class EntityAccount implements Serializable { @NonNull public Boolean synchronize; @NonNull - public Boolean ondemand = false; + public Boolean ondemand = false; // obsolete @NonNull public Boolean primary; @NonNull @@ -131,7 +131,6 @@ public class EntityAccount implements Serializable { json.put("color", color); json.put("synchronize", synchronize); - json.put("ondemand", ondemand); json.put("primary", primary); json.put("notify", notify); json.put("browse", browse); @@ -167,8 +166,6 @@ public class EntityAccount implements Serializable { account.color = json.getInt("color"); account.synchronize = json.getBoolean("synchronize"); - if (json.has("ondemand")) - account.ondemand = json.getBoolean("ondemand"); account.primary = json.getBoolean("primary"); if (json.has("notify")) account.notify = json.getBoolean("notify"); diff --git a/app/src/main/java/eu/faircode/email/EntityOperation.java b/app/src/main/java/eu/faircode/email/EntityOperation.java index 114535d6ed..882d9ff770 100644 --- a/app/src/main/java/eu/faircode/email/EntityOperation.java +++ b/app/src/main/java/eu/faircode/email/EntityOperation.java @@ -115,7 +115,7 @@ public class EntityOperation { operation.created = new Date().getTime(); operation.id = db.operation().insertOperation(operation); - if (account != null && (account.ondemand || !"connected".equals(account.state))) { + if (account != null && !"connected".equals(account.state)) { db.folder().setFolderState(fid, "waiting"); db.folder().setFolderSyncState(fid, "manual"); } else @@ -123,7 +123,7 @@ public class EntityOperation { if (account == null) // Outbox ServiceSend.start(context); - else if (account.ondemand || !"connected".equals(account.state)) + else if (!"connected".equals(account.state)) ServiceUI.process(context, fid); Log.i("Queued sync folder=" + folder); @@ -255,7 +255,7 @@ public class EntityOperation { ServiceSend.start(context); else { EntityAccount account = db.account().getAccount(message.account); - if (account.ondemand) + if (account != null && !"connected".equals(account.state)) ServiceUI.process(context, operation.folder); } } diff --git a/app/src/main/java/eu/faircode/email/FragmentAccount.java b/app/src/main/java/eu/faircode/email/FragmentAccount.java index a3136a1361..103b9e0d5e 100644 --- a/app/src/main/java/eu/faircode/email/FragmentAccount.java +++ b/app/src/main/java/eu/faircode/email/FragmentAccount.java @@ -109,7 +109,6 @@ public class FragmentAccount extends FragmentBase { private Button btnAdvanced; private CheckBox cbSynchronize; - private CheckBox cbOnDemand; private CheckBox cbPrimary; private CheckBox cbNotify; private CheckBox cbBrowse; @@ -188,7 +187,6 @@ public class FragmentAccount extends FragmentBase { btnAdvanced = view.findViewById(R.id.btnAdvanced); cbSynchronize = view.findViewById(R.id.cbSynchronize); - cbOnDemand = view.findViewById(R.id.cbOnDemand); cbPrimary = view.findViewById(R.id.cbPrimary); cbNotify = view.findViewById(R.id.cbNotify); cbBrowse = view.findViewById(R.id.cbBrowse); @@ -390,7 +388,6 @@ public class FragmentAccount extends FragmentBase { cbSynchronize.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { - cbOnDemand.setEnabled(checked); cbPrimary.setEnabled(checked); } }); @@ -762,7 +759,6 @@ public class FragmentAccount extends FragmentBase { args.putInt("color", color); args.putBoolean("synchronize", cbSynchronize.isChecked()); - args.putBoolean("ondemand", cbOnDemand.isChecked()); args.putBoolean("primary", cbPrimary.isChecked()); args.putBoolean("notify", cbNotify.isChecked()); args.putBoolean("browse", cbBrowse.isChecked()); @@ -812,7 +808,6 @@ public class FragmentAccount extends FragmentBase { Integer color = args.getInt("color"); boolean synchronize = args.getBoolean("synchronize"); - boolean ondemand = args.getBoolean("ondemand"); boolean primary = args.getBoolean("primary"); boolean notify = args.getBoolean("notify"); boolean browse = args.getBoolean("browse"); @@ -862,7 +857,6 @@ public class FragmentAccount extends FragmentBase { boolean reload = (check || account == null || !Objects.equals(account.prefix, prefix) || account.synchronize != synchronize || - account.ondemand != ondemand || !account.poll_interval.equals(Integer.parseInt(interval))); Long last_connected = null; @@ -934,7 +928,6 @@ public class FragmentAccount extends FragmentBase { account.color = color; account.synchronize = synchronize; - account.ondemand = ondemand; account.primary = (account.synchronize && primary); account.notify = notify; account.browse = browse; @@ -1157,7 +1150,6 @@ public class FragmentAccount extends FragmentBase { cbNotify.setChecked(account == null ? false : account.notify); cbSynchronize.setChecked(account == null ? true : account.synchronize); - cbOnDemand.setChecked(account == null ? false : account.ondemand); cbPrimary.setChecked(account == null ? false : account.primary); cbBrowse.setChecked(account == null ? true : account.browse); etInterval.setText(account == null ? "" : Long.toString(account.poll_interval)); @@ -1198,7 +1190,6 @@ public class FragmentAccount extends FragmentBase { etRealm.setEnabled(auth_type == Helper.AUTH_TYPE_PASSWORD); setColor(color); - cbOnDemand.setEnabled(cbSynchronize.isChecked()); cbPrimary.setEnabled(cbSynchronize.isChecked()); // Consider previous check/save/delete as cancelled diff --git a/app/src/main/java/eu/faircode/email/FragmentFolders.java b/app/src/main/java/eu/faircode/email/FragmentFolders.java index 9a96bd5fc6..f3eddf40a6 100644 --- a/app/src/main/java/eu/faircode/email/FragmentFolders.java +++ b/app/src/main/java/eu/faircode/email/FragmentFolders.java @@ -303,7 +303,7 @@ public class FragmentFolders extends FragmentBase { } else { // Folder list EntityAccount account = db.account().getAccount(aid); - if (account.ondemand) + if (account != null && !"connected".equals(account.state)) ServiceUI.fsync(context, aid); else ServiceSynchronize.reload(getContext(), "refresh folders"); diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 3bc0af293d..1857478ba6 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -966,7 +966,7 @@ public class FragmentMessages extends FragmentBase { if (result.hasTrash == null) result.hasTrash = false; if (result.hasJunk == null) result.hasJunk = false; - result.accounts = db.account().getSynchronizingAccounts(true); + result.accounts = db.account().getSynchronizingAccounts(); final Collator collator = Collator.getInstance(Locale.getDefault()); collator.setStrength(Collator.SECONDARY); // Case insensitive, process accents etc diff --git a/app/src/main/java/eu/faircode/email/FragmentOptions.java b/app/src/main/java/eu/faircode/email/FragmentOptions.java index 2e0272f9a2..2743b3da27 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptions.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptions.java @@ -267,7 +267,7 @@ public class FragmentOptions extends FragmentBase implements SharedPreferences.O @Override protected Void onExecute(Context context, Bundle args) { DB db = DB.getInstance(context); - List folders = db.folder().getFoldersAutoSync(); + List folders = db.folder().getSynchronizingFolders(); for (EntityFolder folder : folders) EntityOperation.sync(context, folder.id); return null; diff --git a/app/src/main/java/eu/faircode/email/FragmentSetup.java b/app/src/main/java/eu/faircode/email/FragmentSetup.java index 621a18eaf5..802135e93f 100644 --- a/app/src/main/java/eu/faircode/email/FragmentSetup.java +++ b/app/src/main/java/eu/faircode/email/FragmentSetup.java @@ -405,7 +405,7 @@ public class FragmentSetup extends FragmentBase { @Override protected Void onExecute(Context context, Bundle args) { DB db = DB.getInstance(context); - for (EntityFolder folder : db.folder().getFoldersAutoSync()) + for (EntityFolder folder : db.folder().getSynchronizingFolders()) EntityOperation.sync(context, folder.id); return null; } diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index e1664b29c1..650d0a5e10 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -936,11 +936,6 @@ public class ServiceSynchronize extends LifecycleService { return prefs.getBoolean("enabled", true); } - private boolean hasWork() { - DB db = DB.getInstance(ServiceSynchronize.this); - return (db.account().getSynchronizingAccounts(false).size() > 0); - } - private void service_init() { EntityLog.log(ServiceSynchronize.this, "Service init"); // Network events will manage the service @@ -998,7 +993,7 @@ public class ServiceSynchronize extends LifecycleService { } // Start monitoring accounts - List accounts = db.account().getSynchronizingAccounts(false); + List accounts = db.account().getSynchronizingAccounts(); for (final EntityAccount account : accounts) { if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) if (account.notify) @@ -1114,12 +1109,12 @@ public class ServiceSynchronize extends LifecycleService { queued--; EntityLog.log(ServiceSynchronize.this, "Reload done queued=" + queued); - if (queued == 0 && !(isEnabled() && hasWork())) { + if (queued == 0 && !isEnabled()) { try { Thread.sleep(STOP_DELAY); } catch (InterruptedException ignored) { } - if (queued == 0 && !(isEnabled() && hasWork())) { + if (queued == 0 && !isEnabled()) { EntityLog.log(ServiceSynchronize.this, "Service stop"); stopSelf(); } @@ -1207,7 +1202,7 @@ public class ServiceSynchronize extends LifecycleService { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); boolean enabled = prefs.getBoolean("enabled", true); - int accounts = db.account().getSynchronizingAccounts(false).size(); + int accounts = db.account().getSynchronizingAccounts().size(); if (enabled && accounts > 0) ContextCompat.startForegroundService(context, diff --git a/app/src/main/java/eu/faircode/email/TupleFolderEx.java b/app/src/main/java/eu/faircode/email/TupleFolderEx.java index 542c22e907..5b6207dafd 100644 --- a/app/src/main/java/eu/faircode/email/TupleFolderEx.java +++ b/app/src/main/java/eu/faircode/email/TupleFolderEx.java @@ -25,7 +25,6 @@ public class TupleFolderEx extends EntityFolder { public String accountName; public Integer accountColor; public String accountState; - public Boolean accountOnDemand; public int messages; public int content; public int unseen; @@ -45,7 +44,6 @@ public class TupleFolderEx extends EntityFolder { Objects.equals(accountName, other.accountName) && Objects.equals(this.accountColor, other.accountColor) && Objects.equals(accountState, other.accountState) && - Objects.equals(this.accountOnDemand, other.accountOnDemand) && this.messages == other.messages && this.content == other.content && this.unseen == other.unseen); diff --git a/app/src/main/res/layout/fragment_account.xml b/app/src/main/res/layout/fragment_account.xml index 194a3eaaae..9f930d748e 100644 --- a/app/src/main/res/layout/fragment_account.xml +++ b/app/src/main/res/layout/fragment_account.xml @@ -331,15 +331,6 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/btnAdvanced" /> - - + app:layout_constraintTop_toBottomOf="@id/cbSynchronize" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a5a80635f7..38a0a1c88e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -236,7 +236,6 @@ Authorizing account … Advanced Synchronize (receive messages) - Synchronize on demand (manual) Synchronize (send messages) Primary (default account) Primary (default identity)