From 7396d0d4b91a1762ba891be169f2497bea5870e9 Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 30 Mar 2020 10:57:46 +0200 Subject: [PATCH] Auto force sync --- .../eu/faircode/email/FragmentAccounts.java | 17 +++++++++++++++-- .../java/eu/faircode/email/FragmentFolders.java | 16 ++++++++++++++-- .../eu/faircode/email/FragmentMessages.java | 16 ++++++++++++++-- 3 files changed, 43 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/FragmentAccounts.java b/app/src/main/java/eu/faircode/email/FragmentAccounts.java index a1c79f4412..cd802b8712 100644 --- a/app/src/main/java/eu/faircode/email/FragmentAccounts.java +++ b/app/src/main/java/eu/faircode/email/FragmentAccounts.java @@ -361,8 +361,13 @@ public class FragmentAccounts extends FragmentBase { throw new IllegalStateException(context.getString(R.string.title_no_internet)); boolean now = true; + boolean force = false; boolean outbox = false; + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + boolean enabled = prefs.getBoolean("enabled", true); + int pollInterval = prefs.getInt("poll_interval", ServiceSynchronize.DEFAULT_POLL_INTERVAL); + DB db = DB.getInstance(context); try { db.beginTransaction(); @@ -380,8 +385,12 @@ public class FragmentAccounts extends FragmentBase { outbox = true; else { EntityAccount account = db.account().getAccount(folder.account); - if (account != null && !"connected".equals(account.state)) + if (account != null && !"connected".equals(account.state)) { now = false; + if (enabled && !account.ondemand && + (pollInterval == 0 || account.poll_exempted)) + force = true; + } } } @@ -390,7 +399,11 @@ public class FragmentAccounts extends FragmentBase { db.endTransaction(); } - ServiceSynchronize.eval(context, "refresh/accounts"); + if (force) + ServiceSynchronize.reload(context, null, "forced refresh"); + else + ServiceSynchronize.eval(context, "refresh"); + if (outbox) ServiceSend.start(context); diff --git a/app/src/main/java/eu/faircode/email/FragmentFolders.java b/app/src/main/java/eu/faircode/email/FragmentFolders.java index 0d336b56b8..56615a0036 100644 --- a/app/src/main/java/eu/faircode/email/FragmentFolders.java +++ b/app/src/main/java/eu/faircode/email/FragmentFolders.java @@ -349,8 +349,13 @@ public class FragmentFolders extends FragmentBase { throw new IllegalStateException(context.getString(R.string.title_no_internet)); boolean now = true; + boolean force = false; boolean outbox = false; + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + boolean enabled = prefs.getBoolean("enabled", true); + int pollInterval = prefs.getInt("poll_interval", ServiceSynchronize.DEFAULT_POLL_INTERVAL); + DB db = DB.getInstance(context); try { db.beginTransaction(); @@ -371,8 +376,12 @@ public class FragmentFolders extends FragmentBase { outbox = true; else { EntityAccount account = db.account().getAccount(folder.account); - if (account != null && !"connected".equals(account.state)) + if (account != null && !"connected".equals(account.state)) { now = false; + if (enabled && !account.ondemand && + (pollInterval == 0 || account.poll_exempted)) + force = true; + } } } @@ -381,7 +390,10 @@ public class FragmentFolders extends FragmentBase { db.endTransaction(); } - ServiceSynchronize.eval(context, "refresh/folders"); + if (force) + ServiceSynchronize.reload(context, null, "forced refresh"); + else + ServiceSynchronize.eval(context, "refresh"); if (outbox) ServiceSend.start(context); diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 8d98eaa39b..abcdbeae46 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -1353,6 +1353,11 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. throw new IllegalStateException(context.getString(R.string.title_no_internet)); boolean now = true; + boolean force = false; + + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + boolean enabled = prefs.getBoolean("enabled", true); + int pollInterval = prefs.getInt("poll_interval", ServiceSynchronize.DEFAULT_POLL_INTERVAL); DB db = DB.getInstance(context); try { @@ -1374,8 +1379,12 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. if (folder.account != null) { EntityAccount account = db.account().getAccount(folder.account); - if (account != null && !"connected".equals(account.state)) + if (account != null && !"connected".equals(account.state)) { now = false; + if (enabled && !account.ondemand && + (pollInterval == 0 || account.poll_exempted)) + force = true; + } } } @@ -1384,7 +1393,10 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. db.endTransaction(); } - ServiceSynchronize.eval(context, "refresh"); + if (force) + ServiceSynchronize.reload(context, null, "forced refresh"); + else + ServiceSynchronize.eval(context, "refresh"); if (!now) throw new IllegalArgumentException(context.getString(R.string.title_no_connection));