static void ft_manager_stop (EmpathyFTManager *manager) { GtkTreeSelection *selection; GtkTreeIter iter; GtkTreeModel *model; EmpathyFTHandler *handler; EmpathyFTManagerPriv *priv; priv = GET_PRIV (manager); selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview)); if (!gtk_tree_selection_get_selected (selection, &model, &iter)) return; gtk_tree_model_get (model, &iter, COL_FT_OBJECT, &handler, -1); g_return_if_fail (handler != NULL); DEBUG ("Stopping file transfer: contact=%s, filename=%s", empathy_contact_get_alias (empathy_ft_handler_get_contact (handler)), empathy_ft_handler_get_filename (handler)); empathy_ft_handler_cancel_transfer (handler); g_object_unref (handler); }
static void theme_boxes_append_message (EmpathyChatTextView *view, EmpathyMessage *message) { EmpathyContact *sender; theme_boxes_maybe_append_header (EMPATHY_THEME_BOXES (view), message); sender = empathy_message_get_sender (message); if (empathy_message_get_tptype (message) == TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION) { gchar *body; body = g_strdup_printf (" * %s %s", empathy_contact_get_alias (sender), empathy_message_get_body (message)); empathy_chat_text_view_append_body (EMPATHY_CHAT_TEXT_VIEW (view), body, EMPATHY_CHAT_TEXT_VIEW_TAG_ACTION); } else { empathy_chat_text_view_append_body (EMPATHY_CHAT_TEXT_VIEW (view), empathy_message_get_body (message), EMPATHY_CHAT_TEXT_VIEW_TAG_BODY); } }
static void do_real_transfer_done (EmpathyFTManager *manager, EmpathyFTHandler *handler) { const char *contact_name; const char *filename; char *first_line, *second_line, *message; char *uri; gboolean incoming; GtkTreeRowReference *row_ref; GtkRecentManager *recent_manager; GFile *file; row_ref = ft_manager_get_row_from_handler (manager, handler); g_return_if_fail (row_ref != NULL); incoming = empathy_ft_handler_is_incoming (handler); contact_name = empathy_contact_get_alias (empathy_ft_handler_get_contact (handler)); filename = empathy_ft_handler_get_filename (handler); if (incoming) /* translators: first %s is filename, second %s * is the contact name */ first_line = g_strdup_printf (_("“%s” received from %s"), filename, contact_name); else /* translators: first %s is filename, second %s * is the contact name */ first_line = g_strdup_printf (_("“%s” sent to %s"), filename, contact_name); second_line = g_strdup (_("File transfer completed")); message = g_strdup_printf ("%s\n%s", first_line, second_line); ft_manager_update_handler_message (manager, row_ref, message); ft_manager_clear_handler_time (manager, row_ref); /* update buttons */ ft_manager_update_buttons (manager); g_free (message); g_free (first_line); g_free (second_line); recent_manager = gtk_recent_manager_get_default (); file = empathy_ft_handler_get_gfile (handler); uri = g_file_get_uri (file); gtk_recent_manager_add_item (recent_manager, uri); g_free (uri); }
static void ft_manager_remove_file_from_model (EmpathyFTManager *manager, EmpathyFTHandler *handler) { GtkTreeRowReference *row_ref; GtkTreeSelection *selection; GtkTreePath *path = NULL; GtkTreeIter iter; gboolean update_selection; EmpathyFTManagerPriv *priv = GET_PRIV (manager); row_ref = ft_manager_get_row_from_handler (manager, handler); g_return_if_fail (row_ref); DEBUG ("Removing file transfer from window: contact=%s, filename=%s", empathy_contact_get_alias (empathy_ft_handler_get_contact (handler)), empathy_ft_handler_get_filename (handler)); /* Get the iter from the row_ref */ path = gtk_tree_row_reference_get_path (row_ref); gtk_tree_model_get_iter (priv->model, &iter, path); gtk_tree_path_free (path); /* We have to update the selection only if we are removing the selected row */ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview)); update_selection = gtk_tree_selection_iter_is_selected (selection, &iter); /* Remove tp_file's row. After that iter points to the next row */ if (!gtk_list_store_remove (GTK_LIST_STORE (priv->model), &iter)) { gint n_row; /* There is no next row, set iter to the last row */ n_row = gtk_tree_model_iter_n_children (priv->model, NULL); if (n_row > 0) gtk_tree_model_iter_nth_child (priv->model, &iter, NULL, n_row - 1); else update_selection = FALSE; } if (update_selection) gtk_tree_selection_select_iter (selection, &iter); }
static gchar * ft_manager_format_error_message (EmpathyFTHandler *handler, const GError *error) { const char *contact_name, *filename; EmpathyContact *contact; char *first_line, *message; gboolean incoming; contact_name = NULL; incoming = empathy_ft_handler_is_incoming (handler); contact = empathy_ft_handler_get_contact (handler); if (contact) contact_name = empathy_contact_get_alias (contact); filename = empathy_ft_handler_get_filename (handler); if (incoming) /* filename/contact_name here are either both NULL or both valid */ if (filename && contact_name) /* translators: first %s is filename, second %s * is the contact name */ first_line = g_strdup_printf (_("Error receiving “%s” from %s"), filename, contact_name); else first_line = g_strdup (_("Error receiving a file")); else /* translators: first %s is filename, second %s * is the contact name */ if (filename && contact_name) first_line = g_strdup_printf (_("Error sending “%s” to %s"), filename, contact_name); else first_line = g_strdup (_("Error sending a file")); message = g_strdup_printf ("%s\n%s", first_line, error->message); g_free (first_line); return message; }
void empathy_receive_file_with_file_chooser (EmpathyFTHandler *handler) { GtkWidget *widget; const gchar *dir; EmpathyContact *contact; gchar *title; contact = empathy_ft_handler_get_contact (handler); g_assert (contact != NULL); title = g_strdup_printf (_("Incoming file from %s"), empathy_contact_get_alias (contact)); widget = gtk_file_chooser_dialog_new (title, NULL, GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_OK, NULL); gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (widget), empathy_ft_handler_get_filename (handler)); gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (widget), TRUE); dir = g_get_user_special_dir (G_USER_DIRECTORY_DOWNLOAD); if (dir == NULL) /* Fallback to $HOME if $XDG_DOWNLOAD_DIR is not set */ dir = g_get_home_dir (); gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (widget), dir); g_signal_connect (widget, "response", G_CALLBACK (file_manager_receive_file_response_cb), handler); gtk_widget_show (widget); g_free (title); }
static gchar * ft_manager_format_contact_info (EmpathyFTHandler *handler) { gboolean incoming; const char *filename, *contact_name, *first_line_format; char *retval; incoming = empathy_ft_handler_is_incoming (handler); contact_name = empathy_contact_get_alias (empathy_ft_handler_get_contact (handler)); filename = empathy_ft_handler_get_filename (handler); if (incoming) /* translators: first %s is filename, second %s is the contact name */ first_line_format = _("Receiving “%s” from %s"); else /* translators: first %s is filename, second %s is the contact name */ first_line_format = _("Sending “%s” to %s"); retval = g_strdup_printf (first_line_format, filename, contact_name); return retval; }
static void theme_boxes_maybe_append_header (EmpathyThemeBoxes *theme, EmpathyMessage *msg) { EmpathyChatTextView *view = EMPATHY_CHAT_TEXT_VIEW (theme); EmpathyThemeBoxesPriv*priv = GET_PRIV (theme); EmpathyContact *contact; EmpathyContact *last_contact; GdkPixbuf *avatar = NULL; GtkTextBuffer *buffer; const gchar *name; GtkTextIter iter; GtkWidget *label1, *label2; GtkTextChildAnchor *anchor; GtkWidget *box; gchar *str; time_t time_; gchar *tmp; GtkTextIter start; gboolean color_set; GtkTextTagTable *table; GtkTextTag *tag; GString *str_obj; gboolean consecutive; contact = empathy_message_get_sender (msg); name = empathy_contact_get_alias (contact); last_contact = empathy_chat_text_view_get_last_contact (view); buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (theme)); time_ = empathy_message_get_timestamp (msg); consecutive = (time_ - empathy_chat_text_view_get_last_timestamp (view) < MESSAGE_JOIN_PERIOD); DEBUG ("Maybe add fancy header"); /* Only insert a header if * - the previously inserted block is not the same as this one. * - the delay between two messages is lower then MESSAGE_JOIN_PERIOD */ if (empathy_contact_equal (last_contact, contact) && consecutive) { return; } empathy_chat_text_view_append_spacing (view); /* Insert header line */ gtk_text_buffer_get_end_iter (buffer, &iter); gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "\n", -1, EMPATHY_THEME_BOXES_TAG_HEADER_LINE, NULL); gtk_text_buffer_get_end_iter (buffer, &iter); anchor = gtk_text_buffer_create_child_anchor (buffer, &iter); /* Create a hbox for the header and resize it when the view allocation * changes */ box = gtk_hbox_new (FALSE, 0); g_signal_connect_object (view, "size-allocate", G_CALLBACK (table_size_allocate_cb), box, 0); /* Add avatar to the box if needed */ if (priv->show_avatars) { avatar = theme_boxes_get_avatar_pixbuf_with_cache (contact); if (avatar) { GtkWidget *image; image = gtk_image_new_from_pixbuf (avatar); gtk_box_pack_start (GTK_BOX (box), image, FALSE, TRUE, 2); } } /* Add contact alias */ str = g_markup_printf_escaped ("<b>%s</b>", name); label1 = g_object_new (GTK_TYPE_LABEL, "label", str, "use-markup", TRUE, "xalign", 0.0, NULL); g_free (str); /* Add the message receive time */ tmp = empathy_time_to_string_local (time_, EMPATHY_TIME_FORMAT_DISPLAY_SHORT); str = g_strdup_printf ("<i>%s</i>", tmp); label2 = g_object_new (GTK_TYPE_LABEL, "label", str, "use-markup", TRUE, "xalign", 1.0, NULL); str_obj = g_string_new ("\n- "); g_string_append (str_obj, name); g_string_append (str_obj, ", "); g_string_append (str_obj, tmp); g_string_append (str_obj, " -"); g_free (tmp); g_free (str); /* Set foreground color of labels to the same color than the header tag. */ table = gtk_text_buffer_get_tag_table (buffer); tag = gtk_text_tag_table_lookup (table, EMPATHY_THEME_BOXES_TAG_HEADER); g_object_get (tag, "foreground-set", &color_set, NULL); if (color_set) { GdkColor *color; g_object_get (tag, "foreground-gdk", &color, NULL); gtk_widget_modify_fg (label1, GTK_STATE_NORMAL, color); gtk_widget_modify_fg (label2, GTK_STATE_NORMAL, color); gdk_color_free (color); } /* Pack labels into the box */ gtk_misc_set_alignment (GTK_MISC (label1), 0.0, 0.5); gtk_misc_set_alignment (GTK_MISC (label2), 1.0, 0.5); gtk_box_pack_start (GTK_BOX (box), label1, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (box), label2, TRUE, TRUE, 0); /* Add the header box to the text view */ g_object_set_data_full (G_OBJECT (box), "str_obj", g_string_free (str_obj, FALSE), g_free); gtk_text_view_add_child_at_anchor (GTK_TEXT_VIEW (view), box, anchor); gtk_widget_show_all (box); /* Insert a header line */ gtk_text_buffer_get_end_iter (buffer, &iter); start = iter; gtk_text_iter_backward_char (&start); gtk_text_buffer_apply_tag_by_name (buffer, EMPATHY_THEME_BOXES_TAG_HEADER, &start, &iter); gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "\n", -1, EMPATHY_THEME_BOXES_TAG_HEADER, NULL); gtk_text_buffer_get_end_iter (buffer, &iter); gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "\n", -1, EMPATHY_THEME_BOXES_TAG_HEADER_LINE, NULL); }
void empathy_individual_manager_add_from_contact (EmpathyIndividualManager *self, EmpathyContact *contact) { EmpathyIndividualManagerPriv *priv; FolksBackendStore *backend_store; FolksBackend *backend; FolksPersonaStore *persona_store; GHashTable* details; GeeMap *persona_stores; TpAccount *account; const gchar *store_id; g_return_if_fail (EMPATHY_IS_INDIVIDUAL_MANAGER (self)); g_return_if_fail (EMPATHY_IS_CONTACT (contact)); priv = GET_PRIV (self); /* We need to ref the contact since otherwise its linked TpHandle will be * destroyed. */ g_object_ref (contact); DEBUG ("adding individual from contact %s (%s)", empathy_contact_get_id (contact), empathy_contact_get_alias (contact)); account = empathy_contact_get_account (contact); store_id = tp_proxy_get_object_path (TP_PROXY (account)); /* Get the persona store to use */ backend_store = folks_backend_store_dup (); backend = folks_backend_store_dup_backend_by_name (backend_store, "telepathy"); if (backend == NULL) { g_warning ("Failed to add individual from contact: couldn't get " "'telepathy' backend"); goto finish; } persona_stores = folks_backend_get_persona_stores (backend); persona_store = gee_map_get (persona_stores, store_id); if (persona_store == NULL) { g_warning ("Failed to add individual from contact: couldn't get persona " "store '%s'", store_id); goto finish; } details = tp_asv_new ( "contact", G_TYPE_STRING, empathy_contact_get_id (contact), NULL); folks_individual_aggregator_add_persona_from_details ( priv->aggregator, NULL, persona_store, details, aggregator_add_persona_from_details_cb, contact); g_hash_table_unref (details); g_object_unref (persona_store); finish: tp_clear_object (&backend); tp_clear_object (&backend_store); }