/* Returns TRUE if the given Individual contains a TpContact */ gboolean empathy_folks_individual_contains_contact (FolksIndividual *individual) { GeeSet *personas; GeeIterator *iter; gboolean retval = FALSE; g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual), FALSE); personas = folks_individual_get_personas (individual); iter = gee_iterable_iterator (GEE_ITERABLE (personas)); while (!retval && gee_iterator_next (iter)) { FolksPersona *persona = gee_iterator_get (iter); TpContact *contact = NULL; if (empathy_folks_persona_is_interesting (persona)) contact = tpf_persona_get_contact (TPF_PERSONA (persona)); g_clear_object (&persona); if (contact != NULL) retval = TRUE; } g_clear_object (&iter); return retval; }
/* @words = tpaw_live_search_strip_utf8_string (@text); * * User has to pass both so we don't have to compute @words ourself each time * this function is called. */ gboolean empathy_individual_match_string (FolksIndividual *individual, const char *text, GPtrArray *words) { const gchar *str; GeeSet *personas; GeeIterator *iter; gboolean retval = FALSE; /* check alias name */ str = folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (individual)); if (tpaw_live_search_match_words (str, words)) return TRUE; personas = folks_individual_get_personas (individual); /* check contact id, remove the @server.com part */ iter = gee_iterable_iterator (GEE_ITERABLE (personas)); while (retval == FALSE && gee_iterator_next (iter)) { FolksPersona *persona = gee_iterator_get (iter); const gchar *p; if (empathy_folks_persona_is_interesting (persona)) { str = folks_persona_get_display_id (persona); /* Accept the persona if @text is a full prefix of his ID; that allows * user to find, say, a jabber contact by typing his JID. */ if (g_str_has_prefix (str, text)) { retval = TRUE; } else { gchar *dup_str = NULL; gboolean visible; p = strstr (str, "@"); if (p != NULL) str = dup_str = g_strndup (str, p - str); visible = tpaw_live_search_match_words (str, words); g_free (dup_str); if (visible) retval = TRUE; } } g_clear_object (&persona); } g_clear_object (&iter); /* FIXME: Add more rules here, we could check phone numbers in * contact's vCard for example. */ return retval; }
/* Calculate whether the Individual can do audio or video calls. * FIXME: We can remove this once libfolks has grown capabilities support * again: bgo#626179. */ void empathy_individual_can_audio_video_call (FolksIndividual *individual, gboolean *can_audio_call, gboolean *can_video_call, EmpathyContact **out_contact) { GeeSet *personas; GeeIterator *iter; gboolean can_audio = FALSE, can_video = FALSE; personas = folks_individual_get_personas (individual); iter = gee_iterable_iterator (GEE_ITERABLE (personas)); while (gee_iterator_next (iter)) { FolksPersona *persona = gee_iterator_get (iter); TpContact *tp_contact; if (!empathy_folks_persona_is_interesting (persona)) goto while_finish; tp_contact = tpf_persona_get_contact (TPF_PERSONA (persona)); if (tp_contact != NULL) { EmpathyContact *contact; contact = empathy_contact_dup_from_tp_contact (tp_contact); empathy_contact_set_persona (contact, persona); can_audio = can_audio || empathy_contact_get_capabilities (contact) & EMPATHY_CAPABILITIES_AUDIO; can_video = can_video || empathy_contact_get_capabilities (contact) & EMPATHY_CAPABILITIES_VIDEO; if (out_contact != NULL) *out_contact = g_object_ref (contact); g_object_unref (contact); } while_finish: g_clear_object (&persona); if (can_audio && can_video) break; } g_clear_object (&iter); if (can_audio_call != NULL) *can_audio_call = can_audio; if (can_video_call != NULL) *can_video_call = can_video; }
/* Retrieve the EmpathyContact corresponding to the first TpContact contained * within the given Individual. Note that this is a temporary convenience. See * the TODO above. */ EmpathyContact * empathy_contact_dup_from_folks_individual (FolksIndividual *individual) { GeeSet *personas; GeeIterator *iter; EmpathyContact *contact = NULL; g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual), NULL); personas = folks_individual_get_personas (individual); iter = gee_iterable_iterator (GEE_ITERABLE (personas)); while (gee_iterator_next (iter) && (contact == NULL)) { TpfPersona *persona = gee_iterator_get (iter); if (empathy_folks_persona_is_interesting (FOLKS_PERSONA (persona))) { TpContact *tp_contact; tp_contact = tpf_persona_get_contact (persona); if (tp_contact != NULL) { contact = empathy_contact_dup_from_tp_contact (tp_contact); empathy_contact_set_persona (contact, FOLKS_PERSONA (persona)); } } g_clear_object (&persona); } g_clear_object (&iter); if (contact == NULL) { DEBUG ("Can't create an EmpathyContact for Individual %s", folks_individual_get_id (individual)); } return contact; }