[empathy] Re-enable changing individuals' groups



commit 265ea7ef4abb3df7cf6d8e1c9f4c5bfe68763179
Author: Philip Withnall <philip withnall collabora co uk>
Date:   Fri Jul 2 11:29:05 2010 +0100

    Re-enable changing individuals' groups
    
    This introduces a hacky function to return the individual for a given
    EmpathyContact, which should go away once we break the assumption that
    individuals are 1:1 with contacts.

 libempathy-gtk/empathy-contact-widget.c |   28 +++++++++++++++-------------
 libempathy/empathy-utils.c              |   29 +++++++++++++++++++++++++++++
 libempathy/empathy-utils.h              |    1 +
 3 files changed, 45 insertions(+), 13 deletions(-)
---
diff --git a/libempathy-gtk/empathy-contact-widget.c b/libempathy-gtk/empathy-contact-widget.c
index 0241281..82b6381 100644
--- a/libempathy-gtk/empathy-contact-widget.c
+++ b/libempathy-gtk/empathy-contact-widget.c
@@ -579,18 +579,15 @@ contact_widget_cell_toggled (GtkCellRendererToggle *cell,
 
   if (group)
     {
-      if (enabled)
-        {
-          empathy_contact_list_remove_from_group (
-              EMPATHY_CONTACT_LIST (information->manager), information->contact,
-              group);
-        }
-      else
+      FolksIndividual *individual = folks_individual_from_empathy_contact (
+          information->contact);
+
+      if (individual)
         {
-          empathy_contact_list_add_to_group (
-              EMPATHY_CONTACT_LIST (information->manager), information->contact,
-              group);
+          folks_groups_change_group (FOLKS_GROUPS (individual), group, !enabled);
+          g_object_unref (individual);
         }
+
       g_free (group);
     }
 }
@@ -797,6 +794,7 @@ contact_widget_button_group_clicked_cb (GtkButton *button,
   GtkTreeView *view;
   GtkListStore *store;
   GtkTreeIter iter;
+  FolksIndividual *individual;
   const gchar *group;
 
   view = GTK_TREE_VIEW (information->treeview_groups);
@@ -810,9 +808,13 @@ contact_widget_button_group_clicked_cb (GtkButton *button,
       COL_ENABLED, TRUE,
       -1);
 
-  empathy_contact_list_add_to_group (
-      EMPATHY_CONTACT_LIST (information->manager), information->contact,
-      group);
+  individual = folks_individual_from_empathy_contact (information->contact);
+
+  if (individual)
+    {
+      folks_groups_change_group (FOLKS_GROUPS (individual), group, TRUE);
+      g_object_unref (individual);
+    }
 }
 
 static void
diff --git a/libempathy/empathy-utils.c b/libempathy/empathy-utils.c
index d80aad5..ddf56f7 100644
--- a/libempathy/empathy-utils.c
+++ b/libempathy/empathy-utils.c
@@ -43,6 +43,7 @@
 
 #include "empathy-utils.h"
 #include "empathy-contact-manager.h"
+#include "empathy-individual-manager.h"
 #include "empathy-dispatcher.h"
 #include "empathy-dispatch-operation.h"
 #include "empathy-idle.h"
@@ -620,3 +621,31 @@ empathy_contact_from_folks_individual (FolksIndividual *individual)
 
   return contact;
 }
+
+/* TODO: This also needs to be eliminated, and is horrifically slow. */
+FolksIndividual *
+folks_individual_from_empathy_contact (EmpathyContact *contact)
+{
+  EmpathyIndividualManager *manager;
+  FolksIndividual *individual = NULL;
+  GList *individuals, *l;
+
+  manager = empathy_individual_manager_dup_singleton ();
+  individuals = empathy_individual_manager_get_members (manager);
+
+  for (l = individuals; (l != NULL) && (individual == NULL); l = l->next)
+    {
+      FolksIndividual *i = FOLKS_INDIVIDUAL (l->data);
+      EmpathyContact *c = empathy_contact_from_folks_individual (i);
+
+      if (c == contact)
+        individual = g_object_ref (i);
+
+      g_object_unref (c);
+    }
+
+  g_list_free (individuals);
+  g_object_unref (manager);
+
+  return individual;
+}
diff --git a/libempathy/empathy-utils.h b/libempathy/empathy-utils.h
index c6de97a..a07f575 100644
--- a/libempathy/empathy-utils.h
+++ b/libempathy/empathy-utils.h
@@ -93,6 +93,7 @@ void empathy_connect_new_account (TpAccount *account,
 TpConnectionPresenceType empathy_folks_presence_type_to_tp (FolksPresenceType type);
 gboolean empathy_folks_individual_contains_contact (FolksIndividual *individual);
 EmpathyContact * empathy_contact_from_folks_individual (FolksIndividual *individual);
+FolksIndividual *folks_individual_from_empathy_contact (EmpathyContact *contact);
 
 G_END_DECLS
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]