static void contact_widget_set_contact (EmpathyContactWidget *information, EmpathyContact *contact) { if (contact == information->contact) return; contact_widget_remove_contact (information); if (contact) { TpConnection *connection; connection = empathy_contact_get_connection (contact); information->contact = g_object_ref (contact); information->factory = empathy_tp_contact_factory_dup_singleton (connection); } /* set the selected account to be the account this contact came from */ if (contact && EMPATHY_IS_ACCOUNT_CHOOSER (information->widget_account)) { empathy_account_chooser_set_account ( EMPATHY_ACCOUNT_CHOOSER (information->widget_account), empathy_contact_get_account (contact)); } /* Update information for widgets */ contact_widget_contact_update (information); contact_widget_groups_update (information); contact_widget_details_update (information); contact_widget_client_update (information); contact_widget_location_update (information); }
GtkWidget * empathy_contact_add_menu_item_new (EmpathyContact *contact) { GtkWidget *item; GtkWidget *image; EmpathyContactManager *manager; TpConnection *connection; GList *l, *members; gboolean found = FALSE; EmpathyContactListFlags flags; g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL); if (!empathy_contact_manager_initialized ()) { return NULL; } manager = empathy_contact_manager_dup_singleton (); connection = empathy_contact_get_connection (contact); flags = empathy_contact_manager_get_flags_for_connection (manager, connection); if (!(flags & EMPATHY_CONTACT_LIST_CAN_ADD)) { return NULL; } members = empathy_contact_list_get_members (EMPATHY_CONTACT_LIST (manager)); for (l = members; l; l = l->next) { if (!found && empathy_contact_equal (l->data, contact)) { found = TRUE; /* we keep iterating so that we don't leak contact * refs */ } g_object_unref (l->data); } g_list_free (members); g_object_unref (manager); if (found) { return NULL; } item = gtk_image_menu_item_new_with_mnemonic (_("_Add Contact…")); image = gtk_image_new_from_icon_name (GTK_STOCK_ADD, GTK_ICON_SIZE_MENU); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image); g_signal_connect (item, "activate", G_CALLBACK (empathy_contact_add_menu_item_activated), contact); return item; }
void empathy_call_handler_start_call (EmpathyCallHandler *handler) { EmpathyCallHandlerPriv *priv = GET_PRIV (handler); EmpathyDispatcher *dispatcher; TpConnection *connection; GList *classes; GValue *value; GHashTable *request; if (priv->call != NULL) { empathy_call_handler_start_tpfs (handler); empathy_tp_call_accept_incoming_call (priv->call); return; } g_assert (priv->contact != NULL); dispatcher = empathy_dispatcher_dup_singleton (); connection = empathy_contact_get_connection (priv->contact); classes = empathy_dispatcher_find_requestable_channel_classes (dispatcher, connection, TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA, TP_HANDLE_TYPE_CONTACT, NULL); if (classes == NULL) return; g_list_free (classes); request = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) tp_g_value_slice_free); /* org.freedesktop.Telepathy.Channel.ChannelType */ value = tp_g_value_slice_new (G_TYPE_STRING); g_value_set_string (value, TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA); g_hash_table_insert (request, TP_IFACE_CHANNEL ".ChannelType", value); /* org.freedesktop.Telepathy.Channel.TargetHandleType */ value = tp_g_value_slice_new (G_TYPE_UINT); g_value_set_uint (value, TP_HANDLE_TYPE_CONTACT); g_hash_table_insert (request, TP_IFACE_CHANNEL ".TargetHandleType", value); /* org.freedesktop.Telepathy.Channel.TargetHandle*/ value = tp_g_value_slice_new (G_TYPE_UINT); g_value_set_uint (value, empathy_contact_get_handle (priv->contact)); g_hash_table_insert (request, TP_IFACE_CHANNEL ".TargetHandle", value); empathy_dispatcher_create_channel (dispatcher, connection, request, empathy_call_handler_request_cb, handler); g_object_unref (dispatcher); }
static void contact_manager_remove_from_group (EmpathyContactList *manager, EmpathyContact *contact, const gchar *group) { EmpathyContactManagerPriv *priv = GET_PRIV (manager); EmpathyContactList *list; TpConnection *connection; g_return_if_fail (EMPATHY_IS_CONTACT_MANAGER (manager)); connection = empathy_contact_get_connection (contact); list = g_hash_table_lookup (priv->lists, connection); if (list) { empathy_contact_list_remove_from_group (list, contact, group); } }
static void check_hashing (CallbacksData *data) { EmpathyFTHandler *handler = data->handler; EmpathyFTHandlerPriv *priv = GET_PRIV (handler); GError *myerr = NULL; TpCapabilities *caps; GPtrArray *classes; TpConnection *conn; conn = empathy_contact_get_connection (priv->contact); caps = tp_connection_get_capabilities (conn); if (caps == NULL) { data->callback (handler, NULL, data->user_data); goto out; } classes = tp_capabilities_get_channel_classes (caps); /* set whether we support hash and the type of it */ if (!set_content_hash_type_from_classes (handler, classes)) { g_set_error_literal (&myerr, EMPATHY_FT_ERROR_QUARK, EMPATHY_FT_ERROR_NOT_SUPPORTED, _("File transfer not supported by remote contact")); if (!g_cancellable_is_cancelled (priv->cancellable)) g_cancellable_cancel (priv->cancellable); data->callback (handler, myerr, data->user_data); g_clear_error (&myerr); } else { /* get back to the caller now */ data->callback (handler, NULL, data->user_data); } out: callbacks_data_free (data); }
static GList * contact_manager_get_groups (EmpathyContactList *manager, EmpathyContact *contact) { EmpathyContactManagerPriv *priv = GET_PRIV (manager); EmpathyContactList *list; TpConnection *connection; g_return_val_if_fail (EMPATHY_IS_CONTACT_MANAGER (manager), NULL); connection = empathy_contact_get_connection (contact); list = g_hash_table_lookup (priv->lists, connection); if (list) { return empathy_contact_list_get_groups (list, contact); } return NULL; }
static gboolean contact_manager_get_blocked (EmpathyContactList *manager, EmpathyContact *contact) { EmpathyContactManagerPriv *priv = GET_PRIV (manager); EmpathyContactList *list; TpConnection *connection; g_return_val_if_fail (EMPATHY_IS_CONTACT_MANAGER (manager), FALSE); connection = empathy_contact_get_connection (contact); list = g_hash_table_lookup (priv->lists, connection); if (list != NULL) { return empathy_contact_list_get_blocked (list, contact); } else { return FALSE; } }
static void contact_manager_set_blocked (EmpathyContactList *manager, EmpathyContact *contact, gboolean blocked, gboolean abusive) { EmpathyContactManagerPriv *priv = GET_PRIV (manager); EmpathyContactList *list; TpConnection *connection; g_return_if_fail (EMPATHY_IS_CONTACT_MANAGER (manager)); connection = empathy_contact_get_connection (contact); list = g_hash_table_lookup (priv->lists, connection); if (list != NULL) { empathy_contact_list_set_blocked (list, contact, blocked, abusive); } }
GtkWidget * empathy_contact_edit_menu_item_new (EmpathyContact *contact) { EmpathyContactManager *manager; GtkWidget *item; GtkWidget *image; gboolean enable = FALSE; g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL); if (empathy_contact_manager_initialized ()) { TpConnection *connection; EmpathyContactListFlags flags; manager = empathy_contact_manager_dup_singleton (); connection = empathy_contact_get_connection (contact); flags = empathy_contact_manager_get_flags_for_connection ( manager, connection); enable = (flags & EMPATHY_CONTACT_LIST_CAN_ALIAS || flags & EMPATHY_CONTACT_LIST_CAN_GROUP); g_object_unref (manager); } item = gtk_image_menu_item_new_with_mnemonic ( C_("Edit contact (contextual menu)", "_Edit")); image = gtk_image_new_from_icon_name (GTK_STOCK_EDIT, GTK_ICON_SIZE_MENU); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image); gtk_widget_show (image); gtk_widget_set_sensitive (item, enable); g_signal_connect_swapped (item, "activate", G_CALLBACK (contact_edit_menu_item_activate_cb), contact); return item; }
static GtkWidget * empathy_contact_block_menu_item_new (EmpathyContact *contact) { GtkWidget *item; EmpathyContactManager *manager; TpConnection *connection; EmpathyContactListFlags flags; gboolean blocked; g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL); manager = empathy_contact_manager_dup_singleton (); if (!empathy_contact_manager_initialized ()) { return NULL; } connection = empathy_contact_get_connection (contact); flags = empathy_contact_manager_get_flags_for_connection (manager, connection); if (!(flags & EMPATHY_CONTACT_LIST_CAN_BLOCK)) { return NULL; } item = gtk_check_menu_item_new_with_mnemonic (_("_Block Contact")); blocked = empathy_contact_list_get_blocked ( EMPATHY_CONTACT_LIST (manager), contact); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), blocked); g_signal_connect (item, "toggled", G_CALLBACK (empathy_contact_block_menu_item_toggled), contact); return item; }
static void contact_widget_set_contact (EmpathyContactWidget *information, EmpathyContact *contact) { if (contact == information->contact) return; contact_widget_remove_contact (information); if (contact) { TpConnection *connection; connection = empathy_contact_get_connection (contact); information->contact = g_object_ref (contact); information->factory = empathy_tp_contact_factory_dup_singleton (connection); } /* Update information for widgets */ contact_widget_contact_update (information); contact_widget_groups_update (information); contact_widget_details_update (information); contact_widget_client_update (information); contact_widget_location_update (information); }
static void contact_list_store_add_contact (EmpathyContactListStore *store, EmpathyContact *contact) { EmpathyContactListStorePriv *priv; GtkTreeIter iter; GList *groups = NULL, *l; TpConnection *connection; EmpathyContactListFlags flags = 0; priv = GET_PRIV (store); if (EMP_STR_EMPTY (empathy_contact_get_name (contact)) || (!priv->show_offline && !empathy_contact_is_online (contact))) { return; } if (priv->show_groups) { groups = empathy_contact_list_get_groups (priv->list, contact); } connection = empathy_contact_get_connection (contact); if (EMPATHY_IS_CONTACT_MANAGER (priv->list)) { flags = empathy_contact_manager_get_flags_for_connection ( EMPATHY_CONTACT_MANAGER (priv->list), connection); } /* If no groups just add it at the top level. */ if (!groups) { GtkTreeModel *model = GTK_TREE_MODEL (store); if (gtk_tree_model_get_iter_first (model, &iter)) do { EmpathyContact *c; gtk_tree_model_get (model, &iter, EMPATHY_CONTACT_LIST_STORE_COL_CONTACT, &c, -1); if (c == contact) { g_object_unref (c); return; } if (c != NULL) g_object_unref (c); } while (gtk_tree_model_iter_next (model, &iter)); gtk_tree_store_append (GTK_TREE_STORE (store), &iter, NULL); gtk_tree_store_set (GTK_TREE_STORE (store), &iter, EMPATHY_CONTACT_LIST_STORE_COL_NAME, empathy_contact_get_name (contact), EMPATHY_CONTACT_LIST_STORE_COL_CONTACT, contact, EMPATHY_CONTACT_LIST_STORE_COL_IS_GROUP, FALSE, EMPATHY_CONTACT_LIST_STORE_COL_IS_SEPARATOR, FALSE, EMPATHY_CONTACT_LIST_STORE_COL_CAN_AUDIO_CALL, empathy_contact_get_capabilities (contact) & EMPATHY_CAPABILITIES_AUDIO, EMPATHY_CONTACT_LIST_STORE_COL_CAN_VIDEO_CALL, empathy_contact_get_capabilities (contact) & EMPATHY_CAPABILITIES_VIDEO, EMPATHY_CONTACT_LIST_STORE_COL_FLAGS, flags, -1); } /* Else add to each group. */ for (l = groups; l; l = l->next) { GtkTreeIter iter_group; contact_list_store_get_group (store, l->data, &iter_group, NULL, NULL); gtk_tree_store_insert_after (GTK_TREE_STORE (store), &iter, &iter_group, NULL); gtk_tree_store_set (GTK_TREE_STORE (store), &iter, EMPATHY_CONTACT_LIST_STORE_COL_NAME, empathy_contact_get_name (contact), EMPATHY_CONTACT_LIST_STORE_COL_CONTACT, contact, EMPATHY_CONTACT_LIST_STORE_COL_IS_GROUP, FALSE, EMPATHY_CONTACT_LIST_STORE_COL_IS_SEPARATOR, FALSE, EMPATHY_CONTACT_LIST_STORE_COL_CAN_AUDIO_CALL, empathy_contact_get_capabilities (contact) & EMPATHY_CAPABILITIES_AUDIO, EMPATHY_CONTACT_LIST_STORE_COL_CAN_VIDEO_CALL, empathy_contact_get_capabilities (contact) & EMPATHY_CAPABILITIES_VIDEO, EMPATHY_CONTACT_LIST_STORE_COL_FLAGS, flags, -1); g_free (l->data); } g_list_free (groups); contact_list_store_contact_update (store, contact); }