]> git.0d.be Git - empathy.git/commitdiff
Support removing groups
authorPhilip Withnall <philip.withnall@collabora.co.uk>
Thu, 1 Jul 2010 16:03:59 +0000 (17:03 +0100)
committerTravis Reitter <treitter@gmail.com>
Tue, 20 Jul 2010 23:12:36 +0000 (16:12 -0700)
libempathy-gtk/empathy-individual-view.c
libempathy/empathy-individual-manager.c
libempathy/empathy-individual-manager.h

index e75f3629ee817f5f1d0fb6441d3fbba65620a311..43d4a785646be85dd10eea9a7f8e23827afc3151 100644 (file)
@@ -1997,8 +1997,10 @@ individual_view_group_remove_activate_cb (GtkMenuItem *menuitem,
       if (individual_view_remove_dialog_show (parent, _("Removing group"),
               text))
         {
-          /* TODO: implement */
-          DEBUG ("removing group unimplemented");
+          EmpathyIndividualManager *manager =
+              empathy_individual_manager_dup_singleton ();
+          empathy_individual_manager_remove_group (manager, group);
+          g_object_unref (G_OBJECT (manager));
         }
 
       g_free (text);
index ef2688b14683b2b1484b504fdd2098ecb327f1c4..c2c2eefae2ee31d5fd9deb0461dfb87868fa0df1 100644 (file)
@@ -329,6 +329,32 @@ empathy_individual_manager_remove (EmpathyIndividualManager *self,
   folks_individual_aggregator_remove_individual (priv->aggregator, individual);
 }
 
+static void
+remove_group_cb (const gchar *id, FolksIndividual *individual,
+    const gchar *group)
+{
+  folks_groups_change_group (FOLKS_GROUPS (individual), group, FALSE);
+}
+
+void
+empathy_individual_manager_remove_group (EmpathyIndividualManager *manager,
+    const gchar *group)
+{
+  EmpathyIndividualManagerPriv *priv;
+  GHashTable *individuals;
+
+  g_return_if_fail (EMPATHY_IS_INDIVIDUAL_MANAGER (manager));
+  g_return_if_fail (group != NULL);
+
+  priv = GET_PRIV (manager);
+
+  DEBUG (G_STRLOC ": removing group %s", group);
+
+  /* Remove every individual from the group */
+  individuals = folks_individual_aggregator_get_individuals (priv->aggregator);
+  g_hash_table_foreach (individuals, (GHFunc) remove_group_cb, group);
+}
+
 EmpathyIndividualManagerFlags
 empathy_individual_manager_get_flags_for_connection (
     EmpathyIndividualManager *self,
index 2fab1ffb066451463384ee2221111ff7c13957a9..66014bcbb3b3196110efaadeb5968b7fa00009d6 100644 (file)
@@ -79,6 +79,9 @@ void empathy_individual_manager_remove (EmpathyIndividualManager *manager,
     FolksIndividual *individual,
     const gchar *message);
 
+void empathy_individual_manager_remove_group (EmpathyIndividualManager *manager,
+    const gchar *group);
+
 EmpathyIndividualManagerFlags
 empathy_individual_manager_get_flags_for_connection (
     EmpathyIndividualManager *manager,