From b019d17c06c41080489e49e97e7848fdfdbf986e Mon Sep 17 00:00:00 2001 From: M66B Date: Tue, 7 Dec 2021 08:30:51 +0100 Subject: [PATCH] Added option to poll folder list --- app/src/main/java/eu/faircode/email/Core.java | 15 +++++++---- .../email/FragmentOptionsSynchronize.java | 16 ++++++++++- .../eu/faircode/email/ServiceSynchronize.java | 8 ++++-- .../layout/fragment_options_synchronize.xml | 27 ++++++++++++++++++- app/src/main/res/values/strings.xml | 2 ++ 5 files changed, 59 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index dc7d9a7d68..aec4e98abb 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -1970,16 +1970,21 @@ class Core { } static void onSynchronizeFolders( - Context context, EntityAccount account, Store istore, - State state, boolean force) throws MessagingException { + Context context, EntityAccount account, Store istore, State state, + boolean keep_alive, boolean force) throws MessagingException { DB db = DB.getInstance(context); + if (account.protocol != EntityAccount.TYPE_IMAP) + return; + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); boolean sync_folders = prefs.getBoolean("sync_folders", true); + boolean sync_folders_poll = prefs.getBoolean("sync_folders_poll", false); boolean sync_shared_folders = prefs.getBoolean("sync_shared_folders", false); - Log.i(account.name + " sync folders=" + sync_folders + " shared=" + sync_shared_folders + " force=" + force); + Log.i(account.name + " sync folders=" + sync_folders + " poll=" + sync_folders_poll + + " shared=" + sync_shared_folders + " force=" + force); - if (force) + if (force || (keep_alive && sync_folders_poll)) sync_folders = true; if (!sync_folders) sync_shared_folders = false; @@ -2089,7 +2094,7 @@ class Core { if (!sync_folders) return; - Log.i("Start sync folders account=" + account.name); + EntityLog.log(context, "Start sync folders account=" + account.name); // Get default folder Folder defaultFolder = istore.getDefaultFolder(); diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsSynchronize.java b/app/src/main/java/eu/faircode/email/FragmentOptionsSynchronize.java index e708d2cd49..6fb06b95f3 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsSynchronize.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsSynchronize.java @@ -83,6 +83,7 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr private SwitchCompat swSyncKept; private SwitchCompat swGmailThread; private SwitchCompat swSyncFolders; + private SwitchCompat swSyncFoldersPoll; private SwitchCompat swSyncSharedFolders; private SwitchCompat swSubscriptions; private SwitchCompat swTuneKeepAlive; @@ -103,7 +104,7 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr "enabled", "poll_interval", "auto_optimize", "schedule", "schedule_start", "schedule_end", "sync_quick_imap", "sync_quick_pop", "sync_nodate", "sync_unseen", "sync_flagged", "delete_unseen", "sync_kept", "gmail_thread_id", - "sync_folders", "sync_shared_folders", "subscriptions", + "sync_folders", "sync_folders_poll", "sync_shared_folders", "subscriptions", "check_authentication", "check_reply_domain", "check_mx", "check_blocklist", "use_blocklist", "tune_keep_alive" }; @@ -149,6 +150,7 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr swSyncKept = view.findViewById(R.id.swSyncKept); swGmailThread = view.findViewById(R.id.swGmailThread); swSyncFolders = view.findViewById(R.id.swSyncFolders); + swSyncFoldersPoll = view.findViewById(R.id.swSyncFoldersPoll); swSyncSharedFolders = view.findViewById(R.id.swSyncSharedFolders); swSubscriptions = view.findViewById(R.id.swSubscriptions); swTuneKeepAlive = view.findViewById(R.id.swTuneKeepAlive); @@ -330,6 +332,15 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { prefs.edit().putBoolean("sync_folders", checked).apply(); + swSyncFoldersPoll.setEnabled(checked); + swSyncSharedFolders.setEnabled(checked); + } + }); + + swSyncFoldersPoll.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { + prefs.edit().putBoolean("sync_folders_poll", checked).apply(); } }); @@ -483,7 +494,10 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr swSyncKept.setChecked(prefs.getBoolean("sync_kept", true)); swGmailThread.setChecked(prefs.getBoolean("gmail_thread_id", false)); swSyncFolders.setChecked(prefs.getBoolean("sync_folders", true)); + swSyncFoldersPoll.setChecked(prefs.getBoolean("sync_folders_poll", false)); + swSyncFoldersPoll.setEnabled(swSyncFolders.isChecked()); swSyncSharedFolders.setChecked(prefs.getBoolean("sync_shared_folders", false)); + swSyncSharedFolders.setEnabled(swSyncFolders.isChecked()); swSubscriptions.setChecked(prefs.getBoolean("subscriptions", false)); swTuneKeepAlive.setChecked(prefs.getBoolean("tune_keep_alive", true)); swCheckAuthentication.setChecked(prefs.getBoolean("check_authentication", true)); diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index c83dca0d7f..830eb292a6 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -1533,8 +1533,9 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences }); // Update folder list - if (account.protocol == EntityAccount.TYPE_IMAP) - Core.onSynchronizeFolders(this, account, iservice.getStore(), state, force && !forced); + Core.onSynchronizeFolders(this, + account, iservice.getStore(), state, + false, force && !forced); // Open synchronizing folders List folders = db.folder().getFolders(account.id, false, true); @@ -2040,6 +2041,9 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences " poll count=" + folder.poll_count + " factor=" + folder.poll_factor); } + Core.onSynchronizeFolders(this, + account, iservice.getStore(), state, + true, false); } } catch (Throwable ex) { if (tune) { diff --git a/app/src/main/res/layout/fragment_options_synchronize.xml b/app/src/main/res/layout/fragment_options_synchronize.xml index b9c100b858..573cd39ea8 100644 --- a/app/src/main/res/layout/fragment_options_synchronize.xml +++ b/app/src/main/res/layout/fragment_options_synchronize.xml @@ -601,6 +601,31 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/swSyncFolders" /> + + + + Check if old messages were removed from the server Gmail message grouping style for Gmail accounts Synchronize folder list + Actively synchronize folder list Synchronize shared folder lists Manage folder subscriptions Check message authentication @@ -713,6 +714,7 @@ This will transfer extra data and consume extra battery power, especially if a lot of messages are stored on the device This only applies to newly received messages and can break existing groups Disabling this will reduce data and battery usage somewhat, but will disable updating the list of folders too + Periodically synchronize the folder list in addition to after connecting to an account This will check the results of DKIM, SPF and DMARC authentication as performed by the email server This will check if the domain name of the sender and the reply address are the same This will check if DNS MX records exist