diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2012-09-05 17:58:35 +0800 |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2012-09-07 15:15:26 +0800 |
commit | bda7803e256668ef173342429c4e55de8cae1456 (patch) | |
tree | 27f52d837d3488b638abaa51badaf0bf4fadaa88 | |
parent | 714036edd7111165600338c9b1de72c247926764 (diff) | |
download | gsoc2013-empathy-bda7803e256668ef173342429c4e55de8cae1456.tar gsoc2013-empathy-bda7803e256668ef173342429c4e55de8cae1456.tar.gz gsoc2013-empathy-bda7803e256668ef173342429c4e55de8cae1456.tar.bz2 gsoc2013-empathy-bda7803e256668ef173342429c4e55de8cae1456.tar.lz gsoc2013-empathy-bda7803e256668ef173342429c4e55de8cae1456.tar.xz gsoc2013-empathy-bda7803e256668ef173342429c4e55de8cae1456.tar.zst gsoc2013-empathy-bda7803e256668ef173342429c4e55de8cae1456.zip |
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
-rw-r--r-- | ubuntu-online-accounts/mc-plugin/mcp-account-manager-uoa.c | 37 |
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 |