[geary/wip/avoid-unusable-goa-accounts] Don't use GOA accounts with no valid IMAP/SMTP host names



commit ad2636e04dd4ee2eb39d73065d216814237d21ee
Author: Michael Gratton <mike vee net>
Date:   Fri Feb 22 15:10:45 2019 +1100

    Don't use GOA accounts with no valid IMAP/SMTP host names
    
    This fixes GOA Exchange accounts showing up but being completely
    unusable, e.g. in #241

 src/client/accounts/accounts-manager.vala | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)
---
diff --git a/src/client/accounts/accounts-manager.vala b/src/client/accounts/accounts-manager.vala
index 426cb28a..1e2f7944 100644
--- a/src/client/accounts/accounts-manager.vala
+++ b/src/client/accounts/accounts-manager.vala
@@ -610,7 +610,7 @@ public class Accounts.Manager : GLib.Object {
                 throw new ConfigError.MANAGEMENT(err.message);
             }
 
-            if (goa_handle.get_mail() == null) {
+            if (!is_valid_goa_account(goa_handle)) {
                 // If we get here, the GOA account's mail service used
                 // to exist (we just loaded Geary's config for it) but
                 // no longer does. This indicates the mail service has
@@ -783,12 +783,21 @@ public class Accounts.Manager : GLib.Object {
             : id;
     }
 
-    private async void create_goa_account(Goa.Object account,
-                                          GLib.Cancellable? cancellable) {
+    private bool is_valid_goa_account(Goa.Object handle) {
         // Goa.Account.mail_disabled doesn't seem to reflect if we get
         // get a valid mail object here, so just rely on that instead.
-        Goa.Mail? mail = account.get_mail();
-        if (mail != null) {
+        Goa.Mail? mail = handle.get_mail();
+        return (
+            mail != null &&
+            !Geary.String.is_empty(mail.imap_host) &&
+            !Geary.String.is_empty(mail.smtp_host)
+        );
+    }
+
+    private async void create_goa_account(Goa.Object account,
+                                          GLib.Cancellable? cancellable) {
+        if (is_valid_goa_account(account)) {
+            Goa.Mail? mail = account.get_mail();
             string? name = mail.name;
             if (Geary.String.is_empty_or_whitespace(name)) {
                 name = get_account_name();


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]