#include "empathy-roster-model-aggregator.h"
-#include "empathy-roster-model.h"
-
/**
* SECTION: empathy-roster-model-aggregator
* @title: EmpathyRosterModelAggregator
enum
{
PROP_AGGREGATOR = 1,
+ PROP_FILTER_FUNC,
+ PROP_FILTER_DATA,
N_PROPS
};
{
FolksIndividualAggregator *aggregator;
GHashTable *individuals; /* Individual -> Individual */
+
+ EmpathyRosterModelAggregatorFilterFunc filter_func;
+ gpointer filter_data;
};
static void
add_individual (EmpathyRosterModelAggregator *self,
FolksIndividual *individual)
{
+ if (self->priv->filter_func != NULL && !self->priv->filter_func (
+ EMPATHY_ROSTER_MODEL (self), individual, self))
+ return;
+
g_hash_table_add (self->priv->individuals,
g_object_ref (individual));
case PROP_AGGREGATOR:
g_value_set_object (value, self->priv->aggregator);
break;
+ case PROP_FILTER_FUNC:
+ g_value_set_pointer (value, self->priv->filter_func);
+ break;
+ case PROP_FILTER_DATA:
+ g_value_set_pointer (value, self->priv->filter_data);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
g_assert (self->priv->aggregator == NULL); /* construct only */
self->priv->aggregator = g_value_dup_object (value);
break;
+ case PROP_FILTER_FUNC:
+ g_assert (self->priv->filter_func == NULL); /* construct only */
+ self->priv->filter_func = g_value_get_pointer (value);
+ break;
+ case PROP_FILTER_DATA:
+ g_assert (self->priv->filter_data == NULL); /* construct only */
+ self->priv->filter_data = g_value_get_pointer (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
g_object_class_install_property (oclass, PROP_AGGREGATOR, spec);
+ spec = g_param_spec_pointer ("filter-func", "Filter-Func",
+ "EmpathyRosterModelAggregatorFilterFunc",
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
+ g_object_class_install_property (oclass, PROP_FILTER_FUNC, spec);
+
+ spec = g_param_spec_pointer ("filter-data", "Filter-Data",
+ "GPointer",
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
+ g_object_class_install_property (oclass, PROP_FILTER_DATA, spec);
+
g_type_class_add_private (klass, sizeof (EmpathyRosterModelAggregatorPriv));
}
}
EmpathyRosterModelAggregator *
-empathy_roster_model_aggregator_new (void)
+empathy_roster_model_aggregator_new (
+ EmpathyRosterModelAggregatorFilterFunc filter_func,
+ gpointer user_data)
{
return g_object_new (EMPATHY_TYPE_ROSTER_MODEL_AGGREGATOR,
+ "filter-func", filter_func,
+ "filter-data", user_data,
NULL);
}
EmpathyRosterModelAggregator *
empathy_roster_model_aggregator_new_with_aggregator (
- FolksIndividualAggregator *aggregator)
+ FolksIndividualAggregator *aggregator,
+ EmpathyRosterModelAggregatorFilterFunc filter_func,
+ gpointer user_data)
{
g_return_val_if_fail (FOLKS_IS_INDIVIDUAL_AGGREGATOR (aggregator), NULL);
return g_object_new (EMPATHY_TYPE_ROSTER_MODEL_AGGREGATOR,
"aggregator", aggregator,
+ "filter-func", filter_func,
+ "filter-data", user_data,
NULL);
}
#include <folks/folks.h>
+#include "empathy-roster-model.h"
+
G_BEGIN_DECLS
typedef struct _EmpathyRosterModelAggregator EmpathyRosterModelAggregator;
EmpathyRosterModelAggregatorPriv *priv;
};
+typedef gboolean (* EmpathyRosterModelAggregatorFilterFunc) (
+ EmpathyRosterModel *model,
+ FolksIndividual *individual,
+ gpointer user_data);
+
GType empathy_roster_model_aggregator_get_type (void);
/* TYPE MACROS */
EMPATHY_TYPE_ROSTER_MODEL_AGGREGATOR, \
EmpathyRosterModelAggregatorClass))
-EmpathyRosterModelAggregator * empathy_roster_model_aggregator_new (void);
+EmpathyRosterModelAggregator * empathy_roster_model_aggregator_new (
+ EmpathyRosterModelAggregatorFilterFunc filter_func,
+ gpointer user_data);
EmpathyRosterModelAggregator *
empathy_roster_model_aggregator_new_with_aggregator (
- FolksIndividualAggregator *aggregator);
+ FolksIndividualAggregator *aggregator,
+ EmpathyRosterModelAggregatorFilterFunc filter_func,
+ gpointer user_data);
G_END_DECLS