static void modest_account_mgr_finalize (GObject *obj);
static gchar* get_account_keyname (const gchar *accname, const gchar *name);
+static gchar* get_server_account_keyname (const gchar *accname, const gchar *name);
+static gchar* get_identity_keyname (const gchar *accname, const gchar *name);
/* list my signals */
enum {
if (modest_conf_key_exists(priv->modest_conf, acckey, NULL)) {
g_warning ("server account %s already exists", name);
- g_free (acckey);
- return FALSE;
+ //g_free (acckey);
+ //return FALSE;
}
/* hostname */
g_free (key);
/* password */
- key = g_strconcat (acckey, "/", MODEST_ACCOUNT_PASSWORD, NULL);
- modest_conf_set_string (priv->modest_conf, key,
- null_means_empty(password), NULL);
- g_free (key);
+ if (password)
+ {
+ key = g_strconcat (acckey, "/", MODEST_ACCOUNT_PASSWORD, NULL);
+ modest_conf_set_string (priv->modest_conf, key,
+ null_means_empty(password), NULL);
+ g_free (key);
+ }
/* proto */
key = g_strconcat (acckey, "/", MODEST_ACCOUNT_PROTO, NULL);
null_means_empty(proto),
NULL);
g_free (key);
-
+ g_free (acckey);
+
return TRUE; /* FIXME: better error checking */
}
return retval;
}
+gboolean
+modest_account_mgr_remove_identity (ModestAccountMgr *self,
+ const gchar *name,
+ GError **err)
+{
+ ModestAccountMgrPrivate *priv;
+ gchar *acckey, *key;
+ gboolean retval;
+
+ g_return_val_if_fail (self, FALSE);
+ g_return_val_if_fail (name, FALSE);
+
+ priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self);
+
+ acckey = g_strconcat (MODEST_IDENTITY_NAMESPACE, "/",
+ name, NULL);
+
+ if (!modest_conf_key_exists(priv->modest_conf, acckey, NULL)) {
+ g_warning ("server account %s does not exist exist", name);
+ g_free (acckey);
+ return FALSE;
+ }
+
+ retval = modest_conf_remove_key (priv->modest_conf, acckey, NULL);
+ g_free (acckey);
+
+ return retval;
+}
+
+
+
+gboolean
+modest_account_mgr_add_identity (ModestAccountMgr *self,
+ const gchar *name,
+ const gchar *email,
+ const gchar *replyto,
+ const gchar *signature,
+ const gboolean use_signature,
+ const gchar *id_via,
+ const gboolean use_id_via)
+{
+ ModestAccountMgrPrivate *priv;
+ gchar *id_key, *key;
+
+ g_return_val_if_fail (self, FALSE);
+ g_return_val_if_fail (name, FALSE);
+
+ /* TODO: check already exists */
+
+ priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self);
+ id_key = g_strconcat (MODEST_IDENTITY_NAMESPACE, "/",
+ name, NULL);
+
+ if (modest_conf_key_exists(priv->modest_conf, id_key, NULL)) {
+ g_warning ("identity %s already exists", name);
+ //g_free (id_key);
+ //return FALSE;
+ }
+
+ /* email */
+ key = g_strconcat (id_key, "/", MODEST_ACCOUNT_EMAIL, NULL);
+ modest_conf_set_string (priv->modest_conf, key,
+ null_means_empty(email), NULL);
+ g_free (key);
+
+ /* replyto */
+ key = g_strconcat (id_key, "/", MODEST_ACCOUNT_REPLYTO, NULL);
+ modest_conf_set_string (priv->modest_conf, key,
+ null_means_empty(replyto), NULL);
+ g_free (key);
+
+ /* signature */
+ key = g_strconcat (id_key, "/", MODEST_ACCOUNT_SIGNATURE, NULL);
+ modest_conf_set_string (priv->modest_conf, key,
+ null_means_empty(signature), NULL);
+ g_free (key);
+
+ /* use_signature */
+ key = g_strconcat (id_key, "/", MODEST_ACCOUNT_USE_SIGNATURE, NULL);
+ modest_conf_set_bool (priv->modest_conf, key,
+ use_signature, NULL);
+ g_free (key);
+
+ /* signature */
+ key = g_strconcat (id_key, "/", MODEST_ACCOUNT_ID_VIA, NULL);
+ modest_conf_set_string (priv->modest_conf, key,
+ null_means_empty(id_via), NULL);
+ g_free (key);
+
+ /* use_signature */
+ key = g_strconcat (id_key, "/", MODEST_ACCOUNT_USE_ID_VIA, NULL);
+ modest_conf_set_bool (priv->modest_conf, key,
+ use_id_via, NULL);
+ g_free (key);
+ g_free (id_key);
+
+ return TRUE; /* FIXME: better error checking */
+}
+
+/* strip the first /n/ character from each element */
+/* caller must make sure all elements are strings with
+ * length >= n, and also that data can be freed.
+ */
+static GSList*
+strip_prefix_from_elements (GSList *lst, guint n)
+{
+ GSList *cursor = lst;
+ while (cursor) {
+ gchar *str = (gchar*)cursor->data;
+ cursor->data = g_strdup (str + n);
+ g_free (str);
+ cursor = cursor->next;
+ }
+ return lst;
+}
GSList *accounts;
GSList *cursor;
ModestAccountMgrPrivate *priv;
+ const size_t prefix_len =
+ strlen (MODEST_SERVER_ACCOUNT_NAMESPACE "/");
g_return_val_if_fail (self, NULL);
/* no restrictions, return everything */
if (type == MODEST_PROTO_TYPE_ANY && !proto)
- return accounts;
+ return strip_prefix_from_elements (accounts,prefix_len);
/* otherwise, filter out the none-matching ones */
cursor = accounts;
cursor = cursor->next;
}
- return accounts;
+ return strip_prefix_from_elements (accounts, prefix_len);
}
{
GSList *accounts, *cursor;
ModestAccountMgrPrivate *priv;
+ const size_t prefix_len =
+ strlen (MODEST_ACCOUNT_NAMESPACE "/");
+
g_return_val_if_fail (self, NULL);
priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self);
- return modest_conf_list_subkeys (priv->modest_conf,
- MODEST_ACCOUNT_NAMESPACE,
- err);
+ accounts = modest_conf_list_subkeys (priv->modest_conf,
+ MODEST_ACCOUNT_NAMESPACE,
+ err);
+ return strip_prefix_from_elements (accounts, prefix_len);
+}
+
+
+
+static gchar*
+get_account_string (ModestAccountMgr *self, const gchar *name,
+ const gchar *key, gboolean server_account,
+ GError **err)
+{
+ ModestAccountMgrPrivate *priv;
+
+ gchar *keyname;
+ gchar * retval;
+
+ g_return_val_if_fail (self, NULL);
+ g_return_val_if_fail (name, NULL);
+ g_return_val_if_fail (key, NULL);
+
+ if (server_account)
+ keyname = get_server_account_keyname (name, key);
+ else
+ keyname = get_account_keyname (name, key);
+
+ priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self);
+ retval = modest_conf_get_string (priv->modest_conf,keyname,err);
+ g_free (keyname);
+
+ return retval;
}
gchar*
+modest_account_mgr_get_server_account_string (ModestAccountMgr *self, const gchar *name,
+ const gchar *key, GError **err)
+{
+ return get_account_string (self, name, key, TRUE, err);
+}
+
+gchar*
modest_account_mgr_get_account_string (ModestAccountMgr *self, const gchar *name,
- const gchar *key, GError **err)
+ const gchar *key, GError **err)
+{
+ return get_account_string (self, name, key, FALSE, err);
+}
+
+gchar*
+modest_account_mgr_get_identity_string (ModestAccountMgr *self, const gchar *name,
+ const gchar *key, GError **err)
{
ModestAccountMgrPrivate *priv;
gchar *keyname;
- gchar *retval;
+ gchar * retval;
g_return_val_if_fail (self, NULL);
g_return_val_if_fail (name, NULL);
g_return_val_if_fail (key, NULL);
- keyname = get_account_keyname (name, key);
+ keyname = get_identity_keyname (name, key);
+
+ priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self);
+ retval = modest_conf_get_string (priv->modest_conf,keyname,err);
+ g_free (keyname);
- g_warning ("===> %s", keyname);
+ return retval;
+}
- priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self);
- retval = modest_conf_get_string (priv->modest_conf,
- keyname, err);
+static gint
+get_account_int (ModestAccountMgr *self, const gchar *name,
+ const gchar *key, gboolean server_account,
+ GError **err)
+{
+ ModestAccountMgrPrivate *priv;
+
+ gchar *keyname;
+ gint retval;
+
+ g_return_val_if_fail (self, -1);
+ g_return_val_if_fail (name, -1);
+ g_return_val_if_fail (key, -1);
+ if (server_account)
+ keyname = get_server_account_keyname (name, key);
+ else
+ keyname = get_account_keyname (name, key);
+
+ priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self);
+ retval = modest_conf_get_int (priv->modest_conf,keyname,err);
g_free (keyname);
+
return retval;
}
+gint
+modest_account_mgr_get_server_account_int (ModestAccountMgr *self, const gchar *name,
+ const gchar *key, GError **err)
+{
+ return get_account_int (self, name, key, TRUE, err);
+}
gint
modest_account_mgr_get_account_int (ModestAccountMgr *self, const gchar *name,
const gchar *key, GError **err)
{
+ return get_account_int (self, name, key, FALSE, err);
+}
+
+
+
+static gboolean
+get_account_bool (ModestAccountMgr *self, const gchar *name,
+ const gchar *key, gboolean server_account,
+ GError **err)
+{
ModestAccountMgrPrivate *priv;
gchar *keyname;
- gint retval;
+ gboolean retval;
g_return_val_if_fail (self, -1);
g_return_val_if_fail (name, -1);
g_return_val_if_fail (key, -1);
- keyname = get_account_keyname (name, key);
+ if (server_account)
+ keyname = get_server_account_keyname (name, key);
+ else
+ keyname = get_account_keyname (name, key);
+
priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self);
retval = modest_conf_get_int (priv->modest_conf,keyname,err);
-
g_free (keyname);
+
return retval;
}
-gboolean modest_account_mgr_get_account_bool (ModestAccountMgr *self, const gchar *name,
- const gchar *key, GError **err)
+
+gint
+modest_account_mgr_get_server_account_bool (ModestAccountMgr *self, const gchar *name,
+ const gchar *key, GError **err)
+{
+ return get_account_bool (self, name, key, TRUE, err);
+}
+
+gint
+modest_account_mgr_get_account_bool (ModestAccountMgr *self, const gchar *name,
+ const gchar *key, GError **err)
+{
+ return get_account_bool (self, name, key, FALSE, err);
+}
+
+
+
+
+
+static gboolean
+set_account_string (ModestAccountMgr *self, const gchar *name,
+ const gchar *key, const gchar* val, gboolean server_account,
+ GError **err)
{
ModestAccountMgrPrivate *priv;
g_return_val_if_fail (name, FALSE);
g_return_val_if_fail (key, FALSE);
- keyname = get_account_keyname (name, key);
+ if (server_account)
+ keyname = get_server_account_keyname (name, key);
+ else
+ keyname = get_account_keyname (name, key);
+
priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self);
- retval = modest_conf_get_bool (priv->modest_conf,keyname,err);
+
+ retval = modest_conf_set_string (priv->modest_conf,keyname,val,err);
g_free (keyname);
return retval;
+
+
+gboolean
+modest_account_mgr_set_server_account_string (ModestAccountMgr *self, const gchar *name,
+ const gchar *key, const gchar* val,
+ GError **err)
+{
+ return set_account_string (self, name, key, val, TRUE, err);
+}
+
+
+
gboolean
modest_account_mgr_set_account_string (ModestAccountMgr *self, const gchar *name,
const gchar *key, const gchar* val,
GError **err)
{
+ return set_account_string (self, name, key, val, FALSE, err);
+}
+
+
+static gboolean
+set_account_int (ModestAccountMgr *self, const gchar *name,
+ const gchar *key, gboolean server_account, int val,
+ GError **err)
+{
ModestAccountMgrPrivate *priv;
gchar *keyname;
g_return_val_if_fail (name, FALSE);
g_return_val_if_fail (key, FALSE);
- keyname = get_account_keyname (name, key);
+ if (server_account)
+ keyname = get_server_account_keyname (name, key);
+ else
+ keyname = get_account_keyname (name, key);
+
priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self);
- retval = modest_conf_set_string (priv->modest_conf,keyname,val,err);
+
+ retval = modest_conf_set_int (priv->modest_conf,keyname,val,err);
g_free (keyname);
return retval;
gboolean
-modest_account_mgr_set_account_int (ModestAccountMgr *self, const gchar *name,
- const gchar *key, gint val, GError **err)
+modest_account_mgr_set_server_account_int (ModestAccountMgr *self, const gchar *name,
+ const gchar *key, int val,
+ GError **err)
{
- ModestAccountMgrPrivate *priv;
-
- gchar *keyname;
- gboolean retval;
-
- g_return_val_if_fail (self, -1);
- g_return_val_if_fail (name, -1);
- g_return_val_if_fail (key, -1);
+ return set_account_int (self, name, key, val, TRUE, err);
+}
- keyname = get_account_keyname (name, key);
- priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self);
- retval = modest_conf_set_int (priv->modest_conf,keyname,val,err);
- g_free (keyname);
- return retval;
+gboolean
+modest_account_mgr_set_account_int (ModestAccountMgr *self, const gchar *name,
+ const gchar *key, int val,
+ GError **err)
+{
+ return set_account_int (self, name, key, val, FALSE, err);
}
-gboolean
-modest_account_mgr_set_account_bool (ModestAccountMgr *self, const gchar *name,
- const gchar *key, gboolean val, GError **err)
+static gboolean
+set_account_bool (ModestAccountMgr *self, const gchar *name,
+ const gchar *key, gboolean server_account, gboolean val,
+ GError **err)
{
ModestAccountMgrPrivate *priv;
g_return_val_if_fail (name, FALSE);
g_return_val_if_fail (key, FALSE);
- keyname = get_account_keyname (name, key);
+ if (server_account)
+ keyname = get_server_account_keyname (name, key);
+ else
+ keyname = get_account_keyname (name, key);
+
priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self);
+
retval = modest_conf_set_bool (priv->modest_conf,keyname,val,err);
g_free (keyname);
gboolean
-modest_account_mgr_account_exists (ModestAccountMgr *self, const gchar *name,
- GError **err)
+modest_account_mgr_set_server_account_bool (ModestAccountMgr *self, const gchar *name,
+ const gchar *key, gboolean val,
+ GError **err)
+{
+ return set_account_bool (self, name, key, val, TRUE, err);
+}
+
+
+
+gboolean
+modest_account_mgr_set_account_bool (ModestAccountMgr *self, const gchar *name,
+ const gchar *key, gboolean val,
+ GError **err)
+{
+ return set_account_bool (self, name, key, val, FALSE, err);
+}
+
+
+
+
+
+gboolean
+account_exists (ModestAccountMgr *self, const gchar *name, gboolean server_account,
+ GError **err)
{
ModestAccountMgrPrivate *priv;
g_return_val_if_fail (self, FALSE);
g_return_val_if_fail (name, FALSE);
- keyname = get_account_keyname (name, NULL);
+ if (server_account)
+ keyname = get_account_keyname (name, NULL);
+ else
+ keyname = get_server_account_keyname (name, NULL);
priv = MODEST_ACCOUNT_MGR_GET_PRIVATE(self);
retval = modest_conf_key_exists (priv->modest_conf,keyname,err);
}
+gboolean
+modest_account_mgr_server_account_exists (ModestAccountMgr *self, const gchar *name,
+ GError **err)
+{
+ return account_exists (self, name, TRUE, err);
+}
+
+
+gboolean
+modest_account_mgr_account_exists (ModestAccountMgr *self, const gchar *name,
+ GError **err)
+{
+ return account_exists (self, name, FALSE, err);
+}
+
+gboolean
+modest_account_mgr_identity_exists (ModestAccountMgr *self, const gchar *name,
+ GError **err)
+{
+ return account_exists (self, name, TRUE, err);
+}
+
+
/* must be freed by caller */
static gchar*
{
if (name)
return g_strconcat
- (MODEST_ACCOUNT_NAMESPACE, "/", accname, "/", name, NULL);
+ (MODEST_ACCOUNT_NAMESPACE, "/",
+ accname, "/", name, NULL);
+ else
+ return g_strconcat
+ (MODEST_ACCOUNT_NAMESPACE, "/",
+ accname, NULL);
+}
+
+
+/* must be freed by caller */
+static gchar*
+get_server_account_keyname (const gchar *accname, const gchar *name)
+{
+ if (name)
+ return g_strconcat
+ (MODEST_SERVER_ACCOUNT_NAMESPACE, "/",
+ accname, "/", name, NULL);
else
return g_strconcat
- (MODEST_ACCOUNT_NAMESPACE, "/", accname, NULL);
+ (MODEST_SERVER_ACCOUNT_NAMESPACE, "/",
+ accname, NULL);
}
+/* must be freed by caller */
+static gchar*
+get_identity_keyname (const gchar *accname, const gchar *name)
+{
+ if (name)
+ return g_strconcat
+ (MODEST_IDENTITY_NAMESPACE "/",
+ accname, "/", name, NULL);
+ else
+ return g_strconcat
+ (MODEST_IDENTITY_NAMESPACE, "/",
+ accname, NULL);
+}