* more private data for the editor window: identity and transport
[modest] / src / modest-account-mgr.c
index 56c213f..4a079cc 100644 (file)
@@ -3,6 +3,8 @@
 /* insert (c)/licensing information) */
 
 #include <string.h>
+#include "modest-marshal.h"
+#include "modest-account-keys.h"
 #include "modest-account-mgr.h"
 
 /* 'private'/'protected' functions */
@@ -16,8 +18,9 @@ static gchar *get_server_account_keyname (const gchar * accname,
 
 /* list my signals */
 enum {
-       /* MY_SIGNAL_1, */
-       /* MY_SIGNAL_2, */
+       ACCOUNT_CHANGE_SIGNAL,
+       ACCOUNT_REMOVE_SIGNAL,
+       ACCOUNT_ADD_SIGNAL,
        LAST_SIGNAL
 };
 
@@ -32,8 +35,23 @@ struct _ModestAccountMgrPrivate {
 /* globals */
 static GObjectClass *parent_class = NULL;
 
-/* uncomment the following if you have defined any signals */
-/* static guint signals[LAST_SIGNAL] = {0}; */
+static guint signals[LAST_SIGNAL] = {0};
+
+
+/* map configuration changes to account changes */
+static void
+modest_account_mgr_check_change (ModestConf *conf, const gchar *key, 
+                                 const gchar *new_value, gpointer user_data)
+{
+       ModestAccountMgr *amgr = user_data;
+       
+       
+       
+       g_signal_emit (amgr, signals[ACCOUNT_CHANGE_SIGNAL], 0, key, new_value);
+               
+       g_message ("value changed: %s %s\n", key, new_value);
+}
+
 
 GType
 modest_account_mgr_get_type (void)
@@ -64,6 +82,7 @@ static void
 modest_account_mgr_class_init (ModestAccountMgrClass * klass)
 {
        GObjectClass *gobject_class;
+       GType paramtypes[2] = {G_TYPE_POINTER, G_TYPE_POINTER};
 
        gobject_class = (GObjectClass *) klass;
 
@@ -73,12 +92,26 @@ modest_account_mgr_class_init (ModestAccountMgrClass * klass)
        g_type_class_add_private (gobject_class,
                                  sizeof (ModestAccountMgrPrivate));
 
-       /* signal definitions go here, e.g.: */
-/*     signals[MY_SIGNAL_1] = */
-/*             g_signal_new ("my_signal_1",....); */
-/*     signals[MY_SIGNAL_2] = */
-/*             g_signal_new ("my_signal_2",....); */
-/*     etc. */
+       /* signal definitions */
+       signals[ACCOUNT_ADD_SIGNAL] = 
+               g_signal_newv ("account-add", 
+                              G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
+                              NULL, NULL, NULL,
+                              g_cclosure_marshal_VOID__POINTER,
+                              G_TYPE_NONE, 1, paramtypes);
+       
+       signals[ACCOUNT_REMOVE_SIGNAL] = 
+               g_signal_newv ("account-remove", 
+                              G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
+                              NULL, NULL, NULL,
+                              g_cclosure_marshal_VOID__POINTER,
+                              G_TYPE_NONE, 1, paramtypes);
+       signals[ACCOUNT_CHANGE_SIGNAL] = 
+               g_signal_newv ("account-change", 
+                              G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
+                              NULL, NULL, NULL,
+                              modest_marshal_VOID__POINTER_POINTER,
+                              G_TYPE_NONE, 2, paramtypes);
 }
 
 
@@ -96,8 +129,10 @@ modest_account_mgr_finalize (GObject * obj)
        ModestAccountMgr *self = MODEST_ACCOUNT_MGR (obj);
        ModestAccountMgrPrivate *priv = MODEST_ACCOUNT_MGR_GET_PRIVATE (self);
 
-       g_object_unref (G_OBJECT (priv->modest_conf));
-       priv->modest_conf = NULL;
+       if (priv->modest_conf) {
+               g_object_unref (G_OBJECT(priv->modest_conf));
+               priv->modest_conf = NULL;
+       }
 }
 
 GObject *
@@ -116,6 +151,9 @@ modest_account_mgr_new (ModestConf * conf)
         * ModestConf should outlive the ModestAccountMgr though
         */
        g_object_ref (G_OBJECT (priv->modest_conf = conf));
+       
+       g_signal_connect (G_OBJECT (conf), "key-changed", 
+                         G_CALLBACK (modest_account_mgr_check_change), obj);
        return obj;
 }
 
@@ -128,7 +166,6 @@ modest_account_mgr_add_account (ModestAccountMgr * self, const gchar * name,
 {
        ModestAccountMgrPrivate *priv;
        gchar *key;
-       gboolean retval;
 
        g_return_val_if_fail (self, FALSE);
        g_return_val_if_fail (name, FALSE);
@@ -262,7 +299,7 @@ modest_account_mgr_remove_server_account (ModestAccountMgr * self,
                                          const gchar * name, GError ** err)
 {
        ModestAccountMgrPrivate *priv;
-       gchar *acckey, *key;
+       gchar *acckey;
        gboolean retval;
 
        g_return_val_if_fail (self, FALSE);
@@ -365,7 +402,7 @@ modest_account_mgr_server_account_names (ModestAccountMgr * self,
 GSList *
 modest_account_mgr_account_names (ModestAccountMgr * self, GError ** err)
 {
-       GSList *accounts, *cursor;
+       GSList *accounts;
        ModestAccountMgrPrivate *priv;
        const size_t prefix_len = strlen (MODEST_ACCOUNT_NAMESPACE "/");
 
@@ -375,7 +412,7 @@ modest_account_mgr_account_names (ModestAccountMgr * self, GError ** err)
        priv = MODEST_ACCOUNT_MGR_GET_PRIVATE (self);
 
        accounts = modest_conf_list_subkeys (priv->modest_conf,
-                                            MODEST_ACCOUNT_NAMESPACE, err);
+                                             MODEST_ACCOUNT_NAMESPACE, err);
        return strip_prefix_from_elements (accounts, prefix_len);
 }
 
@@ -666,12 +703,12 @@ account_exists (ModestAccountMgr * self, const gchar * name,
        gboolean retval;
 
        g_return_val_if_fail (self, FALSE);
-       g_return_val_if_fail (name, FALSE);
+        g_return_val_if_fail (name, FALSE);
 
        if (server_account)
-               keyname = get_account_keyname (name, NULL);
-       else
                keyname = get_server_account_keyname (name, NULL);
+       else
+               keyname = get_account_keyname (name, NULL);
 
        priv = MODEST_ACCOUNT_MGR_GET_PRIVATE (self);
        retval = modest_conf_key_exists (priv->modest_conf, keyname, err);