[Telepathy-commits] [telepathy-mission-control/master] Let the McdAccount reference the McdAccountManager
Alberto Mardegan
alberto.mardegan at nokia.com
Mon Dec 8 06:33:18 PST 2008
This gives a better API, and the mcd_account_new() function doesn't need the
TpDBusDaemon and the GKeyFile anymore. For these, add getter methods to the
McdAccountManager.
---
src/mcd-account-manager.c | 27 ++++++++++----
src/mcd-account-manager.h | 5 ++-
src/mcd-account.c | 87 ++++++++++++++++++++++++--------------------
src/mcd-account.h | 5 ++-
4 files changed, 74 insertions(+), 50 deletions(-)
diff --git a/src/mcd-account-manager.c b/src/mcd-account-manager.c
index 76a9e6e..9c73233 100644
--- a/src/mcd-account-manager.c
+++ b/src/mcd-account-manager.c
@@ -100,9 +100,7 @@ static guint write_conf_id = 0;
static McdAccount *
account_new (McdAccountManager *account_manager, const gchar *name)
{
- McdAccountManagerPrivate *priv = account_manager->priv;
-
- return mcd_account_new (priv->dbus_daemon, priv->keyfile, name);
+ return mcd_account_new (account_manager, name);
}
static void
@@ -189,7 +187,6 @@ complete_account_creation (McdAccountManager *account_manager,
const gchar **object_path,
GError **error)
{
- McdAccountManagerPrivate *priv = account_manager->priv;
McdAccount *account;
gboolean ok;
@@ -209,7 +206,7 @@ complete_account_creation (McdAccountManager *account_manager,
g_object_unref (account);
account = NULL;
}
- mcd_account_manager_write_conf (priv->keyfile);
+ mcd_account_manager_write_conf (account_manager);
return account;
}
@@ -645,15 +642,29 @@ mcd_account_manager_new (TpDBusDaemon *dbus_daemon)
return MCD_ACCOUNT_MANAGER (obj);
}
+/**
+ * mcd_account_manager_get_dbus_daemon:
+ * @account_manager: the #McdAccountManager.
+ *
+ * Returns: the #TpDBusDaemon.
+ */
+TpDBusDaemon *
+mcd_account_manager_get_dbus_daemon (McdAccountManager *account_manager)
+{
+ g_return_val_if_fail (MCD_IS_ACCOUNT_MANAGER (account_manager), NULL);
+
+ return account_manager->priv->dbus_daemon;
+}
+
void
-mcd_account_manager_write_conf (GKeyFile *keyfile)
+mcd_account_manager_write_conf (McdAccountManager *account_manager)
{
/* FIXME: this (reasonably) assumes that there is only one
* McdAccountManager object running, since the write_conf_id is a static
* variable */
if (write_conf_id == 0)
- write_conf_id = g_timeout_add (WRITE_CONF_DELAY,
- write_conf, keyfile);
+ write_conf_id = g_timeout_add (WRITE_CONF_DELAY, write_conf,
+ account_manager->priv->keyfile);
}
GHashTable *
diff --git a/src/mcd-account-manager.h b/src/mcd-account-manager.h
index b6f4a5e..2b6b255 100644
--- a/src/mcd-account-manager.h
+++ b/src/mcd-account-manager.h
@@ -73,10 +73,13 @@ struct _McdAccountManagerClass
GType mcd_account_manager_get_type (void);
McdAccountManager *mcd_account_manager_new (TpDBusDaemon *dbus_daemon);
+TpDBusDaemon *mcd_account_manager_get_dbus_daemon
+ (McdAccountManager *account_manager);
+
void _mcd_account_manager_setup (McdAccountManager *account_manager);
GKeyFile *mcd_account_manager_get_config (McdAccountManager *account_manager);
-void mcd_account_manager_write_conf (GKeyFile *keyfile);
+void mcd_account_manager_write_conf (McdAccountManager *account_manager);
McdAccount *mcd_account_manager_lookup_account (McdAccountManager *account_manager,
const gchar *name);
diff --git a/src/mcd-account.c b/src/mcd-account.c
index 0c675cb..c7ae4ca 100644
--- a/src/mcd-account.c
+++ b/src/mcd-account.c
@@ -42,7 +42,6 @@
#include "mcd-account-conditions.h"
#include "mcd-account-connection.h"
#include "mcd-account-requests.h"
-#include "mcd-account-manager.h"
#include "mcd-misc.h"
#include "mcd-signals-marshal.h"
#include "mcd-manager.h"
@@ -98,11 +97,9 @@ struct _McdAccountPrivate
gchar *manager_name;
gchar *protocol_name;
- /* DBUS connection */
- TpDBusDaemon *dbus_daemon;
-
McdConnection *connection;
McdManager *manager;
+ McdAccountManager *account_manager;
GKeyFile *keyfile; /* configuration file */
/* connection status */
@@ -147,7 +144,7 @@ enum
{
PROP_0,
PROP_DBUS_DAEMON,
- PROP_KEYFILE,
+ PROP_ACCOUNT_MANAGER,
PROP_NAME,
};
@@ -331,7 +328,7 @@ _mcd_account_delete (McdAccount *account, GError **error)
g_rmdir (data_dir_str);
}
g_free (data_dir_str);
- mcd_account_manager_write_conf (priv->keyfile);
+ mcd_account_manager_write_conf (priv->account_manager);
return TRUE;
}
@@ -521,7 +518,7 @@ mcd_account_set_string_val (McdAccount *account, const gchar *key,
key, NULL);
string = NULL;
}
- mcd_account_manager_write_conf (priv->keyfile);
+ mcd_account_manager_write_conf (priv->account_manager);
mcd_account_changed_property (account, key, value);
return TRUE;
}
@@ -611,7 +608,7 @@ set_enabled (TpSvcDBusProperties *self, const gchar *name, const GValue *value)
MC_ACCOUNTS_KEY_ENABLED,
enabled);
priv->enabled = enabled;
- mcd_account_manager_write_conf (priv->keyfile);
+ mcd_account_manager_write_conf (priv->account_manager);
mcd_account_changed_property (account, name, value);
}
}
@@ -786,7 +783,7 @@ set_automatic_presence (TpSvcDBusProperties *self,
if (changed)
{
- mcd_account_manager_write_conf (priv->keyfile);
+ mcd_account_manager_write_conf (priv->account_manager);
mcd_account_changed_property (account, name, value);
}
}
@@ -833,7 +830,7 @@ set_connect_automatically (TpSvcDBusProperties *self,
MC_ACCOUNTS_KEY_CONNECT_AUTOMATICALLY,
connect_automatically);
priv->connect_automatically = connect_automatically;
- mcd_account_manager_write_conf (priv->keyfile);
+ mcd_account_manager_write_conf (priv->account_manager);
mcd_account_changed_property (account, name, value);
}
}
@@ -1224,7 +1221,7 @@ account_update_parameters (McSvcAccount *self, GHashTable *set,
g_value_unset (&value);
mcd_account_check_validity (account);
- mcd_account_manager_write_conf (priv->keyfile);
+ mcd_account_manager_write_conf (priv->account_manager);
mc_svc_account_return_from_update_parameters (context);
}
@@ -1243,10 +1240,14 @@ register_dbus_service (McdAccount *account)
{
McdAccountPrivate *priv = account->priv;
DBusGConnection *dbus_connection;
+ TpDBusDaemon *dbus_daemon;
- if (!priv->dbus_daemon || !priv->object_path) return;
+ if (!priv->account_manager || !priv->object_path) return;
- dbus_connection = TP_PROXY (priv->dbus_daemon)->dbus_connection;
+ dbus_daemon = mcd_account_manager_get_dbus_daemon (priv->account_manager);
+ g_return_if_fail (dbus_daemon != NULL);
+
+ dbus_connection = TP_PROXY (dbus_daemon)->dbus_connection;
if (G_LIKELY (dbus_connection))
dbus_g_connection_register_g_object (dbus_connection,
@@ -1260,7 +1261,10 @@ mcd_account_setup (McdAccount *account)
McdAccountPrivate *priv = account->priv;
gboolean valid;
- if (!priv->keyfile || !priv->unique_name) return FALSE;
+ if (!priv->account_manager || !priv->unique_name) return FALSE;
+
+ priv->keyfile = mcd_account_manager_get_config (priv->account_manager);
+ if (!priv->keyfile) return FALSE;
priv->manager_name =
g_key_file_get_string (priv->keyfile, priv->unique_name,
@@ -1318,15 +1322,11 @@ set_property (GObject *obj, guint prop_id,
switch (prop_id)
{
- case PROP_DBUS_DAEMON:
- if (priv->dbus_daemon)
- g_object_unref (priv->dbus_daemon);
- priv->dbus_daemon = TP_DBUS_DAEMON (g_value_dup_object (val));
- register_dbus_service (MCD_ACCOUNT (obj));
- break;
- case PROP_KEYFILE:
- g_assert (priv->keyfile == NULL);
- priv->keyfile = g_value_get_pointer (val);
+ case PROP_ACCOUNT_MANAGER:
+ g_assert (priv->account_manager == NULL);
+ /* don't keep a reference to the account_manager: we can safely assume
+ * its lifetime is longer than the McdAccount's */
+ priv->account_manager = g_value_get_object (val);
if (mcd_account_setup (account))
register_dbus_service (account);
break;
@@ -1357,7 +1357,8 @@ get_property (GObject *obj, guint prop_id,
switch (prop_id)
{
case PROP_DBUS_DAEMON:
- g_value_set_object (val, priv->dbus_daemon);
+ g_value_set_object
+ (val, mcd_account_manager_get_dbus_daemon (priv->account_manager));
break;
case PROP_NAME:
g_value_set_string (val, priv->unique_name);
@@ -1430,11 +1431,6 @@ _mcd_account_dispose (GObject *object)
priv->connection = NULL;
}
- if (priv->dbus_daemon)
- {
- g_object_unref (priv->dbus_daemon);
- priv->dbus_daemon = NULL;
- }
G_OBJECT_CLASS (mcd_account_parent_class)->dispose (object);
}
@@ -1456,12 +1452,12 @@ mcd_account_class_init (McdAccountClass * klass)
g_object_class_install_property
(object_class, PROP_DBUS_DAEMON,
g_param_spec_object ("dbus-daemon", "DBus daemon", "DBus daemon",
- TP_TYPE_DBUS_DAEMON,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ TP_TYPE_DBUS_DAEMON, G_PARAM_READABLE));
g_object_class_install_property
- (object_class, PROP_KEYFILE,
- g_param_spec_pointer ("keyfile", "Conf file", "Conf file",
+ (object_class, PROP_ACCOUNT_MANAGER,
+ g_param_spec_object ("account-manager", "account-manager",
+ "account-manager", MCD_TYPE_ACCOUNT_MANAGER,
G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property
@@ -1539,18 +1535,29 @@ mcd_account_init (McdAccount *account)
}
McdAccount *
-mcd_account_new (TpDBusDaemon *dbus_daemon, GKeyFile *keyfile,
- const gchar *name)
+mcd_account_new (McdAccountManager *account_manager, const gchar *name)
{
gpointer *obj;
obj = g_object_new (MCD_TYPE_ACCOUNT,
- "dbus-daemon", dbus_daemon,
- "keyfile", keyfile,
+ "account-manager", account_manager,
"name", name,
NULL);
return MCD_ACCOUNT (obj);
}
+/**
+ * mcd_account_get_account_manager:
+ * @account: the #McdAccount.
+ *
+ * Returns: the #McdAccountManager.
+ */
+McdAccountManager *
+mcd_account_get_account_manager (McdAccount *account)
+{
+ g_return_val_if_fail (MCD_IS_ACCOUNT (account), NULL);
+ return account->priv->account_manager;
+}
+
/*
* mcd_account_is_valid:
* @account: the #McdAccount.
@@ -1854,7 +1861,7 @@ mcd_account_set_normalized_name (McdAccount *account, const gchar *name)
else
g_key_file_remove_key (priv->keyfile, priv->unique_name,
MC_ACCOUNTS_KEY_NORMALIZED_NAME, NULL);
- mcd_account_manager_write_conf (priv->keyfile);
+ mcd_account_manager_write_conf (priv->account_manager);
}
gchar *
@@ -1878,7 +1885,7 @@ mcd_account_set_avatar_token (McdAccount *account, const gchar *token)
else
g_key_file_remove_key (priv->keyfile, priv->unique_name,
MC_ACCOUNTS_KEY_AVATAR_TOKEN, NULL);
- mcd_account_manager_write_conf (priv->keyfile);
+ mcd_account_manager_write_conf (priv->account_manager);
}
gchar *
@@ -1936,7 +1943,7 @@ mcd_account_set_avatar (McdAccount *account, const GArray *avatar,
g_signal_emit (account, _mcd_account_signals[AVATAR_CHANGED], 0,
avatar, mime_type);
- mcd_account_manager_write_conf (priv->keyfile);
+ mcd_account_manager_write_conf (priv->account_manager);
return TRUE;
}
diff --git a/src/mcd-account.h b/src/mcd-account.h
index ac80d9e..c84f75f 100644
--- a/src/mcd-account.h
+++ b/src/mcd-account.h
@@ -43,6 +43,7 @@ typedef struct _McdAccountPrivate McdAccountPrivate;
typedef struct _McdAccountClass McdAccountClass;
#include "mcd-connection.h"
+#include "mcd-account-manager.h"
struct _McdAccount
{
@@ -68,9 +69,11 @@ struct _McdAccountClass
#define MC_ACCOUNT_DBUS_OBJECT_BASE "/org/freedesktop/Telepathy/Account/"
GType mcd_account_get_type (void);
-McdAccount *mcd_account_new (TpDBusDaemon *dbus_daemon, GKeyFile *keyfile,
+McdAccount *mcd_account_new (McdAccountManager *account_manager,
const gchar *name);
+McdAccountManager *mcd_account_get_account_manager (McdAccount *account);
+
gboolean mcd_account_delete (McdAccount *account, GError **error);
const gchar *mcd_account_get_unique_name (McdAccount *account);
--
1.5.6.5
More information about the Telepathy-commits
mailing list