aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy/empathy-account-settings.c
diff options
context:
space:
mode:
Diffstat (limited to 'libempathy/empathy-account-settings.c')
-rw-r--r--libempathy/empathy-account-settings.c92
1 files changed, 92 insertions, 0 deletions
diff --git a/libempathy/empathy-account-settings.c b/libempathy/empathy-account-settings.c
index 29ff3f1b7..1f0d35cb8 100644
--- a/libempathy/empathy-account-settings.c
+++ b/libempathy/empathy-account-settings.c
@@ -76,6 +76,13 @@ struct _EmpathyAccountSettingsPriv
gulong managers_ready_id;
GSimpleAsyncResult *apply_result;
+
+ gboolean storage;
+ gboolean attempted_storage_properties;
+ gchar *storage_provider;
+ GValue *storage_identifier;
+ GHashTable *storage_specific_information;
+ TpStorageRestrictionFlags storage_restrictions;
};
static void
@@ -104,6 +111,9 @@ static void empathy_account_settings_managers_ready_cb (GObject *obj,
GParamSpec *pspec, gpointer user_data);
static void empathy_account_settings_check_readyness (
EmpathyAccountSettings *self);
+static void empathy_account_settings_got_account_storage (TpProxy *account,
+ GHashTable *properties, const GError *error, gpointer user_data,
+ GObject *object);
static void
empathy_account_settings_set_property (GObject *object,
@@ -214,6 +224,15 @@ empathy_account_settings_constructed (GObject *object)
empathy_account_settings_account_ready_cb, self);
tp_g_signal_connect_object (priv->managers, "notify::ready",
G_CALLBACK (empathy_account_settings_managers_ready_cb), object, 0);
+
+ priv->storage = tp_proxy_has_interface_by_id (priv->account,
+ TP_IFACE_QUARK_ACCOUNT_INTERFACE_STORAGE);
+
+ if (priv->storage)
+ tp_cli_dbus_properties_call_get_all (priv->account, -1,
+ TP_IFACE_ACCOUNT_INTERFACE_STORAGE,
+ empathy_account_settings_got_account_storage,
+ NULL, NULL, object);
}
if (G_OBJECT_CLASS (
@@ -350,6 +369,13 @@ empathy_account_settings_finalize (GObject *object)
g_free (priv->service);
g_free (priv->display_name);
g_free (priv->icon_name);
+ g_free (priv->storage_provider);
+
+ if (priv->storage_identifier != NULL)
+ tp_g_value_slice_free (priv->storage_identifier);
+
+ if (priv->storage_specific_information != NULL)
+ g_hash_table_unref (priv->storage_specific_information);
if (priv->required_params != NULL)
g_array_free (priv->required_params, TRUE);
@@ -421,6 +447,9 @@ empathy_account_settings_check_readyness (EmpathyAccountSettings *self)
}
}
+ if (priv->storage && !priv->attempted_storage_properties)
+ return;
+
g_object_ref (priv->manager);
priv->ready = TRUE;
@@ -456,6 +485,43 @@ empathy_account_settings_managers_ready_cb (GObject *object,
empathy_account_settings_check_readyness (settings);
}
+static void
+empathy_account_settings_got_account_storage (TpProxy *account,
+ GHashTable *properties,
+ const GError *error,
+ gpointer user_data,
+ GObject *object)
+{
+ EmpathyAccountSettingsPriv *priv = GET_PRIV (object);
+
+ priv->attempted_storage_properties = TRUE;
+
+ if (error != NULL)
+ {
+ DEBUG ("Failed to get Account.Iface.Storage properties: %s",
+ error->message);
+ return;
+ }
+
+ /* Note to the unwary, GetAll() does not returned fully-qualified property
+ * names as is common for Telepathy APIs */
+ priv->storage_provider = g_strdup (tp_asv_get_string (properties,
+ "StorageProvider"));
+
+ if (!EMP_STR_EMPTY (priv->storage_provider))
+ {
+ priv->storage_identifier = tp_g_value_slice_dup (
+ tp_asv_lookup (properties, "StorageIdentifier"));
+ priv->storage_specific_information = g_hash_table_ref (
+ tp_asv_get_boxed (properties, "StorageSpecificInformation",
+ TP_HASH_TYPE_QUALIFIED_PROPERTY_VALUE_MAP));
+ priv->storage_restrictions = tp_asv_get_uint32 (properties,
+ "StorageRestrictions", NULL);
+ }
+
+ empathy_account_settings_check_readyness (EMPATHY_ACCOUNT_SETTINGS (object));
+}
+
EmpathyAccountSettings *
empathy_account_settings_new (const gchar *connection_manager,
const gchar *protocol,
@@ -1384,3 +1450,29 @@ empathy_account_settings_get_tp_protocol (EmpathyAccountSettings *self)
return tp_connection_manager_get_protocol (priv->manager, priv->protocol);
}
+
+const char *
+empathy_account_settings_get_storage_provider (EmpathyAccountSettings *self)
+{
+ return GET_PRIV (self)->storage_provider;
+}
+
+const GValue *
+empathy_account_settings_get_storage_identifier (EmpathyAccountSettings *self)
+{
+ return GET_PRIV (self)->storage_identifier;
+}
+
+GHashTable *
+empathy_account_settings_get_storage_specific_information (
+ EmpathyAccountSettings *self)
+{
+ return GET_PRIV (self)->storage_specific_information;
+}
+
+TpStorageRestrictionFlags
+empathy_account_settings_get_storage_restrictions (
+ EmpathyAccountSettings *self)
+{
+ return GET_PRIV (self)->storage_restrictions;
+}