diff options
author | Danielle Madeley <danielle.madeley@collabora.co.uk> | 2011-02-09 14:24:27 +0800 |
---|---|---|
committer | Chandni Verma <chandniverma2112@gmail.com> | 2011-03-08 09:07:29 +0800 |
commit | 6da159d09091d68a102c142b10747ae58755de51 (patch) | |
tree | cc09647e5650e7d4beb0ddc26d97c1fdd1c467fd | |
parent | 4f3b2d373b9f22abdbf2679a8c87ec68c1ae1d20 (diff) | |
download | gsoc2013-empathy-6da159d09091d68a102c142b10747ae58755de51.tar gsoc2013-empathy-6da159d09091d68a102c142b10747ae58755de51.tar.gz gsoc2013-empathy-6da159d09091d68a102c142b10747ae58755de51.tar.bz2 gsoc2013-empathy-6da159d09091d68a102c142b10747ae58755de51.tar.lz gsoc2013-empathy-6da159d09091d68a102c142b10747ae58755de51.tar.xz gsoc2013-empathy-6da159d09091d68a102c142b10747ae58755de51.tar.zst gsoc2013-empathy-6da159d09091d68a102c142b10747ae58755de51.zip |
Add contact blocking support to EmpathyIndividualManager
-rw-r--r-- | libempathy/empathy-individual-manager.c | 104 | ||||
-rw-r--r-- | libempathy/empathy-individual-manager.h | 18 |
2 files changed, 122 insertions, 0 deletions
diff --git a/libempathy/empathy-individual-manager.c b/libempathy/empathy-individual-manager.c index 894ae648b..a2432effe 100644 --- a/libempathy/empathy-individual-manager.c +++ b/libempathy/empathy-individual-manager.c @@ -30,6 +30,7 @@ #include <telepathy-glib/util.h> #include <folks/folks.h> +#include <folks/folks-telepathy.h> #include <extensions/extensions.h> @@ -483,6 +484,77 @@ empathy_individual_manager_remove (EmpathyIndividualManager *self, aggregator_remove_individual_cb, self); } +/** + * empathy_individual_manager_supports_blocking + * @self: the #EmpathyIndividualManager + * @individual: an individual to check + * + * Indicates whether any personas of an @individual can be blocked. + * + * Returns: %TRUE if any persona supports contact blocking + */ +gboolean +empathy_individual_manager_supports_blocking (EmpathyIndividualManager *self, + FolksIndividual *individual) +{ + EmpathyIndividualManagerPriv *priv; + GList *personas, *l; + + g_return_val_if_fail (EMPATHY_IS_INDIVIDUAL_MANAGER (self), FALSE); + + priv = GET_PRIV (self); + + personas = folks_individual_get_personas (individual); + + for (l = personas; l != NULL; l = l->next) + { + TpfPersona *persona = l->data; + TpConnection *conn; + + if (!TPF_IS_PERSONA (persona)) + continue; + + conn = tp_contact_get_connection (tpf_persona_get_contact (persona)); + + if (empathy_individual_manager_get_flags_for_connection (self, conn) & + EMPATHY_INDIVIDUAL_MANAGER_CAN_BLOCK) + return TRUE; + } + + return FALSE; +} + +void +empathy_individual_manager_set_blocked (EmpathyIndividualManager *self, + FolksIndividual *individual, + gboolean blocked) +{ + EmpathyIndividualManagerPriv *priv; + GList *personas, *l; + + g_return_if_fail (EMPATHY_IS_INDIVIDUAL_MANAGER (self)); + + priv = GET_PRIV (self); + + personas = folks_individual_get_personas (individual); + + for (l = personas; l != NULL; l = l->next) + { + TpfPersona *persona = l->data; + EmpathyContact *contact; + + if (!TPF_IS_PERSONA (persona)) + continue; + + contact = empathy_contact_dup_from_tp_contact ( + tpf_persona_get_contact (persona)); + empathy_contact_set_persona (contact, FOLKS_PERSONA (persona)); + empathy_contact_list_set_blocked ( + EMPATHY_CONTACT_LIST (priv->contact_manager), + contact, blocked); + } +} + static void groups_change_group_cb (GObject *source, GAsyncResult *result, @@ -526,6 +598,38 @@ empathy_individual_manager_remove_group (EmpathyIndividualManager *manager, (gpointer) group); } +EmpathyIndividualManagerFlags +empathy_individual_manager_get_flags_for_connection ( + EmpathyIndividualManager *self, + TpConnection *connection) +{ + EmpathyIndividualManagerPriv *priv; + EmpathyContactListFlags list_flags; + EmpathyIndividualManagerFlags flags; + + g_return_val_if_fail (EMPATHY_IS_INDIVIDUAL_MANAGER (self), + EMPATHY_INDIVIDUAL_MANAGER_NO_FLAGS); + + priv = GET_PRIV (self); + + list_flags = empathy_contact_manager_get_flags_for_connection ( + priv->contact_manager, connection); + + flags = EMPATHY_INDIVIDUAL_MANAGER_NO_FLAGS; + if (list_flags & EMPATHY_CONTACT_LIST_CAN_ADD) + flags |= EMPATHY_INDIVIDUAL_MANAGER_CAN_ADD; + if (list_flags & EMPATHY_CONTACT_LIST_CAN_REMOVE) + flags |= EMPATHY_INDIVIDUAL_MANAGER_CAN_REMOVE; + if (list_flags & EMPATHY_CONTACT_LIST_CAN_ALIAS) + flags |= EMPATHY_INDIVIDUAL_MANAGER_CAN_ALIAS; + if (list_flags & EMPATHY_CONTACT_LIST_CAN_GROUP) + flags |= EMPATHY_INDIVIDUAL_MANAGER_CAN_GROUP; + if (list_flags & EMPATHY_CONTACT_LIST_CAN_BLOCK) + flags |= EMPATHY_INDIVIDUAL_MANAGER_CAN_BLOCK; + + return flags; +} + static void link_personas_cb (FolksIndividualAggregator *aggregator, GAsyncResult *async_result, diff --git a/libempathy/empathy-individual-manager.h b/libempathy/empathy-individual-manager.h index f2f5f5b56..daa7ec86a 100644 --- a/libempathy/empathy-individual-manager.h +++ b/libempathy/empathy-individual-manager.h @@ -36,6 +36,16 @@ G_BEGIN_DECLS #define EMPATHY_IS_INDIVIDUAL_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_INDIVIDUAL_MANAGER)) #define EMPATHY_INDIVIDUAL_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_INDIVIDUAL_MANAGER, EmpathyIndividualManagerClass)) +typedef enum +{ + EMPATHY_INDIVIDUAL_MANAGER_NO_FLAGS = 0, + EMPATHY_INDIVIDUAL_MANAGER_CAN_ADD = 1 << 0, + EMPATHY_INDIVIDUAL_MANAGER_CAN_REMOVE = 1 << 1, + EMPATHY_INDIVIDUAL_MANAGER_CAN_ALIAS = 1 << 2, + EMPATHY_INDIVIDUAL_MANAGER_CAN_GROUP = 1 << 3, + EMPATHY_INDIVIDUAL_MANAGER_CAN_BLOCK = 1 << 4, +} EmpathyIndividualManagerFlags; + typedef struct _EmpathyIndividualManager EmpathyIndividualManager; typedef struct _EmpathyIndividualManagerClass EmpathyIndividualManagerClass; @@ -81,5 +91,13 @@ void empathy_individual_manager_unlink_individual ( EmpathyIndividualManager *self, FolksIndividual *individual); +gboolean empathy_individual_manager_supports_blocking ( + EmpathyIndividualManager *self, + FolksIndividual *individual); + +void empathy_individual_manager_set_blocked (EmpathyIndividualManager *self, + FolksIndividual *individual, + gboolean blocked); + G_END_DECLS #endif /* __EMPATHY_INDIVIDUAL_MANAGER_H__ */ |