Fixes NB#110320, cannot remove messages from local folders
[modest] / src / maemo / easysetup / modest-presets.c
index 051d284..ef23742 100644 (file)
  */
 
 #include <string.h> /* for strcmp */
+#include <modest-protocol-registry.h>
+#include <modest-runtime.h>
 #include "modest-presets.h"
+#include <stdio.h>
 
 /* Include config.h so that _() works: */
 #ifdef HAVE_CONFIG_H
 #include <config.h>
 #endif
 
-#define MODEST_PRESETS_KEY_NAME              "Name"
-#define MODEST_PRESETS_KEY_DOMAIN            "Domain"
-#define MODEST_PRESETS_KEY_MCC               "MCC"
-#define MODEST_PRESETS_KEY_INCOMING          "IncomingMailServer"
-#define MODEST_PRESETS_KEY_OUTGOING          "OutgoingMailServer"
-#define MODEST_PRESETS_KEY_MAILBOX_TYPE      "MailboxType"
-#define MODEST_PRESETS_KEY_MAILBOX_TYPE_POP  "pop"
-#define MODEST_PRESETS_KEY_MAILBOX_TYPE_IMAP "imap"
-#define MODEST_PRESETS_KEY_APOP              "APOPSecureLogin"
-#define MODEST_PRESETS_KEY_SECURE_SMTP       "SecureSMTP"
-#define MODEST_PRESETS_KEY_TRUE                     "true"
-
-/** An efficient way to store the info for each provider.
- */
-typedef enum _ModestPresetsInfo {
-       /* two bits for the server type */
-       MODEST_PRESETS_INFO_NONE             = 0x0000,
-       MODEST_PRESETS_INFO_IMAP             = 0x0001,
-       MODEST_PRESETS_INFO_POP              = 0x0002,
-       MODEST_PRESETS_INFO_SMTP             = 0x0003,
-
-       /* one bit for each of these */
-       MODEST_PRESETS_INFO_APOP             = 0x0004,
-       MODEST_PRESETS_INFO_SECURE_SMTP      = 0x0008,
-       MODEST_PRESETS_INFO_SECURE_INCOMING  = 0x000f   
-} ModestPresetsInfo;
-
-/**
- * modest_presets_get_info:
- * @self: a valid ModestPresets instance
- * @provider_id: ID of the provider 
- * @incoming_server: get the incoming mailserver if TRUE, get the
- * outgoing server otherwise
- *
- * get information about some incoming or outgoing mailserver
- *
- * Returns: a ModestPresetsInfo with the required information
- */
-static ModestPresetsInfo
-modest_presets_get_info (ModestPresets *self, const gchar *provider_id, gboolean incoming_server);
+#define MODEST_PRESETS_KEY_NAME                "Name"
+#define MODEST_PRESETS_KEY_DOMAIN              "Domain"
+#define MODEST_PRESETS_KEY_MCC                 "MCC"
+#define MODEST_PRESETS_KEY_INCOMING            "IncomingMailServer"
+#define MODEST_PRESETS_KEY_INCOMING_SECURITY   "IncomingSecurity"
+#define MODEST_PRESETS_KEY_OUTGOING            "OutgoingMailServer"
+#define MODEST_PRESETS_KEY_MAILBOX_TYPE        "MailboxType"
+#define MODEST_PRESETS_KEY_APOP                "APOPSecureLogin"
+#define MODEST_PRESETS_KEY_SECURE_SMTP         "SecureSmtp"
+#define MODEST_PRESETS_KEY_SMTP_PORT           "SmtpPort"
                                                    
 
 ModestPresets*
@@ -93,7 +66,7 @@ modest_presets_new (const gchar *presetfile)
                g_free (presets);
                return NULL;
        }
-
+       
        if (!g_key_file_load_from_file (presets->keyfile, presetfile,
                                        G_KEY_FILE_NONE, &err)) {
                g_printerr ("modest: cannot open keyfile from %s:\n  %s\n", presetfile,
@@ -144,10 +117,12 @@ modest_presets_get_providers  (ModestPresets *self, guint mcc,
        };
                
        /* return *all* providers? */
+       /*
        if (mcc == 0 && include_globals) {
                *provider_ids = all_provider_ids;
                return all_providers;
        }
+       */
        
        /* nope: filter them */
 
@@ -205,8 +180,9 @@ modest_presets_get_server (ModestPresets *self, const gchar *provider_id,
                                      NULL);
 }
 
-gchar *                   modest_presets_get_domain      (ModestPresets *self,
-                                                         const gchar *provider_id)
+gchar *
+modest_presets_get_domain      (ModestPresets *self,
+                               const gchar *provider_id)
 {      
        g_return_val_if_fail (self && self->keyfile, NULL);
        g_return_val_if_fail (provider_id, NULL);
@@ -217,99 +193,181 @@ gchar *                   modest_presets_get_domain      (ModestPresets *self,
 }              
 
 
-ModestPresetsInfo
-modest_presets_get_info (ModestPresets *self, const gchar *provider_id, gboolean incoming_server)
+
+
+ModestProtocolType
+modest_presets_get_info_server_type (ModestPresets *self,
+                                    const gchar *provider_id,
+                                    gboolean incoming_server)
 {
-       ModestPresetsInfo info = 0;
+       ModestProtocolType protocol_type = MODEST_PROTOCOL_REGISTRY_TYPE_INVALID;
+       ModestProtocolRegistry *protocol_registry;
+       ModestProtocol *protocol;
        gchar *val = NULL;
        
        g_return_val_if_fail (self && self->keyfile, 0);
+       protocol_registry = modest_runtime_get_protocol_registry ();
+
+       if (incoming_server) {
+               val = g_key_file_get_string (self->keyfile, provider_id,
+                                            MODEST_PRESETS_KEY_INCOMING, NULL);
+               if (!val)
+                       return protocol_type;
+               
+               g_free (val);
+               val = g_key_file_get_string (self->keyfile, provider_id,
+                                            MODEST_PRESETS_KEY_MAILBOX_TYPE,NULL);
+               
+               protocol = modest_protocol_registry_get_protocol_by_name (protocol_registry, MODEST_PROTOCOL_REGISTRY_STORE_PROTOCOLS, val);
+               if (protocol == NULL)
+                       return protocol_type;
+               protocol_type = modest_protocol_get_type_id (protocol);
+       } else {
+               val = g_key_file_get_string (self->keyfile, provider_id,
+                                            MODEST_PRESETS_KEY_OUTGOING, NULL);
+               if (!val)
+                       return protocol_type;
+
+               protocol_type = MODEST_PROTOCOLS_TRANSPORT_SMTP;
+       }
+       g_free (val);
 
-       if(incoming_server) {
+       /* debug: */
+/*     g_message ("provider id: %s, server type: %d", provider_id, info); */
+       return protocol_type;
+}
+
+
+
+ModestProtocolType
+modest_presets_get_info_server_security (ModestPresets *self, const gchar *provider_id,
+                                        gboolean incoming_server)
+{
+       ModestProtocolType protocol_type = MODEST_PROTOCOLS_CONNECTION_NONE;
+       gchar *val = NULL;
+       
+       g_return_val_if_fail (self && self->keyfile, MODEST_PROTOCOLS_CONNECTION_NONE);
+
+       if (incoming_server) {
                val = g_key_file_get_string (self->keyfile, provider_id,
-                                               MODEST_PRESETS_KEY_INCOMING, NULL);
+                                            MODEST_PRESETS_KEY_INCOMING, NULL);
                if (val) {
-                       g_free (val);
+                       g_free (val);   
+
                        val = g_key_file_get_string (self->keyfile, provider_id,
-                                                    MODEST_PRESETS_KEY_MAILBOX_TYPE, NULL);
-                       if (strcmp (val, MODEST_PRESETS_KEY_MAILBOX_TYPE_POP) == 0)
-                               info |= MODEST_PRESETS_INFO_POP;
-                       if (strcmp (val, MODEST_PRESETS_KEY_MAILBOX_TYPE_IMAP) == 0)
-                               info |= MODEST_PRESETS_INFO_IMAP;
+                                                    MODEST_PRESETS_KEY_INCOMING_SECURITY, NULL);
+                       if (val && ((strcmp (val, "1") == 0) || (strcmp (val, "2") == 0))) {
+                               protocol_type = MODEST_PROTOCOLS_CONNECTION_SSL;
+                       }
                        g_free (val);
-       
-                       val = g_key_file_get_string (self->keyfile, provider_id,
-                                                    MODEST_PRESETS_KEY_APOP, NULL);
-                       if (val && strcmp(val, MODEST_PRESETS_KEY_TRUE) == 0)
-                               info |= MODEST_PRESETS_INFO_APOP;
-                       g_free(val);
                }
-       }
-       else /* outgoing: */ {
+       } else /* outgoing: */ {
                val = g_key_file_get_string (self->keyfile, provider_id,
                                             MODEST_PRESETS_KEY_OUTGOING, NULL);
                if (val) {
                        g_free (val);
-                       info |= MODEST_PRESETS_INFO_SMTP;
                        
                        val = g_key_file_get_string (self->keyfile, provider_id,
                                                     MODEST_PRESETS_KEY_SECURE_SMTP, NULL);
-                       if (val && strcmp(val,MODEST_PRESETS_KEY_TRUE) == 0)
-                               info |= MODEST_PRESETS_INFO_SECURE_SMTP;
+                       /* printf("debug: %s: provider_id=%s, secure-smtp val=%s\n", __FUNCTION__, provider_id, val); */
+                       if (val && strcmp(val,"true") == 0)
+                               protocol_type = MODEST_PROTOCOLS_CONNECTION_SSL;
                        g_free(val);
                }
        }
 
-       return info;
+       return protocol_type;
 }
 
-ModestPresetsServerType
-modest_presets_get_info_server_type (ModestPresets *self,
-                                                   const gchar *provider_id,
-                                                   gboolean incoming_server)
+gboolean 
+modest_presets_get_info_server_use_alternate_port (ModestPresets *self, const gchar *provider_id,
+                                                  gboolean incoming_server)
 {
-       ModestPresetsInfo info = modest_presets_get_info (self, provider_id, incoming_server);
-
-       /* The server type is stored in the first 2 bits: */
-       info = info & 0x03;
+       gboolean result = FALSE;
+       gchar *val = NULL;
        
-       /* Convert from the internal enum to the public enum: */
-       if(info == MODEST_PRESETS_INFO_IMAP)
-               return MODEST_PRESETS_SERVER_TYPE_IMAP;
-       else if(info == MODEST_PRESETS_INFO_POP)
-               return MODEST_PRESETS_SERVER_TYPE_POP;
-       else if(info == MODEST_PRESETS_INFO_SMTP)
-               return MODEST_PRESETS_SERVER_TYPE_SMTP;
-       else
-               return MODEST_PRESETS_SERVER_TYPE_NONE;
+       g_return_val_if_fail (self && self->keyfile, MODEST_PROTOCOLS_CONNECTION_NONE);
+
+       if (incoming_server) {
+               val = g_key_file_get_string (self->keyfile, provider_id,
+                                            MODEST_PRESETS_KEY_INCOMING, NULL);
+               if (val) {
+                       g_free (val);   
+
+                       val = g_key_file_get_string (self->keyfile, provider_id,
+                                                    MODEST_PRESETS_KEY_INCOMING_SECURITY, NULL);
+                       if (val && (strcmp (val, "2") == 0)) {
+                               result = TRUE;
+                       }
+                       g_free (val);
+               }
+       } 
+
+       return result;
 }
 
-ModestPresetsSecurity
-modest_presets_get_info_server_security (ModestPresets *self,
-                                                   const gchar *provider_id,
-                                                   gboolean incoming_server)
+ModestProtocolType
+modest_presets_get_info_server_auth (ModestPresets *self, const gchar *provider_id,
+                                        gboolean incoming_server)
 {
-       ModestPresetsInfo info = modest_presets_get_info (self, provider_id, incoming_server);
-
-       /* The security flags are stored in all except the first 4 bits: */
-       info = info && !0x04;
+       ModestProtocolType protocol_type = MODEST_PROTOCOLS_AUTH_NONE;
+       gchar *val = NULL;
        
-       /* Convert from the internal flags to the public flags: */
-       ModestPresetsSecurity security = MODEST_PRESETS_SECURITY_NONE;
-       if(info && MODEST_PRESETS_INFO_APOP)
-               security = security | MODEST_PRESETS_SECURITY_APOP;
-               
-       if(info && MODEST_PRESETS_INFO_SECURE_SMTP)
-               security = security | MODEST_PRESETS_SECURITY_SECURE_SMTP;
-               
-       if(info && MODEST_PRESETS_INFO_SECURE_INCOMING)
-               security = security | MODEST_PRESETS_SECURITY_SECURE_INCOMING;
+       g_return_val_if_fail (self && self->keyfile, MODEST_PROTOCOLS_AUTH_NONE);
+
+       if (incoming_server) {
+               val = g_key_file_get_string (self->keyfile, provider_id,
+                                            MODEST_PRESETS_KEY_INCOMING, NULL);
+               if (val) {
+                        g_free (val);   
+                        val = g_key_file_get_string (self->keyfile, provider_id,
+                                                     MODEST_PRESETS_KEY_APOP, NULL);
+                        if (val && strcmp(val, "true") == 0)
+                               protocol_type = MODEST_PROTOCOLS_AUTH_PASSWORD;
+                        g_free(val);
+
+               }
+       } else /* outgoing: */ {
+               val = g_key_file_get_string (self->keyfile, provider_id,
+                                            MODEST_PRESETS_KEY_OUTGOING, NULL);
+               if (val) {
+                       g_free (val);
+                       
+                       val = g_key_file_get_string (self->keyfile, provider_id,
+                                                    MODEST_PRESETS_KEY_SECURE_SMTP, NULL);
+                       /* printf("debug: %s: provider_id=%s, secure-smtp val=%s\n", __FUNCTION__, provider_id, val); */
+                       if (val && strcmp(val,"true") == 0)
+                               protocol_type = MODEST_PROTOCOLS_AUTH_PASSWORD;
+                       g_free(val);
+               }
+       }
 
-       return security;
+       return protocol_type;
 }
 
-                                                       
+/*
+ * at the moment, this only for mac.com, which have a special SMTP port
+ */
+guint
+modest_presets_get_port (ModestPresets *self, const gchar* provider_id,
+                        gboolean incoming_server)
+{
+       guint port;
        
+       g_return_val_if_fail (self && self->keyfile, 0);
+
+       if (incoming_server)
+               port = 0; /* not used yet */
+       else 
+               port = (guint)g_key_file_get_integer (self->keyfile, provider_id,
+                                                     MODEST_PRESETS_KEY_SMTP_PORT, NULL);
+
+       return port;
+}
+
+
+
+
        
 void
 modest_presets_destroy (ModestPresets *self)