*/
#include "config.h"
-
#include "empathy-roster-model-manager.h"
-#include "empathy-roster-model.h"
-
#include <glib/gi18n-lib.h>
-#include <libempathy/empathy-utils.h>
+#include "empathy-roster-model.h"
+#include "empathy-utils.h"
static void roster_model_iface_init (EmpathyRosterModelInterface *iface);
g_list_find (tops, individual) != NULL);
}
+static void
+add_to_top_group_members (EmpathyRosterModelManager *self,
+ FolksIndividual *individual)
+{
+ self->priv->top_group_members = g_list_prepend (self->priv->top_group_members,
+ individual);
+}
+
+static void
+remove_from_top_group_members (EmpathyRosterModelManager *self,
+ FolksIndividual *individual)
+{
+ self->priv->top_group_members = g_list_remove (self->priv->top_group_members,
+ individual);
+}
+
static void
populate_model (EmpathyRosterModelManager *self)
{
for (l = individuals; l != NULL; l = g_list_next (l))
{
if (individual_should_be_in_top_group_members (self, l->data))
- self->priv->top_group_members = g_list_prepend (
- self->priv->top_group_members, l->data);
+ add_to_top_group_members (self, l->data);
empathy_roster_model_fire_individual_added (EMPATHY_ROSTER_MODEL (self),
l->data);
{
if (individual_should_be_in_top_group_members (self, l->data) &&
!individual_in_top_group_members (self, l->data))
- self->priv->top_group_members = g_list_prepend (
- self->priv->top_group_members, l->data);
+ add_to_top_group_members (self, l->data);
empathy_roster_model_fire_individual_added (EMPATHY_ROSTER_MODEL (self),
l->data);
for (l = removed; l != NULL; l = g_list_next (l))
{
- if (individual_in_top_group_members (self, l->data) &&
- !individual_should_be_in_top_group_members (self, l->data))
- self->priv->top_group_members = g_list_remove (
- self->priv->top_group_members, l->data);
+ if (individual_in_top_group_members (self, l->data))
+ remove_from_top_group_members (self, l->data);
empathy_roster_model_fire_individual_removed (EMPATHY_ROSTER_MODEL (self),
l->data);
{
if (!individual_in_top_group_members (self, l->data))
{
- self->priv->top_group_members = g_list_prepend (
- self->priv->top_group_members, l->data);
+ add_to_top_group_members (self, l->data);
empathy_roster_model_fire_groups_changed (
EMPATHY_ROSTER_MODEL (self), l->data,
EMPATHY_ROSTER_MODEL_GROUP_TOP_GROUP, TRUE);
}
}
- for (l = self->priv->top_group_members; l != NULL; l = g_list_next (l))
+
+ l = self->priv->top_group_members;
+ while (l != NULL)
{
- if (!individual_should_be_in_top_group_members (self, l->data))
+ FolksIndividual *individual = l->data;
+
+ /* remove_from_top_group_members will modify the list so we already take
+ * the next pointer. */
+ l = g_list_next (l);
+
+ if (!individual_should_be_in_top_group_members (self, individual))
{
- self->priv->top_group_members = g_list_remove (
- self->priv->top_group_members, l->data);
+ remove_from_top_group_members (self, individual);
- empathy_roster_model_fire_groups_changed (
- EMPATHY_ROSTER_MODEL (self), l->data,
- EMPATHY_ROSTER_MODEL_GROUP_TOP_GROUP, FALSE);
+ empathy_roster_model_fire_groups_changed (EMPATHY_ROSTER_MODEL (self),
+ individual, EMPATHY_ROSTER_MODEL_GROUP_TOP_GROUP, FALSE);
}
}
}
{
if (favourite && !individual_in_top_group_members (self, individual))
{
- self->priv->top_group_members = g_list_prepend (
- self->priv->top_group_members, individual);
+ add_to_top_group_members (self, individual);
empathy_roster_model_fire_groups_changed (
EMPATHY_ROSTER_MODEL (self), individual,
else if (!favourite &&
!individual_should_be_in_top_group_members (self, individual))
{
- self->priv->top_group_members = g_list_remove (
- self->priv->top_group_members, individual);
+ remove_from_top_group_members (self, individual);
empathy_roster_model_fire_groups_changed (
EMPATHY_ROSTER_MODEL (self), individual,
G_CALLBACK (groups_changed_cb), self, 0);
tp_g_signal_connect_object (self->priv->manager, "notify::top-individuals",
G_CALLBACK (top_individuals_changed_cb), self, 0);
- tp_g_signal_connect_object (self->priv->manager, "notify::favourites-changed",
+ tp_g_signal_connect_object (self->priv->manager, "favourites-changed",
G_CALLBACK (favourites_changed_cb), self, 0);
}
}
static GList *
-empathy_roster_model_manager_get_groups_for_individual (
+empathy_roster_model_manager_dup_groups_for_individual (
EmpathyRosterModel *model,
FolksIndividual *individual)
{
if (is_xmpp_local_contact (individual))
{
groups_list = g_list_prepend (groups_list,
- EMPATHY_ROSTER_MODEL_GROUP_PEOPLE_NEARBY);
+ g_strdup (EMPATHY_ROSTER_MODEL_GROUP_PEOPLE_NEARBY));
return groups_list;
}
if (individual_in_top_group_members (EMPATHY_ROSTER_MODEL_MANAGER (model),
individual))
groups_list = g_list_prepend (groups_list,
- EMPATHY_ROSTER_MODEL_GROUP_TOP_GROUP);
+ g_strdup (EMPATHY_ROSTER_MODEL_GROUP_TOP_GROUP));
groups_set = folks_group_details_get_groups (
FOLKS_GROUP_DETAILS (individual));
return groups_list;
}
-static GList *
-empathy_roster_model_manager_get_top_individuals (EmpathyRosterModel *model)
-{
- EmpathyRosterModelManager *self = EMPATHY_ROSTER_MODEL_MANAGER (model);
-
- return empathy_individual_manager_get_top_individuals (self->priv->manager);
-}
-
static void
roster_model_iface_init (EmpathyRosterModelInterface *iface)
{
iface->get_individuals = empathy_roster_model_manager_get_individuals;
- iface->get_groups_for_individual =
- empathy_roster_model_manager_get_groups_for_individual;
- iface->get_top_individuals = empathy_roster_model_manager_get_top_individuals;
+ iface->dup_groups_for_individual =
+ empathy_roster_model_manager_dup_groups_for_individual;
}