summaryrefslogtreecommitdiff
path: root/ubuntu-online-accounts
diff options
context:
space:
mode:
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2012-09-05 11:58:35 +0200
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2012-09-07 09:15:26 +0200
commitbda7803e256668ef173342429c4e55de8cae1456 (patch)
tree27f52d837d3488b638abaa51badaf0bf4fadaa88 /ubuntu-online-accounts
parent714036edd7111165600338c9b1de72c247926764 (diff)
downloadempathy-bda7803e256668ef173342429c4e55de8cae1456.tar.gz
mcp-account-manager-uoa: reconnect accounts when they are not failing any more
We want to automatically reconnect failing accounts when user refreshed the credentials. https://bugzilla.gnome.org/show_bug.cgi?id=683409
Diffstat (limited to 'ubuntu-online-accounts')
-rw-r--r--ubuntu-online-accounts/mc-plugin/mcp-account-manager-uoa.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/ubuntu-online-accounts/mc-plugin/mcp-account-manager-uoa.c b/ubuntu-online-accounts/mc-plugin/mcp-account-manager-uoa.c
index c0ff400f6..8414a3408 100644
--- a/ubuntu-online-accounts/mc-plugin/mcp-account-manager-uoa.c
+++ b/ubuntu-online-accounts/mc-plugin/mcp-account-manager-uoa.c
@@ -29,6 +29,8 @@
#include <string.h>
#include <ctype.h>
+#include "empathy-webcredentials-monitor.h"
+
#define PLUGIN_NAME "uoa"
#define PLUGIN_PRIORITY (MCP_ACCOUNT_STORAGE_PLUGIN_PRIO_KEYRING + 10)
#define PLUGIN_DESCRIPTION "Provide Telepathy Accounts from UOA via libaccounts-glib"
@@ -53,6 +55,7 @@ struct _McpAccountManagerUoaPrivate
McpAccountManager *am;
AgManager *manager;
+ EmpathyWebcredentialsMonitor *monitor;
/* alloc'ed string -> ref'ed AgAccountService
* The key is the account_name, an MC unique identifier.
@@ -333,6 +336,7 @@ mcp_account_manager_uoa_dispose (GObject *object)
tp_clear_object (&self->priv->am);
tp_clear_object (&self->priv->manager);
tp_clear_pointer (&self->priv->accounts, g_hash_table_unref);
+ tp_clear_object (&self->priv->monitor);
G_OBJECT_CLASS (mcp_account_manager_uoa_parent_class)->dispose (object);
}
@@ -355,6 +359,9 @@ mcp_account_manager_uoa_init (McpAccountManagerUoa *self)
G_CALLBACK (_account_created_cb), self);
g_signal_connect (self->priv->manager, "account-deleted",
G_CALLBACK (_account_deleted_cb), self);
+
+ self->priv->monitor = empathy_webcredentials_monitor_new (
+ self->priv->manager);
}
static void
@@ -663,6 +670,33 @@ account_manager_uoa_commit (const McpAccountStorage *storage,
}
static void
+failure_removed_cb (EmpathyWebcredentialsMonitor *monitor,
+ AgAccount *account,
+ McpAccountManagerUoa *self)
+{
+ GList *l;
+
+ DEBUG ("Account '%u' is not failing any more", account->id);
+
+ l = ag_account_list_services_by_type (account, SERVICE_TYPE);
+ while (l != NULL)
+ {
+ AgAccountService *service = ag_account_service_new (account, l->data);
+ gchar *account_name = _service_dup_tp_account_name (service);
+
+ DEBUG ("Reconnect account %s", account_name);
+
+ mcp_account_storage_emit_reconnect (MCP_ACCOUNT_STORAGE (self),
+ account_name);
+
+ g_free (account_name);
+ g_object_unref (service);
+ ag_service_unref (l->data);
+ l = g_list_delete_link (l, l);
+ }
+}
+
+static void
account_manager_uoa_ready (const McpAccountStorage *storage,
const McpAccountManager *am)
{
@@ -696,6 +730,9 @@ account_manager_uoa_ready (const McpAccountStorage *storage,
g_queue_free (self->priv->pending_signals);
self->priv->pending_signals = NULL;
+
+ g_signal_connect (self->priv->monitor, "failure-removed",
+ G_CALLBACK (failure_removed_cb), self);
}
static void