-/* is the account already in the queue? */
-static gboolean
-in_change_queue (GSList *change_queue, const gchar *account)
-{
- GSList *cursor = change_queue;
- while (cursor) {
- const gchar *acc = cursor->data;
- if (acc && strcmp (acc, account) == 0)
- return TRUE;
- cursor = g_slist_next (cursor);
- }
- return FALSE;
-}
-
-static GSList*
-add_to_change_queue (GSList *change_queue, const gchar *account_name)
-{
- g_return_val_if_fail (account_name, change_queue);
- return g_slist_prepend (change_queue, g_strdup (account_name));
-}
-
-
-/* we don't need to track specific accounts, as in our UI case
- * it's impossible to change two accounts within .5 seconds.
- * still, we might want to allow that later, and then this func
- * will come in handy */
-#if 0
-static GSList*
-remove_from_queue (GSList *change_queue, const gchar *account)
-{
- GSList *cursor = change_queue;
- while (cursor) {
- const gchar *acc = cursor->data;
- if (acc && strcmp (acc, account) == 0) {
- g_free (acc);
- return g_slist_delete_link (change_queue, cursor);
- }
- cursor = g_slist_next (cursor);
- }
- return change_queue;
-}
-#endif
-
-static gboolean
-on_timeout_notify_changes (gpointer data)
-{
- ModestAccountMgr *self = MODEST_ACCOUNT_MGR (data);
- ModestAccountMgrPrivate *priv = MODEST_ACCOUNT_MGR_GET_PRIVATE (self);
-
- GSList *cursor = priv->change_queue;
- while (cursor) {
- const gchar *account = cursor->data;
- if (account)
- g_signal_emit (G_OBJECT(self), signals[ACCOUNT_CHANGED_SIGNAL], 0,
- account);
- cursor = g_slist_next (cursor);
- }
-
- /* free our queue */
- g_slist_foreach (priv->change_queue, (GFunc)g_free, NULL);
- g_slist_free (priv->change_queue);
- priv->change_queue = NULL;
- priv->timeout = 0; /* hmmm */
-
- return FALSE; /* don't call me again */
-}
-
-
-/* little hack to retrieve the account name from a server account name,
- * by relying on the convention for that. Note: this changes the
- * string in-place
- *
- * server accounts look like fooID_transport or fooID_store
- * FIXME: make the suffixes more explicit in the account setup
- */
-static void
-get_account_name_from_server_account (gchar *server_account_name)
-{
- static const gchar *t = "ID_transport";
- static const gchar *s = "ID_store";
- const guint len_t = strlen (t);
- const guint len_s = strlen (s);
-
- guint len_a = strlen (server_account_name);
-
- if (g_str_has_suffix (server_account_name, t))
- server_account_name [len_a - len_t] = '\0';
- else if (g_str_has_suffix (server_account_name, s))
- server_account_name [len_a - len_s] = '\0';
-}
-
-
-
-static void
-on_key_change (ModestConf *conf, const gchar *key, ModestConfEvent event,
- ModestConfNotificationId id, gpointer user_data)
-{
- ModestAccountMgr *self = MODEST_ACCOUNT_MGR (user_data);
- ModestAccountMgrPrivate *priv = MODEST_ACCOUNT_MGR_GET_PRIVATE (self);
-
- gboolean is_account_key;
- gboolean is_server_account;
- gchar* account_name = NULL;
-
- /* Notify that the default account has changed */
- if (key && strcmp (key, MODEST_CONF_DEFAULT_ACCOUNT) == 0) {
- g_signal_emit (G_OBJECT(self), signals[DEFAULT_ACCOUNT_CHANGED_SIGNAL], 0);
- return;
- }
-
- is_account_key = FALSE;
- is_server_account = FALSE;
- account_name = _modest_account_mgr_account_from_key (key, &is_account_key,
- &is_server_account);
-
- /* if this is not an account-related key change, ignore */
- if (!account_name)
- return;
-
- /* account was removed. Do not emit an account removed signal
- because it was already being done in the remove_account
- method. Do not notify also the removal of the server
- account keys for the same reason */
- if ((is_account_key || is_server_account) &&
- event == MODEST_CONF_EVENT_KEY_UNSET) {
- g_free (account_name);
- return;
- }
-
- /* ignore server account changes */
- if (is_server_account)
- /* change in place: retrieve the parent account name */
- get_account_name_from_server_account (account_name);
-
- /* is this account enabled? */
- gboolean enabled = FALSE;
- if (is_server_account)
- enabled = TRUE;
- else
- enabled = modest_account_mgr_get_enabled (self, account_name);
-
- /* Notify is server account was changed, default account was changed
- * or when enabled/disabled changes:
- */
- if (!is_server_account)
- if (enabled || g_str_has_suffix (key, MODEST_ACCOUNT_ENABLED) ||
- strcmp (key, MODEST_CONF_DEFAULT_ACCOUNT) == 0) {
- if (!in_change_queue (priv->change_queue, account_name)) {
- priv->change_queue = add_to_change_queue (priv->change_queue,
- account_name);
- /* hmm, small race when this object is destroyed within
- * 500ms of the last change, and there are multiple timeouts... */
- priv->timeout = g_timeout_add (500, (GSourceFunc) on_timeout_notify_changes,
- self);
- }
- }
- g_free (account_name);
-}
-
-