diff --git a/Makefile.am b/Makefile.am index 167fb2079882662298dc00e00ba97eb26683064c..74fa8bbf23077fde397aa478e1faadba3e75a8ff 100644 --- a/Makefile.am +++ b/Makefile.am @@ -83,9 +83,7 @@ lib_libscreenshooter_la_SOURCES = \ lib/screenshooter-job.c lib/screenshooter-job.h \ lib/screenshooter-job-callbacks.c lib/screenshooter-job-callbacks.h \ lib/screenshooter-simple-job.c lib/screenshooter-simple-job.h \ - lib/screenshooter-utils.c lib/screenshooter-utils.h \ - lib/screenshooter-imgur.c lib/screenshooter-imgur.h \ - lib/screenshooter-imgur-dialog.c lib/screenshooter-imgur-dialog.h + lib/screenshooter-utils.c lib/screenshooter-utils.h if ENABLE_X11 lib_libscreenshooter_la_SOURCES += \ @@ -142,8 +140,7 @@ lib_libscreenshooter_la_LIBADD += \ endif lib_libscreenshooter_built_sources = \ - lib/screenshooter-marshal.c lib/screenshooter-marshal.h \ - lib/screenshooter-imgur-dialog_ui.h + lib/screenshooter-marshal.c lib/screenshooter-marshal.h #Autogenerated sources for the library BUILT_SOURCES += $(lib_libscreenshooter_built_sources) @@ -164,9 +161,6 @@ lib/screenshooter-marshal.c: lib/screenshooter-marshal.list Makefile && glib-genmarshal --prefix=_screenshooter_marshal --body $(top_srcdir)/lib/screenshooter-marshal.list >>$@ \ ) -lib/screenshooter-imgur-dialog_ui.h: lib/screenshooter-imgur-dialog.ui - $(AM_V_GEN) xdt-csource --static --strip-comments --strip-content --name=screenshooter_imgur_dialog_ui $< >$@ - # Main application src_xfce4_screenshooter_CFLAGS = \ -I$(top_srcdir)/lib/ \ @@ -332,7 +326,6 @@ dist-hook: ChangeLog # Extra dist and distclean rules EXTRA_DIST += \ lib/screenshooter-marshal.list \ - lib/screenshooter-imgur-dialog.ui \ $(app_desktop_in_files) \ $(panel_desktop_in_files) \ $(16icons_DATA) \ diff --git a/README.md b/README.md index fb958f7facae9ed54d1dbaa4f82e7b22cd36a7d0..a403c088c357268159098601bac23d0ea2020aa8 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,8 @@ Xfce4-screenshooter allows you to capture the entire screen, the active window or a selected region. You can set the delay that elapses before the screenshot is taken and the action that will be done with the screenshot: save it to a file, copy it to the clipboard, open -it using another application, host it on imgur.com (a free online image -hosting service) or use your creativity with custom action scripts. +it using another application or use your creativity with custom actions +scripts. ---- diff --git a/lib/screenshooter-actions.c b/lib/screenshooter-actions.c index ea43e1aa11dfb896c771d8e31b9c049058e66d24..87dedfd5b2d2803888a93af7120b39431ca2f5ed 100644 --- a/lib/screenshooter-actions.c +++ b/lib/screenshooter-actions.c @@ -23,7 +23,6 @@ #include "screenshooter-capture.h" #include "screenshooter-global.h" #include "screenshooter-dialogs.h" -#include "screenshooter-imgur.h" #include "screenshooter-format.h" @@ -150,18 +149,6 @@ action_idle (gpointer user_data) { screenshooter_open_screenshot (save_location, sd->app, sd->app_info); } - else if (sd->action & UPLOAD_IMGUR) - { - gboolean upload_successful = screenshooter_upload_to_imgur (save_location, sd->title); - - /* If upload failed, regardless of whether it was chosen by GUI or CLI, and - * the action was not selected via CLI, show the actions dialog again.*/ - if (!upload_successful && !sd->action_specified) - { - g_free (save_location); - return TRUE; - } - } else if (sd->action & CUSTOM_ACTION) { screenshooter_custom_action_execute (save_location, sd->custom_action_name, sd->custom_action_command); diff --git a/lib/screenshooter-custom-actions.c b/lib/screenshooter-custom-actions.c index e7049fd828b3275cc68a400202845d90566f9bbb..487d60166861d4fa1e6449d9da20cbe2f959bdda 100644 --- a/lib/screenshooter-custom-actions.c +++ b/lib/screenshooter-custom-actions.c @@ -17,7 +17,6 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */ -#include "screenshooter-imgur.h" #include "screenshooter-custom-actions.h" #include <xfconf/xfconf.h> @@ -226,7 +225,7 @@ screenshooter_custom_action_execute (gchar *save_location, **/ split = g_strsplit (formatted_command, "\%imgur_client_id", -1); g_free (formatted_command); - formatted_command = g_strjoinv (screenshooter_imgur_client_id (), split); + formatted_command = g_strjoinv ("66ab680b597e293", split); g_strfreev (split); expanded_command = xfce_expand_variables (formatted_command, NULL); diff --git a/lib/screenshooter-dialogs.c b/lib/screenshooter-dialogs.c index 272462f70b72029ce06e66c02ed56b218afe3b52..365a18566c0145f469ea592183ec0ea870b72bcd 100644 --- a/lib/screenshooter-dialogs.c +++ b/lib/screenshooter-dialogs.c @@ -65,9 +65,6 @@ static void cb_clipboard_toggled (GtkToggleButton *tb, ScreenshotData *sd); static void -cb_imgur_toggled (GtkToggleButton *tb, - ScreenshotData *sd); -static void cb_delay_spinner_changed (GtkWidget *spinner, ScreenshotData *sd); static void @@ -239,32 +236,6 @@ static void cb_clipboard_toggled (GtkToggleButton *tb, ScreenshotData *sd) -static void cb_imgur_toggled (GtkToggleButton *tb, ScreenshotData *sd) -{ - if (gtk_toggle_button_get_active (tb)) - sd->action = UPLOAD_IMGUR; -} - - - -static void cb_imgur_warning_change_cursor (GtkWidget *widget, GdkCursor *cursor) -{ - if (cursor != NULL) - { - gdk_window_set_cursor (gtk_widget_get_window (widget), cursor); - g_object_unref (cursor); - } -} - - - -static void cb_imgur_warning_clicked (GtkWidget *popover) -{ - gtk_widget_set_visible (popover, TRUE); -} - - - /* Set the delay according to the spinner */ static void cb_delay_spinner_changed (GtkWidget *spinner, ScreenshotData *sd) { @@ -1143,7 +1114,7 @@ GtkWidget *screenshooter_region_dialog_new (ScreenshotData *sd, gboolean plugin) GtkWidget *screenshooter_actions_dialog_new (ScreenshotData *sd) { - GtkWidget *dlg, *grid, *box, *evbox, *label, *radio, *checkbox, *popover; + GtkWidget *dlg, *grid, *box, *evbox, *label, *radio, *checkbox; GtkWidget *actions_grid; GtkTreeIter iter; @@ -1153,7 +1124,6 @@ GtkWidget *screenshooter_actions_dialog_new (ScreenshotData *sd) GtkWidget *preview; GdkPixbuf *thumbnail; - GdkCursor *cursor; dlg = xfce_titled_dialog_new_with_mixed_buttons (_("Screenshot"), NULL, GTK_DIALOG_DESTROY_WITH_PARENT, @@ -1330,58 +1300,6 @@ GtkWidget *screenshooter_actions_dialog_new (ScreenshotData *sd) /* Run the callback functions to grey/ungrey the correct widgets */ cb_toggle_set_sensi (GTK_TOGGLE_BUTTON (radio), combobox); - /* Upload to imgur radio button */ - if (sd->enable_imgur_upload) - { - GtkWidget *image; - - box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 8); - gtk_grid_attach (GTK_GRID (actions_grid), box, 0, 5, 2, 1); - - radio = - gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (radio), - _("Host on Imgur™")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), - (sd->action & UPLOAD_IMGUR)); - gtk_widget_set_tooltip_text (radio, - _("Host the screenshot on Imgur™, a free online " - "image hosting service")); - g_signal_connect (G_OBJECT (radio), "toggled", - G_CALLBACK (cb_imgur_toggled), sd); - g_signal_connect (G_OBJECT (radio), "activate", - G_CALLBACK (cb_radiobutton_activate), dlg); - gtk_container_add (GTK_CONTAINER (box), radio); - - /* Upload to imgur warning info */ - image = gtk_image_new_from_icon_name ("dialog-warning-symbolic", GTK_ICON_SIZE_BUTTON); - label = gtk_label_new (NULL); - gtk_label_set_markup (GTK_LABEL (label), - _("Watch for sensitive content, the uploaded image will be publicly\n" - "available and there is no guarantee it can be certainly deleted.\n" - "Xfce is NOT affiliated with nor this integration is approved by Imgur™.\n" - "If you use this feature you must agree with Imgur™ " - "<a href=\"https://imgur.com/tos\">Terms of Service</a>.")); - - popover = gtk_popover_new (image); - gtk_container_add (GTK_CONTAINER (popover), label); - gtk_container_set_border_width (GTK_CONTAINER (popover), 6); - gtk_widget_show (label); - - evbox = gtk_event_box_new (); - g_signal_connect_swapped (G_OBJECT (evbox), "button-press-event", - G_CALLBACK (cb_imgur_warning_clicked), popover); - gtk_container_add (GTK_CONTAINER (box), evbox); - gtk_container_add (GTK_CONTAINER (evbox), image); - - cursor = gdk_cursor_new_from_name (gdk_display_get_default (), "pointer"); - if (cursor != NULL) - g_signal_connect (evbox, "realize", G_CALLBACK (cb_imgur_warning_change_cursor), cursor); - - label = gtk_label_new (NULL); - gtk_label_set_markup (GTK_LABEL (label), _("<a href='https://gitlab.xfce.org/apps/xfce4-screenshooter/-/issues/115'>Deprecated!</a>")); - gtk_container_add (GTK_CONTAINER (box), label); - } - /* Preview box */ box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); gtk_container_set_border_width (GTK_CONTAINER (box), 0); diff --git a/lib/screenshooter-global.h b/lib/screenshooter-global.h index e47aecfec5016889a2d624f2cbeb607f1da490cb..fb57d93c3f278f2673876aad3423a83fe69b0b69 100644 --- a/lib/screenshooter-global.h +++ b/lib/screenshooter-global.h @@ -35,8 +35,7 @@ enum { SAVE = 1, CLIPBOARD = 2, OPEN = 4, - UPLOAD_IMGUR = 8, - CUSTOM_ACTION = 16, + CUSTOM_ACTION = 8, }; @@ -58,7 +57,6 @@ typedef struct gboolean action_specified; gboolean region_specified; gboolean timestamp; - gboolean enable_imgur_upload; gboolean path_is_dir; gboolean show_in_folder; gchar *screenshot_dir; diff --git a/lib/screenshooter-imgur-dialog.c b/lib/screenshooter-imgur-dialog.c deleted file mode 100644 index 4c25a6612b4f3ef1e2a2c459b814ef282e30bd71..0000000000000000000000000000000000000000 --- a/lib/screenshooter-imgur-dialog.c +++ /dev/null @@ -1,398 +0,0 @@ -/* $Id$ - * - * Copyright © 2018 Arthur Jansen <arthurj155@gmail.com> - * Copyright © 2018 Andre Miranda <andreldm@xfce.org> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - - - -#include "screenshooter-imgur-dialog.h" -#include "screenshooter-imgur-dialog_ui.h" - -#include <exo/exo.h> -#include <libxfce4ui/libxfce4ui.h> - - - -struct _ScreenshooterImgurDialog -{ - GObject parent; - GtkWidget *window; - GtkEntry *link_entry; - - gchar *image_url, *thumbnail_url, *small_thumbnail_url; - gchar *delete_link; - GtkToggleButton *embed_html_toggle, *embed_markdown_toggle, *embed_bb_code_toggle; - GtkToggleButton *embed_tiny_toggle, *embed_medium_toggle, *embed_full_toggle; - GtkToggleButton *embed_link_full_size_toggle; - GtkTextView *embed_text_view; -}; - - - -G_DEFINE_TYPE (ScreenshooterImgurDialog, screenshooter_imgur_dialog, G_TYPE_OBJECT) - - - -static void cb_link_toggle_full (GtkToggleButton *button, gpointer user_data); -static void cb_link_toggle_medium (GtkToggleButton *button, gpointer user_data); -static void cb_link_toggle_tiny (GtkToggleButton *button, gpointer user_data); - -static void cb_link_copy (GtkWidget *widget, gpointer user_data); -static void cb_link_view_in_browser (GtkWidget *widget, gpointer user_data); - -static void cb_generate_embed_text (GtkWidget *widget, gpointer user_data); -static void cb_embed_text_copy (GtkWidget *widget, gpointer user_data); - -static void cb_delete_link_copy (GtkWidget *widget, gpointer user_data); -static void cb_delete_link_view (GtkWidget *widget, gpointer user_data); - - - -void screenshooter_imgur_dialog_init (ScreenshooterImgurDialog *self) -{ -} - - - -static void -screenshooter_imgur_dialog_finalize (GObject *object) -{ - ScreenshooterImgurDialog *self = SCREENSHOOTER_IMGUR_DIALOG (object); - - g_free (self->image_url); - g_free (self->thumbnail_url); - g_free (self->small_thumbnail_url); - g_free (self->delete_link); - - gtk_widget_destroy (self->window); - - (*G_OBJECT_CLASS (screenshooter_imgur_dialog_parent_class)->finalize) (object); -} - - - -static void -screenshooter_imgur_dialog_class_init (ScreenshooterImgurDialogClass *klass) -{ - GObjectClass *gobject_class; - - /* determine the parent type class */ - screenshooter_imgur_dialog_parent_class = g_type_class_peek_parent (klass); - - gobject_class = G_OBJECT_CLASS (klass); - gobject_class->finalize = screenshooter_imgur_dialog_finalize; -} - - - -ScreenshooterImgurDialog * -screenshooter_imgur_dialog_new (const gchar *upload_name, - const gchar *delete_hash) -{ - GtkBuilder *builder; - GtkWidget *notebook; - GtkEntry *delete_link_entry; - GtkButton *delete_link_copy_button, *delete_link_view_button; - GtkToggleButton *link_full_toggle, *link_medium_toggle, *link_tiny_toggle; - GtkButton *link_copy_button, *link_view_button, *embed_copy_button; - ScreenshooterImgurDialog *self; - - g_return_val_if_fail (upload_name != NULL, NULL); - - self = g_object_new (SCREENSHOOTER_TYPE_IMGUR_DIALOG, NULL); - - self->image_url = g_strdup_printf ("https://imgur.com/%s.png", upload_name); - self->thumbnail_url = g_strdup_printf ("https://imgur.com/%sl.png", upload_name); - self->small_thumbnail_url = g_strdup_printf ("https://imgur.com/%ss.png", upload_name); - self->delete_link = g_strdup_printf ("https://imgur.com/delete/%s", delete_hash); - - builder = gtk_builder_new_from_string (screenshooter_imgur_dialog_ui, - screenshooter_imgur_dialog_ui_length); - - /* Setup window */ - self->window = xfce_titled_dialog_new_with_mixed_buttons (_("Screenshot"), - NULL, GTK_DIALOG_DESTROY_WITH_PARENT, - "", _("_Close"), GTK_RESPONSE_CLOSE, - NULL); - gtk_window_set_icon_name (GTK_WINDOW (self->window), "org.xfce.screenshooter"); - gtk_window_set_default_size (GTK_WINDOW (self->window), 500, 330); - - /* Add notebook widget to window */ - notebook = GTK_WIDGET (gtk_builder_get_object (builder, "dialog-notebook")); - gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (self->window))), notebook); - - self->link_entry = GTK_ENTRY (gtk_builder_get_object (builder, "link_entry")); - self->embed_text_view = GTK_TEXT_VIEW (gtk_builder_get_object (builder, "embed_text_view")); - gtk_entry_set_text (self->link_entry, self->image_url); - - /* Image tab */ - - link_full_toggle = GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "link_full_toggle")); - link_medium_toggle = GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "link_medium_toggle")); - link_tiny_toggle = GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "link_tiny_toggle")); - - g_signal_connect (link_full_toggle, "toggled", (GCallback) cb_link_toggle_full, (gpointer) self); - g_signal_connect (link_medium_toggle, "toggled", (GCallback) cb_link_toggle_medium, (gpointer) self); - g_signal_connect (link_tiny_toggle, "toggled", (GCallback) cb_link_toggle_tiny, (gpointer) self); - - link_copy_button = GTK_BUTTON (gtk_builder_get_object (builder, "link_copy_button")); - link_view_button = GTK_BUTTON (gtk_builder_get_object (builder, "link_view_button")); - embed_copy_button = GTK_BUTTON (gtk_builder_get_object (builder, "embed_copy_button")); - - g_signal_connect (link_copy_button, "clicked", (GCallback) cb_link_copy, (gpointer) self); - g_signal_connect (link_view_button, "clicked", (GCallback) cb_link_view_in_browser, (gpointer) self); - g_signal_connect (embed_copy_button, "clicked", (GCallback) cb_embed_text_copy, (gpointer) self); - - /* Embed tab */ - - self->embed_html_toggle = GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "embed_html_toggle")); - self->embed_markdown_toggle = GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "embed_markdown_toggle")); - self->embed_bb_code_toggle = GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "embed_bb_code_toggle")); - self->embed_tiny_toggle = GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "embed_tiny_toggle")); - self->embed_medium_toggle = GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "embed_medium_toggle")); - self->embed_full_toggle = GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "embed_full_toggle")); - self->embed_link_full_size_toggle = GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "embed_link_full_size_toggle")); - - /* Regenerate the embed text when any togglebutton on the embed tab is toggled */ - g_signal_connect (self->embed_html_toggle, "toggled", (GCallback) cb_generate_embed_text, (gpointer) self); - g_signal_connect (self->embed_markdown_toggle, "toggled", (GCallback) cb_generate_embed_text, (gpointer) self); - g_signal_connect (self->embed_bb_code_toggle, "toggled", (GCallback) cb_generate_embed_text, (gpointer) self); - g_signal_connect (self->embed_tiny_toggle, "toggled", (GCallback) cb_generate_embed_text, (gpointer) self); - g_signal_connect (self->embed_medium_toggle, "toggled", (GCallback) cb_generate_embed_text, (gpointer) self); - g_signal_connect (self->embed_full_toggle, "toggled", (GCallback) cb_generate_embed_text, (gpointer) self); - g_signal_connect (self->embed_link_full_size_toggle, "toggled", (GCallback) cb_generate_embed_text, (gpointer) self); - - /* Generate default embed text */ - cb_generate_embed_text (NULL, (gpointer) self); - - /* Deletion link tab */ - - delete_link_entry = GTK_ENTRY (gtk_builder_get_object (builder, "delete_link_entry")); - gtk_entry_set_text (delete_link_entry, self->delete_link); - - delete_link_copy_button = GTK_BUTTON (gtk_builder_get_object (builder, "delete_link_copy_button")); - delete_link_view_button = GTK_BUTTON (gtk_builder_get_object (builder, "delete_link_view_button")); - - g_signal_connect (delete_link_copy_button, "clicked", G_CALLBACK (cb_delete_link_copy), self); - g_signal_connect (delete_link_view_button, "clicked", G_CALLBACK (cb_delete_link_view), self); - - g_object_unref (builder); - - return self; -} - - - -void -screenshooter_imgur_dialog_run (ScreenshooterImgurDialog *self) -{ - GtkDialog *dialog; - - g_return_if_fail (SCREENSHOOTER_IS_IMGUR_DIALOG (self)); - - dialog = GTK_DIALOG (self->window); - - gtk_widget_show_all (gtk_dialog_get_content_area (dialog)); - gtk_dialog_run (dialog); -} - - - -/* Callbacks */ - - - -static void -cb_link_toggle_full (GtkToggleButton *button, gpointer user_data) -{ - ScreenshooterImgurDialog *dialog; - - g_return_if_fail (SCREENSHOOTER_IS_IMGUR_DIALOG (user_data)); - - dialog = SCREENSHOOTER_IMGUR_DIALOG (user_data); - if (gtk_toggle_button_get_active (button)) - gtk_entry_set_text (dialog->link_entry, dialog->image_url); -} - - - -static void -cb_link_toggle_medium (GtkToggleButton *button, gpointer user_data) -{ - ScreenshooterImgurDialog *dialog; - - g_return_if_fail (SCREENSHOOTER_IS_IMGUR_DIALOG (user_data)); - - dialog = SCREENSHOOTER_IMGUR_DIALOG (user_data); - if (gtk_toggle_button_get_active (button)) - gtk_entry_set_text (dialog->link_entry, dialog->thumbnail_url); -} - - - -static void -cb_link_toggle_tiny (GtkToggleButton *button, gpointer user_data) -{ - ScreenshooterImgurDialog *dialog; - - g_return_if_fail (SCREENSHOOTER_IS_IMGUR_DIALOG (user_data)); - - dialog = SCREENSHOOTER_IMGUR_DIALOG (user_data); - if (gtk_toggle_button_get_active (button)) - gtk_entry_set_text (dialog->link_entry, dialog->small_thumbnail_url); -} - - - -static void -cb_link_copy (GtkWidget *widget, gpointer user_data) -{ - GtkClipboard *clipboard; - ScreenshooterImgurDialog *dialog; - guint16 len; - const gchar *text; - - g_return_if_fail (SCREENSHOOTER_IS_IMGUR_DIALOG (user_data)); - - dialog = SCREENSHOOTER_IMGUR_DIALOG (user_data); - text = gtk_entry_get_text (dialog->link_entry); - len = gtk_entry_get_text_length (dialog->link_entry); - clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD); - gtk_clipboard_set_text (clipboard, text, len); -} - - - -static void -cb_link_view_in_browser (GtkWidget *widget, gpointer user_data) -{ - ScreenshooterImgurDialog *dialog; - const gchar *link; - - g_return_if_fail (SCREENSHOOTER_IS_IMGUR_DIALOG (user_data)); - - dialog = SCREENSHOOTER_IMGUR_DIALOG (user_data); - link = gtk_entry_get_text (dialog->link_entry); - exo_execute_preferred_application ("WebBrowser", link, NULL, NULL, NULL); -} - - - -static void -cb_generate_embed_text (GtkWidget *widget, gpointer user_data) -{ - ScreenshooterImgurDialog *dialog; - const gchar *link = NULL; - gchar *text = NULL; - gboolean link_to_full_size; - - g_return_if_fail (SCREENSHOOTER_IS_IMGUR_DIALOG (user_data)); - - dialog = SCREENSHOOTER_IMGUR_DIALOG (user_data); - - if (gtk_toggle_button_get_active (dialog->embed_full_toggle)) - link = dialog->image_url; - else if (gtk_toggle_button_get_active (dialog->embed_medium_toggle)) - link = dialog->thumbnail_url; - else if (gtk_toggle_button_get_active (dialog->embed_tiny_toggle)) - link = dialog->small_thumbnail_url; - else - g_return_if_reached (); - - g_return_if_fail (link != NULL); - - link_to_full_size = gtk_toggle_button_get_active (dialog->embed_link_full_size_toggle); - - if (gtk_toggle_button_get_active (dialog->embed_html_toggle)) - if (link_to_full_size) - text = g_markup_printf_escaped ("<a href=\"%s\">\n <img src=\"%s\" />\n</a>", dialog->image_url, link); - else - text = g_markup_printf_escaped ("<img src=\"%s\" />", link); - else if (gtk_toggle_button_get_active (dialog->embed_markdown_toggle)) - if (link_to_full_size) - text = g_strdup_printf ("[](%s)", dialog->image_url, link, link); - else - text = g_strdup_printf ("", dialog->image_url, link); - else if (gtk_toggle_button_get_active (dialog->embed_bb_code_toggle)) - if (link_to_full_size) - text = g_strdup_printf ("[url=%s]\n [img]%s[/img]\n[/url]", dialog->image_url, link); - else - text = g_strdup_printf ("[img]%s[/img]", link); - else - g_return_if_reached (); - - g_return_if_fail (text != NULL); - - gtk_text_buffer_set_text (gtk_text_view_get_buffer (dialog->embed_text_view), text, strlen(text)); - - g_free (text); -} - - - -static void -cb_embed_text_copy (GtkWidget *widget, gpointer user_data) -{ - GtkClipboard *clipboard; - GtkTextBuffer *buffer; - ScreenshooterImgurDialog *dialog; - guint16 len; - const gchar *text; - GtkTextIter start, end; - - g_return_if_fail (SCREENSHOOTER_IS_IMGUR_DIALOG (user_data)); - - dialog = SCREENSHOOTER_IMGUR_DIALOG (user_data); - - buffer = gtk_text_view_get_buffer (dialog->embed_text_view); - gtk_text_buffer_get_bounds (buffer, &start, &end); - - text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE); - len = strlen (text); - - clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD); - gtk_clipboard_set_text (clipboard, text, len); -} - - - -static void -cb_delete_link_copy (GtkWidget *widget, gpointer user_data) -{ - GtkClipboard *clipboard; - ScreenshooterImgurDialog *dialog; - - g_return_if_fail (SCREENSHOOTER_IS_IMGUR_DIALOG (user_data)); - - dialog = SCREENSHOOTER_IMGUR_DIALOG (user_data); - clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD); - gtk_clipboard_set_text (clipboard, dialog->delete_link, strlen (dialog->delete_link)); -} - - - -static void -cb_delete_link_view (GtkWidget *widget, gpointer user_data) -{ - ScreenshooterImgurDialog *dialog; - - g_return_if_fail (SCREENSHOOTER_IS_IMGUR_DIALOG (user_data)); - - dialog = SCREENSHOOTER_IMGUR_DIALOG (user_data); - exo_execute_preferred_application ("WebBrowser", dialog->delete_link, NULL, NULL, NULL); -} diff --git a/lib/screenshooter-imgur-dialog.h b/lib/screenshooter-imgur-dialog.h deleted file mode 100644 index 568309a2fde024ab00276e078dc0808d3b2f3f49..0000000000000000000000000000000000000000 --- a/lib/screenshooter-imgur-dialog.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef IMGUR_DIALOG_H -#define IMGUR_DIALOG_H - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <glib-object.h> -#include <gtk/gtk.h> - -G_BEGIN_DECLS - -#define SCREENSHOOTER_TYPE_IMGUR_DIALOG screenshooter_imgur_dialog_get_type () -G_DECLARE_FINAL_TYPE (ScreenshooterImgurDialog, screenshooter_imgur_dialog, SCREENSHOOTER, IMGUR_DIALOG, GObject) - -ScreenshooterImgurDialog *screenshooter_imgur_dialog_new (const gchar *upload_name, - const gchar *delete_hash); -void screenshooter_imgur_dialog_run (ScreenshooterImgurDialog *self); - -G_END_DECLS - -#endif diff --git a/lib/screenshooter-imgur-dialog.ui b/lib/screenshooter-imgur-dialog.ui deleted file mode 100644 index 8da985617e3b63e26c163ccdc7d1e9efe6bfc354..0000000000000000000000000000000000000000 --- a/lib/screenshooter-imgur-dialog.ui +++ /dev/null @@ -1,607 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.22.1 --> -<interface> - <requires lib="gtk+" version="3.20"/> - <object class="GtkImage" id="image1"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="icon_name">edit-copy-symbolic</property> - </object> - <object class="GtkImage" id="image2"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="icon_name">web-browser-symbolic</property> - </object> - <object class="GtkImage" id="image3"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="icon_name">edit-copy-symbolic</property> - </object> - <object class="GtkImage" id="image4"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="icon_name">edit-copy-symbolic</property> - </object> - <object class="GtkImage" id="image6"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="icon_name">web-browser-symbolic</property> - </object> - <object class="GtkNotebook" id="dialog-notebook"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <child> - <object class="GtkGrid"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="margin_left">10</property> - <property name="margin_right">10</property> - <property name="margin_top">10</property> - <property name="margin_bottom">10</property> - <property name="row_spacing">10</property> - <property name="column_spacing">20</property> - <child> - <object class="GtkLabel"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="halign">start</property> - <property name="label" translatable="yes">Size</property> - <attributes> - <attribute name="weight" value="bold"/> - </attributes> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">0</property> - </packing> - </child> - <child> - <object class="GtkLabel"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="halign">start</property> - <property name="label" translatable="yes">Link</property> - <attributes> - <attribute name="weight" value="bold"/> - </attributes> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">1</property> - </packing> - </child> - <child> - <object class="GtkBox"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="spacing">8</property> - <child> - <object class="GtkRadioButton" id="link_tiny_toggle"> - <property name="label" translatable="yes">Tiny</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="active">True</property> - <property name="draw_indicator">False</property> - <property name="group">link_full_toggle</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkRadioButton" id="link_medium_toggle"> - <property name="label" translatable="yes">Medium</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="active">True</property> - <property name="draw_indicator">False</property> - <property name="group">link_full_toggle</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkRadioButton" id="link_full_toggle"> - <property name="label" translatable="yes">Full</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="active">True</property> - <property name="draw_indicator">False</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> - </child> - </object> - <packing> - <property name="left_attach">1</property> - <property name="top_attach">0</property> - </packing> - </child> - <child> - <object class="GtkBox"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="hexpand">True</property> - <property name="spacing">8</property> - <child> - <object class="GtkEntry" id="link_entry"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">False</property> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkButton" id="link_copy_button"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="tooltip_text" translatable="yes">Copy</property> - <property name="image">image1</property> - <property name="always_show_image">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkButton" id="link_view_button"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="tooltip_text" translatable="yes">View in browser</property> - <property name="image">image2</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> - </child> - </object> - <packing> - <property name="left_attach">1</property> - <property name="top_attach">1</property> - </packing> - </child> - </object> - </child> - <child type="tab"> - <object class="GtkLabel"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">Image</property> - </object> - <packing> - <property name="tab_fill">False</property> - <property name="reorderable">True</property> - </packing> - </child> - <child> - <object class="GtkGrid"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="margin_left">10</property> - <property name="margin_right">10</property> - <property name="margin_top">10</property> - <property name="margin_bottom">10</property> - <property name="row_spacing">10</property> - <property name="column_spacing">20</property> - <child> - <object class="GtkLabel"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="halign">start</property> - <property name="label" translatable="yes">Syntax</property> - <attributes> - <attribute name="weight" value="bold"/> - </attributes> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">0</property> - </packing> - </child> - <child> - <object class="GtkBox"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="spacing">8</property> - <child> - <object class="GtkRadioButton" id="embed_html_toggle"> - <property name="label" translatable="yes">HTML</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="active">True</property> - <property name="draw_indicator">False</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkRadioButton" id="embed_markdown_toggle"> - <property name="label" translatable="yes">Markdown</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="active">True</property> - <property name="draw_indicator">False</property> - <property name="group">embed_html_toggle</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkRadioButton" id="embed_bb_code_toggle"> - <property name="label" translatable="yes">BBCODE</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="active">True</property> - <property name="draw_indicator">False</property> - <property name="group">embed_html_toggle</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> - </child> - </object> - <packing> - <property name="left_attach">1</property> - <property name="top_attach">0</property> - </packing> - </child> - <child> - <object class="GtkLabel"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="halign">start</property> - <property name="label" translatable="yes">Code</property> - <attributes> - <attribute name="weight" value="bold"/> - </attributes> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">3</property> - </packing> - </child> - <child> - <object class="GtkBox"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="hexpand">True</property> - <property name="vexpand">True</property> - <property name="spacing">8</property> - <child> - <object class="GtkScrolledWindow"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="shadow_type">in</property> - <child> - <object class="GtkTextView" id="embed_text_view"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">False</property> - <property name="monospace">True</property> - </object> - </child> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkButton" id="embed_copy_button"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="tooltip_text" translatable="yes">Copy</property> - <property name="halign">center</property> - <property name="valign">center</property> - <property name="image">image3</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="left_attach">1</property> - <property name="top_attach">3</property> - </packing> - </child> - <child> - <object class="GtkLabel"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="halign">start</property> - <property name="label" translatable="yes">Size</property> - <attributes> - <attribute name="weight" value="bold"/> - </attributes> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">2</property> - </packing> - </child> - <child> - <object class="GtkBox"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="spacing">8</property> - <child> - <object class="GtkRadioButton" id="embed_tiny_toggle"> - <property name="label" translatable="yes">Tiny</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="draw_indicator">False</property> - <property name="group">embed_full_toggle</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkRadioButton" id="embed_medium_toggle"> - <property name="label" translatable="yes">Medium</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="draw_indicator">False</property> - <property name="group">embed_full_toggle</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkRadioButton" id="embed_full_toggle"> - <property name="label" translatable="yes">Full</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="active">True</property> - <property name="draw_indicator">False</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> - </child> - </object> - <packing> - <property name="left_attach">1</property> - <property name="top_attach">2</property> - </packing> - </child> - <child> - <object class="GtkLabel"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="halign">start</property> - <property name="label" translatable="yes">Type</property> - <attributes> - <attribute name="weight" value="bold"/> - </attributes> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">1</property> - </packing> - </child> - <child> - <object class="GtkBox"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="spacing">8</property> - <child> - <object class="GtkRadioButton"> - <property name="label" translatable="yes">Direct image</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="active">True</property> - <property name="draw_indicator">False</property> - <property name="group">embed_link_full_size_toggle</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkRadioButton" id="embed_link_full_size_toggle"> - <property name="label" translatable="yes">Link to full size</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="active">True</property> - <property name="draw_indicator">False</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="left_attach">1</property> - <property name="top_attach">1</property> - </packing> - </child> - </object> - <packing> - <property name="position">1</property> - </packing> - </child> - <child type="tab"> - <object class="GtkLabel"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">Embed into code</property> - </object> - <packing> - <property name="position">1</property> - <property name="tab_fill">False</property> - </packing> - </child> - <child> - <object class="GtkBox"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="margin_left">10</property> - <property name="margin_right">10</property> - <property name="margin_top">10</property> - <property name="margin_bottom">10</property> - <property name="orientation">vertical</property> - <property name="spacing">10</property> - <child> - <object class="GtkBox"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="spacing">20</property> - <child> - <object class="GtkLabel"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">Delete</property> - <attributes> - <attribute name="weight" value="bold"/> - </attributes> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkBox"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="spacing">8</property> - <child> - <object class="GtkEntry" id="delete_link_entry"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">False</property> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkButton" id="delete_link_copy_button"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="tooltip_text" translatable="yes">Copy</property> - <property name="image">image4</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkButton" id="delete_link_view_button"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="tooltip_text" translatable="yes">View in browser</property> - <property name="image">image6</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> - </child> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkLabel"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">This link only shows up once. Make sure to save it if you think you might be deleting this image. We don't currently support linking images to Imgur accounts.</property> - <property name="wrap">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="position">2</property> - </packing> - </child> - <child type="tab"> - <object class="GtkLabel"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">Deletion link</property> - </object> - <packing> - <property name="position">2</property> - <property name="tab_fill">False</property> - </packing> - </child> - </object> -</interface> diff --git a/lib/screenshooter-imgur.c b/lib/screenshooter-imgur.c deleted file mode 100644 index fd4589288944c6a38d09af9b86b00e53d1be1154..0000000000000000000000000000000000000000 --- a/lib/screenshooter-imgur.c +++ /dev/null @@ -1,262 +0,0 @@ -/* $Id$ - * - * Copyright © 2009-2010 Sebastian Waisbrot <seppo0010@gmail.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * */ - - -#include "screenshooter-imgur.h" -#include "screenshooter-job-callbacks.h" -#include <string.h> -#include <stdlib.h> -#include <libsoup/soup.h> -#include <libxml/parser.h> - -/* for v3 API - key registered *only* for xfce4-screenshooter! */ -#define CLIENT_ID "66ab680b597e293" -#define HEADER_CLIENT_ID "Client-ID " CLIENT_ID - -static gboolean imgur_upload_job (ScreenshooterJob *job, - GArray *param_values, - GError **error); - -static gboolean -imgur_upload_job (ScreenshooterJob *job, GArray *param_values, GError **error) -{ - const gchar *image_path, *title; - guchar *online_file_name = NULL; - guchar *delete_hash = NULL; - const gchar *proxy_uri; -#ifdef DEBUG - SoupLogger *log; -#endif - SoupSession *session; - SoupMessage *msg; - GMappedFile *mapping; - SoupMultipart *mp; - xmlDoc *doc; - xmlNode *root_node, *child_node; - -#ifdef HAVE_SOUP3 - GUri *soup_proxy_uri; - GBytes *buf, *response; -#else - SoupURI *soup_proxy_uri; - guint status; - SoupBuffer *buf; -#endif - - const gchar *upload_url = "https://api.imgur.com/3/upload.xml"; - - GError *tmp_error = NULL; - - g_return_val_if_fail (SCREENSHOOTER_IS_JOB (job), FALSE); - g_return_val_if_fail (param_values != NULL, FALSE); - g_return_val_if_fail (param_values->len == 2, FALSE); - g_return_val_if_fail ((G_VALUE_HOLDS_STRING (&g_array_index(param_values, GValue, 0))), FALSE); - g_return_val_if_fail ((G_VALUE_HOLDS_STRING (&g_array_index(param_values, GValue, 1))), FALSE); - g_return_val_if_fail (error == NULL || *error == NULL, FALSE); - - g_object_set_data (G_OBJECT (job), "jobtype", "imgur"); - if (exo_job_set_error_if_cancelled (EXO_JOB (job), error)) - return FALSE; - - - image_path = g_value_get_string (&g_array_index (param_values, GValue, 0)); - title = g_value_get_string (&g_array_index (param_values, GValue, 1)); - - session = soup_session_new (); -#ifdef DEBUG -#ifdef HAVE_SOUP3 - log = soup_logger_new (SOUP_LOGGER_LOG_HEADERS); -#else - log = soup_logger_new (SOUP_LOGGER_LOG_HEADERS, -1); -#endif - soup_session_add_feature (session, (SoupSessionFeature *)log); -#endif - - /* Set the proxy URI if any */ - proxy_uri = g_getenv ("http_proxy"); - - if (proxy_uri != NULL) - { -#ifdef HAVE_SOUP3 - soup_proxy_uri = g_uri_parse (proxy_uri, G_URI_FLAGS_NONE, NULL); - g_object_set (session, "proxy-uri", soup_proxy_uri, NULL); - g_uri_unref (soup_proxy_uri); -#else - soup_proxy_uri = soup_uri_new (proxy_uri); - g_object_set (session, "proxy-uri", soup_proxy_uri, NULL); - soup_uri_free (soup_proxy_uri); -#endif - } - - mapping = g_mapped_file_new (image_path, FALSE, NULL); - if (!mapping) { - g_object_unref (session); - return FALSE; - } - -#ifdef HAVE_SOUP3 - buf = g_mapped_file_get_bytes (mapping); -#else - buf = soup_buffer_new_with_owner (g_mapped_file_get_contents (mapping), - g_mapped_file_get_length (mapping), - mapping, (GDestroyNotify)g_mapped_file_unref); -#endif - - mp = soup_multipart_new (SOUP_FORM_MIME_TYPE_MULTIPART); - soup_multipart_append_form_file (mp, "image", NULL, NULL, buf); - soup_multipart_append_form_string (mp, "name", title); - soup_multipart_append_form_string (mp, "title", title); - -#ifdef HAVE_SOUP3 - msg = soup_message_new_from_multipart (upload_url, mp); - soup_message_headers_append (soup_message_get_request_headers (msg), "Authorization", HEADER_CLIENT_ID); -#else - msg = soup_form_request_new_from_multipart (upload_url, mp); - soup_message_headers_append (msg->request_headers, "Authorization", HEADER_CLIENT_ID); -#endif - - exo_job_info_message (EXO_JOB (job), _("Upload the screenshot...")); - -#ifdef HAVE_SOUP3 - response = soup_session_send_and_read (session, msg, NULL, &tmp_error); - - g_mapped_file_unref (mapping); - g_bytes_unref (buf); - g_object_unref (session); - g_object_unref (msg); -#ifdef DEBUG - g_object_unref (log); -#endif - - if (!response) - { - TRACE ("Error during the POST exchange: %s\n", tmp_error->message); - g_propagate_error (error, tmp_error); - return FALSE; - } - - TRACE("response was %s\n", (gchar*) g_bytes_get_data (response, NULL)); - /* returned XML is like <data type="array" success="1" status="200"><id>xxxxxx</id> */ - doc = xmlParseMemory (g_bytes_get_data (response, NULL), g_bytes_get_size (response)); -#else - status = soup_session_send_message (session, msg); - - if (!SOUP_STATUS_IS_SUCCESSFUL (status)) - { - TRACE ("Error during the POST exchange: %d %s\n", - status, msg->reason_phrase); - - tmp_error = g_error_new (SOUP_HTTP_ERROR, - status, - _("An error occurred while transferring the data" - " to imgur.")); - g_propagate_error (error, tmp_error); - g_object_unref (session); - g_object_unref (msg); - - return FALSE; - } - - TRACE("response was %s\n", msg->response_body->data); - /* returned XML is like <data type="array" success="1" status="200"><id>xxxxxx</id> */ - doc = xmlParseMemory(msg->response_body->data, strlen(msg->response_body->data)); -#endif - - root_node = xmlDocGetRootElement(doc); - for (child_node = root_node->children; child_node; child_node = child_node->next) - { - if (xmlStrEqual(child_node->name, (const xmlChar *) "id")) - online_file_name = xmlNodeGetContent(child_node); - else if (xmlStrEqual (child_node->name, (const xmlChar *) "deletehash")) - delete_hash = xmlNodeGetContent (child_node); - } - - TRACE("found picture id %s\n", online_file_name); - xmlFreeDoc(doc); - - screenshooter_job_image_uploaded (job, - (const gchar*) online_file_name, - (const gchar*) delete_hash); - -#ifdef HAVE_SOUP3 - g_bytes_unref (response); - g_free (online_file_name); - g_free (delete_hash); -#else - soup_buffer_free (buf); - g_object_unref (session); - g_object_unref (msg); -#endif - - return TRUE; -} - - -/* Public */ - - - -/** - * screenshooter_upload_to_imgur: - * @image_path: the local path of the image that should be uploaded to - * imgur.com. - * - * Uploads the image whose path is @image_path - * - **/ - -gboolean screenshooter_upload_to_imgur (const gchar *image_path, - const gchar *title) -{ - ScreenshooterJob *job; - GtkWidget *dialog, *label; - - g_return_val_if_fail (image_path != NULL, TRUE); - - dialog = create_spinner_dialog(_("Imgur"), &label); - - job = screenshooter_simple_job_launch (imgur_upload_job, 2, - G_TYPE_STRING, image_path, - G_TYPE_STRING, title); - - /* dismiss the spinner dialog after success or error */ - g_signal_connect_swapped (job, "error", G_CALLBACK (gtk_widget_hide), dialog); - g_signal_connect_swapped (job, "image-uploaded", G_CALLBACK (gtk_widget_hide), dialog); - - g_signal_connect (job, "ask", G_CALLBACK (cb_ask_for_information), NULL); - g_signal_connect (job, "image-uploaded", G_CALLBACK (cb_image_uploaded), NULL); - g_signal_connect (job, "error", G_CALLBACK (cb_error), dialog); - g_signal_connect (job, "finished", G_CALLBACK (cb_finished), dialog); - g_signal_connect (job, "info-message", G_CALLBACK (cb_update_info), label); - - return gtk_dialog_run (GTK_DIALOG (dialog)) != DIALOG_RESPONSE_ERROR; -} - - - -/** - * screenshooter_imgur_client_id: - * - * Returns: the API client id, *only* for xfce4-screenshooter. Do not free it. - **/ -const char* -screenshooter_imgur_client_id (void) -{ - return CLIENT_ID; -} diff --git a/lib/screenshooter-imgur.h b/lib/screenshooter-imgur.h deleted file mode 100644 index f5637a9dd944aed138e645dc1ca71ad8a13e31c6..0000000000000000000000000000000000000000 --- a/lib/screenshooter-imgur.h +++ /dev/null @@ -1,37 +0,0 @@ -/* $Id$ - * - * Copyright © 2009 Sebastian Waisbrot <seppo0010@gmail.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * */ - -#ifndef __HAVE_IMGUR_H__ -#define __HAVE_IMGUR_H__ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <glib.h> -#include <glib/gstdio.h> - -#include "screenshooter-utils.h" -#include "screenshooter-simple-job.h" - -gboolean screenshooter_upload_to_imgur (const gchar *image_path, - const gchar *title); -const gchar* screenshooter_imgur_client_id (void); - -#endif diff --git a/lib/screenshooter-job-callbacks.c b/lib/screenshooter-job-callbacks.c index 4046521f99c42ef9963470504fd12e40a11ee16d..2c046c8a46c2c14ed9cb317091fea8fc1d1b6e71 100644 --- a/lib/screenshooter-job-callbacks.c +++ b/lib/screenshooter-job-callbacks.c @@ -20,7 +20,6 @@ #include "screenshooter-job-callbacks.h" #include <libxfce4ui/libxfce4ui.h> -#include "screenshooter-imgur-dialog.h" @@ -352,20 +351,3 @@ cb_ask_for_information (ScreenshooterJob *job, gtk_widget_destroy (dialog); } - -void cb_image_uploaded (ScreenshooterJob *job, - gchar *upload_name, - gchar *delete_hash, - gchar **last_user) -{ - ScreenshooterImgurDialog *dialog; - - g_return_if_fail (upload_name != NULL); - g_return_if_fail (delete_hash != NULL); - - dialog = screenshooter_imgur_dialog_new (upload_name, delete_hash); - screenshooter_imgur_dialog_run (dialog); - - g_object_unref (dialog); -} - diff --git a/lib/screenshooter-utils.c b/lib/screenshooter-utils.c index 1892d1f4ddb3f86900968a769b2ecc7a10b81ffc..aba6d955161a2769f1de3e3b686003871ebcafee 100644 --- a/lib/screenshooter-utils.c +++ b/lib/screenshooter-utils.c @@ -135,7 +135,6 @@ screenshooter_read_rc_file (const gchar *file, ScreenshotData *sd) gchar *last_user = g_strdup (""); gchar *last_extension = g_strdup ("png"); gchar *last_custom_action_command = g_strdup ("none"); - gboolean enable_imgur_upload = TRUE; if (G_LIKELY (file != NULL)) { @@ -153,7 +152,6 @@ screenshooter_read_rc_file (const gchar *file, ScreenshotData *sd) show_mouse = xfce_rc_read_int_entry (rc, "show_mouse", 1); show_border = xfce_rc_read_int_entry (rc, "show_border", 1); timestamp = xfce_rc_read_bool_entry (rc, "timestamp", TRUE); - enable_imgur_upload = xfce_rc_read_bool_entry (rc, "enable_imgur_upload", TRUE); show_in_folder = xfce_rc_read_bool_entry (rc, "show_in_folder", FALSE); g_free (app); @@ -197,7 +195,6 @@ screenshooter_read_rc_file (const gchar *file, ScreenshotData *sd) sd->app_info = NULL; sd->last_user = last_user; sd->last_extension = last_extension; - sd->enable_imgur_upload = enable_imgur_upload; sd->show_in_folder = show_in_folder; sd->custom_action_command = last_custom_action_command; @@ -245,7 +242,6 @@ screenshooter_write_rc_file (const gchar *file, ScreenshotData *sd) xfce_rc_write_entry (rc, "custom_action_command", sd->custom_action_command); xfce_rc_write_entry (rc, "last_user", sd->last_user); xfce_rc_write_entry (rc, "last_extension", sd->last_extension); - xfce_rc_write_bool_entry (rc, "enable_imgur_upload", sd->enable_imgur_upload); xfce_rc_write_bool_entry (rc, "show_in_folder", sd->show_in_folder); /* do not save if screenshot_dir is not path, i.e. specified from cli */ @@ -269,6 +265,9 @@ screenshooter_write_rc_file (const gchar *file, ScreenshotData *sd) xfce_rc_write_int_entry (rc, "show_border", sd->show_border); } + /* clean up rc, remove this after some releases */ + xfce_rc_delete_entry (rc, "enable_imgur_upload", TRUE); + TRACE ("Flush and close the rc file"); xfce_rc_close (rc); } diff --git a/po/POTFILES.in b/po/POTFILES.in index 4979dc8cd475a1b099bf1e528d3c3fcd6630e017..003a874c178ca9daa3a423b1ad39e8ffed86b2d2 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -2,10 +2,7 @@ lib/screenshooter-dialogs.c lib/screenshooter-custom-actions.c lib/screenshooter-format.c lib/screenshooter-utils.c -lib/screenshooter-imgur.c -lib/screenshooter-imgur-dialog.c lib/screenshooter-capture-wayland.c -lib/screenshooter-imgur-dialog.ui lib/screenshooter-job-callbacks.c src/main.c src/xfce4-screenshooter.desktop.in diff --git a/src/main.c b/src/main.c index c08b1710cf6c3cd0b98af75bae655aa68e13fe3e..8113e63e8162ab1c2ff3e0361d02c82546df912a 100644 --- a/src/main.c +++ b/src/main.c @@ -36,7 +36,6 @@ gboolean mouse = FALSE; gboolean no_border = FALSE; gboolean supported_formats = FALSE; gboolean clipboard = FALSE; -gboolean upload_imgur = FALSE; gboolean show_in_folder = FALSE; gchar *screenshot_dir = NULL; gchar *application = NULL; @@ -94,11 +93,6 @@ static GOptionEntry entries[] = N_("Show the saved file in the folder."), NULL }, - { - "imgur", 'i', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &upload_imgur, - N_("Host the screenshot on Imgur, a free online image hosting service"), - NULL - }, { "version", 'V', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &version, N_("Version information"), @@ -195,18 +189,6 @@ int main (int argc, char **argv) { g_printerr (conflict_error, "open", "save"); - return EXIT_FAILURE; - } - else if (upload_imgur && (screenshot_dir != NULL)) - { - g_printerr (conflict_error, "imgur", "save"); - - return EXIT_FAILURE; - } - else if (upload_imgur && (application != NULL)) - { - g_printerr (conflict_error, "imgur", "open"); - return EXIT_FAILURE; } @@ -219,8 +201,6 @@ int main (int argc, char **argv) g_printerr (ignore_error, "save"); screenshot_dir = NULL; } - if (upload_imgur && !(fullscreen || window || region)) - g_printerr (ignore_error, "imgur"); if (clipboard && !(fullscreen || window || region)) g_printerr (ignore_error, "clipboard"); if (delay && !(fullscreen || window || region)) @@ -299,11 +279,6 @@ int main (int argc, char **argv) sd->action = OPEN; sd->action_specified = TRUE; } - else if (upload_imgur) - { - sd->action = UPLOAD_IMGUR; - sd->action_specified = TRUE; - } else if (screenshot_dir != NULL) { sd->action = SAVE; diff --git a/src/xfce4-screenshooter.appdata.xml.in b/src/xfce4-screenshooter.appdata.xml.in index b520e12b0a3fa10290626ee5ac06e5e9eed6ac2c..ee037fd2b787085b8033b9fa3500fc27480b8547 100644 --- a/src/xfce4-screenshooter.appdata.xml.in +++ b/src/xfce4-screenshooter.appdata.xml.in @@ -13,9 +13,9 @@ <description> <p>Allows you to capture the entire screen, the active window or a selected region. You can set the delay that elapses before the screenshot - is taken and the action that will be done with the screenshot: save it to a PNG - or JPG file, copy it to the clipboard, open it using another application, or host - it on imgur, a free online image hosting service. + is taken and the action that will be done with the screenshot: save it to a file, + copy it to the clipboard, open it using another application, or use your + creativity with custom actions. </p> </description>