]> git.0d.be Git - empathy.git/commitdiff
keyring: add set_room_password functions
authorJonny Lamb <jonnylamb@gnome.org>
Fri, 28 Jan 2011 16:44:44 +0000 (16:44 +0000)
committerJonny Lamb <jonnylamb@gnome.org>
Fri, 28 Jan 2011 16:44:44 +0000 (16:44 +0000)
Signed-off-by: Jonny Lamb <jonnylamb@gnome.org>
libempathy/empathy-keyring.c
libempathy/empathy-keyring.h

index bec08c0febe9b5cfea3890a5acaeeba5f6feb618..bde950b784905fdc90763134e4e43d6f3ed8314d 100644 (file)
@@ -33,6 +33,12 @@ static GnomeKeyringPasswordSchema account_keyring_schema =
       { "param-name", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING },
       { NULL } } };
 
+static GnomeKeyringPasswordSchema room_keyring_schema =
+  { GNOME_KEYRING_ITEM_GENERIC_SECRET,
+    { { "account-id", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING },
+      { "room-id", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING },
+      { NULL } } };
+
 gboolean
 empathy_keyring_is_available (void)
 {
@@ -231,6 +237,41 @@ empathy_keyring_set_account_password_async (TpAccount *account,
   g_free (name);
 }
 
+void
+empathy_keyring_set_room_password_async (TpAccount *account,
+    const gchar *id,
+    const gchar *password,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  GSimpleAsyncResult *simple;
+  const gchar *account_id;
+  gchar *name;
+
+  g_return_if_fail (TP_IS_ACCOUNT (account));
+  g_return_if_fail (id != NULL);
+  g_return_if_fail (password != NULL);
+
+  simple = g_simple_async_result_new (G_OBJECT (account), callback,
+      user_data, empathy_keyring_set_room_password_async);
+
+  account_id = tp_proxy_get_object_path (account) +
+    strlen (TP_ACCOUNT_OBJECT_PATH_BASE);
+
+  DEBUG ("Remembering password for room '%s' on account '%s'", id, account_id);
+
+  name = g_strdup_printf ("Password for chatroom '%s' on account %s (%s)",
+      id, tp_account_get_display_name (account), account_id);
+
+  gnome_keyring_store_password (&room_keyring_schema, NULL, name, password,
+      store_password_cb, simple, NULL,
+      "account-id", account_id,
+      "room-id", id,
+      NULL);
+
+  g_free (name);
+}
+
 gboolean
 empathy_keyring_set_account_password_finish (TpAccount *account,
     GAsyncResult *result,
@@ -252,6 +293,27 @@ empathy_keyring_set_account_password_finish (TpAccount *account,
   return TRUE;
 }
 
+gboolean
+empathy_keyring_set_room_password_finish (TpAccount *account,
+    GAsyncResult *result,
+    GError **error)
+{
+  GSimpleAsyncResult *simple;
+
+  g_return_val_if_fail (TP_IS_ACCOUNT (account), FALSE);
+  g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), FALSE);
+
+  simple = G_SIMPLE_ASYNC_RESULT (result);
+
+  if (g_simple_async_result_propagate_error (simple, error))
+    return FALSE;
+
+  g_return_val_if_fail (g_simple_async_result_is_valid (result,
+          G_OBJECT (account), empathy_keyring_set_room_password_async), FALSE);
+
+  return TRUE;
+}
+
 /* delete */
 
 static void
index 58a7adce725161bb8f983acc301104c5263d639a..92c8a6e9f51167caa0ae3ebe7e537ab6af882207 100644 (file)
@@ -47,6 +47,13 @@ void empathy_keyring_set_account_password_async (TpAccount *account,
 gboolean empathy_keyring_set_account_password_finish (TpAccount *account,
     GAsyncResult *result, GError **error);
 
+void empathy_keyring_set_room_password_async (TpAccount *account,
+    const gchar *id, const gchar *password, GAsyncReadyCallback callback,
+    gpointer user_data);
+
+gboolean empathy_keyring_set_room_password_finish (TpAccount *account,
+    GAsyncResult *result, GError **error);
+
 void empathy_keyring_delete_account_password_async (TpAccount *account,
     GAsyncReadyCallback callback, gpointer user_data);