[geany/geany-plugins] 6736ad: GeniusPaste: Some improvements

Frank Lanitz git-noreply at xxxxx
Sun May 6 07:48:05 UTC 2012


Branch:      refs/heads/master
Author:      Frank Lanitz <frank at frank.uvena.de>
Committer:   Frank Lanitz <frank at frank.uvena.de>
Date:        Sun, 06 May 2012 07:48:05
Commit:      6736add0a4b7527f8fea33c9b2b4c98f98f20599
             https://github.com/geany/geany-plugins/commit/6736add0a4b7527f8fea33c9b2b4c98f98f20599

Log Message:
-----------
GeniusPaste: Some improvements


Modified Paths:
--------------
    geniuspaste/TODO
    geniuspaste/src/geniuspaste.c

Modified: geniuspaste/TODO
4 files changed, 3 insertions(+), 1 deletions(-)
===================================================================
@@ -1,4 +1,6 @@
 TODO
 ----
 
-    * Make the geany's pastebin the default pastebin
+    [!] Implement saving/loading of the settings
+    [-] Make the geany's pastebin the default pastebin
+


Modified: geniuspaste/src/geniuspaste.c
384 files changed, 190 insertions(+), 194 deletions(-)
===================================================================
@@ -24,17 +24,15 @@
 #include "string.h"
 
 #ifdef HAVE_CONFIG_H
-	#include "config.h" /* for the gettext domain */
+#include "config.h" /* for the gettext domain */
 #endif
 
 #include <geanyplugin.h>
 
 #ifdef G_OS_WIN32
-    #define OPEN_BROWSER    "start"
-    #define USERNAME        getenv("USERNAME")
+#define USERNAME        getenv("USERNAME")
 #else
-    #define OPEN_BROWSER    "xdg-open"
-    #define USERNAME        getenv("USER")
+#define USERNAME        getenv("USER")
 #endif
 
 #define CODEPAD_ORG 		0
@@ -43,6 +41,9 @@
 #define DPASTE_DE 			3
 #define SPRUNGE_US 			4
 
+#define DEFAULT_TYPE_CODEPAD langs_supported_codepad[8];
+#define DEFAULT_TYPE_DPASTE langs_supported_dpaste[15];
+
 GeanyPlugin *geany_plugin;
 GeanyData *geany_data;
 GeanyFunctions *geany_functions;
@@ -62,41 +63,46 @@
     GtkWidget *check_button;
 } widgets;
 
-
-static gint websites_num = 5;
 static gint website_selected;
-static gchar *welcome_text = NULL;
 static gboolean check_button_is_checked = FALSE;
 
 PLUGIN_VERSION_CHECK(147)
 PLUGIN_SET_TRANSLATABLE_INFO(LOCALEDIR, GETTEXT_PACKAGE, "GeniusPaste",
-    _("Paste your code on your favorite pastebin"),
+    _("Paste your code on your favorite pastebin"), 
     "0.1", "Enrico Trotta");
 
+static gint indexof(const gchar * string, gchar c)
+{
+    gchar * occ = strchr(string, c);
+    return occ ? occ - string : -1;
+}
 
-static gint last_indexof(gchar * string, gchar c)
+static gint last_indexof(const gchar * string, gchar c)
 {
-	gchar * occ = strrchr(string, c);
-	return occ ? strrchr(string, c) - string : -1;
+    gchar * occ = strrchr(string, c);
+    return occ ? occ - string : -1;
 }
 
 static void paste(const gchar * website)
 {
-    g_type_init();
-
     SoupSession *session = soup_session_async_new();
     SoupMessage *msg = NULL;
 
     GeanyDocument *doc = document_get_current();
+
+    if(doc == NULL) {
+        dialogs_show_msgbox(GTK_MESSAGE_ERROR, "There are no opened documents. Open one and retry.\n");
+        return;
+    }
+
     GeanyFiletype *ft = doc->file_type;
 
     GError *error;
 
-    gchar *buffer_shell_command;
     gchar *f_content;
     gchar *f_type = g_strdup(ft->name);
     gchar *f_path = doc->real_path;
-	gchar *f_name = doc->file_name;
+    gchar *f_name = doc->file_name;
     gchar *f_title;
     gchar *p_url;
     gchar *formdata = NULL;
@@ -104,18 +110,18 @@ static void paste(const gchar * website)
     gchar **tokens_array;
 
     const gchar *langs_supported_codepad[] = { "C", "C++", "D", "Haskell",
-		"Lua", "OCaml", "PHP", "Perl", "Plain Text",
-		"Python", "Ruby", "Scheme", "Tcl"
+            "Lua", "OCaml", "PHP", "Perl", "Plain Text",
+            "Python", "Ruby", "Scheme", "Tcl"
     };
 
     const gchar *langs_supported_dpaste[] = { "Bash", "C", "CSS", "Diff",
-		"Django/Jinja", "HTML", "IRC logs", "JavaScript", "PHP",
-		"Python console session", "Python Traceback", "Python",
-		"Python3", "Restructured Text", "SQL", "Text only"
+            "Django/Jinja", "HTML", "IRC logs", "JavaScript", "PHP",
+            "Python console session", "Python Traceback", "Python",
+            "Python3", "Restructured Text", "SQL", "Text only"
     };
 
-    gint i;
     gint occ_position;
+    gint i;
     guint status;
     gsize f_lenght;
     gboolean result;
@@ -125,170 +131,168 @@ static void paste(const gchar * website)
 
     switch (website_selected) {
 
-		case CODEPAD_ORG:
-
-		    for (i = 0; i < G_N_ELEMENTS(langs_supported_codepad); i++) {
-			    if (g_strcmp0(f_type, langs_supported_codepad[i]) == 0)
-				    break;
-			    else
-				    f_type = langs_supported_codepad[8];
-		    }
-
-		    if ((result =
-			    g_file_get_contents(f_path, &f_content, &f_lenght,
-				    &error)) == FALSE) {
-				        dialogs_show_msgbox(GTK_MESSAGE_ERROR,
-					        "Unable to the the content of the file");
-				        g_error_free(error);
-		    }
-
-		    msg = soup_message_new("POST", website);
-		    formdata =
-			    soup_form_encode("lang", f_type, "code", f_content, "submit",
-				    "Submit", NULL);
-		break;
-
-		case PASTEBIN_COM:
-
-			if ((result =
-				g_file_get_contents(f_path, &f_content, &f_lenght,
-					&error)) == FALSE) {
-				dialogs_show_msgbox(GTK_MESSAGE_ERROR,
-					  "Unable to the the content of the file");
-				g_error_free(error);
-			}
-
-			msg = soup_message_new("POST", website);
-			formdata =
-			  soup_form_encode("paste_code", f_content, "paste_format",
-			      f_type, "paste_name", f_title, NULL);
-		break;
-
-
-		case DPASTE_DE:
-
-			for (i = 0; i < G_N_ELEMENTS(langs_supported_dpaste); i++) {
-				if (g_strcmp0(f_type, langs_supported_dpaste[i]) == 0)
-					break;
-				else
-					f_type = langs_supported_dpaste[15]; // Text only
-			}
-
-			if ((result =
-				g_file_get_contents(f_path, &f_content, &f_lenght,
-				   &error)) == FALSE) {
-					dialogs_show_msgbox(GTK_MESSAGE_ERROR,
-						"Unable to the the content of the file");
-				g_error_free(error);
-			}
-
-			msg = soup_message_new("POST", website);
-			formdata =
-				soup_form_encode("content", f_content, "title", f_title,
-					"lexer", f_type, NULL);
-
-		break;
-
-		case SPRUNGE_US:
-
-		    if ((result =
-				g_file_get_contents(f_path, &f_content, &f_lenght,
-				   &error)) == FALSE) {
-				dialogs_show_msgbox(GTK_MESSAGE_ERROR,
-					"Unable to the the content of the file");
-				g_error_free(error);
-			}
-
-			msg = soup_message_new("POST", website);
-			formdata =
-				soup_form_encode("sprunge", f_content, NULL);
-
-		break;
-
-		case PASTEBIN_GEANY_ORG:
-
-			if ((result =
-				g_file_get_contents(f_path, &f_content, &f_lenght,
-				   &error)) == FALSE) {
-				dialogs_show_msgbox(GTK_MESSAGE_ERROR,
-					"Unable to the the content of the file");
-				g_error_free(error);
-			}
-
-			msg = soup_message_new("POST", website);
-			formdata =
-				soup_form_encode("content", f_content, "author", USERNAME,
-					"title", f_title, "lexer", f_type, NULL);
-
-			break;
+    case CODEPAD_ORG:
+
+        for (i = 0; i < G_N_ELEMENTS(langs_supported_codepad); i++) {
+            if (g_strcmp0(f_type, langs_supported_codepad[i]) == 0)
+                break;
+            else
+                f_type = DEFAULT_TYPE_CODEPAD;
+        }
+
+        result = g_file_get_contents(f_path, &f_content, &f_lenght, &error);
+        if(result == FALSE) {
+            dialogs_show_msgbox(GTK_MESSAGE_ERROR, "Unable to the the content of the file");
+            g_error_free(error);
+            return;
+        }
+
+        msg = soup_message_new("POST", website);
+        formdata = soup_form_encode("lang", f_type, "code", f_content,
+                                    "submit", "Submit", NULL);
+
+        break;
+
+    case PASTEBIN_COM:
+
+        result = g_file_get_contents(f_path, &f_content, &f_lenght, &error);
+        if(result == FALSE) {
+            dialogs_show_msgbox(GTK_MESSAGE_ERROR, "Unable to the the content of the file");
+            g_error_free(error);
+            return;
+        }
+
+        msg = soup_message_new("POST", website);
+        formdata = soup_form_encode("paste_code", f_content, "paste_format",
+                                    f_type, "paste_name", f_title, NULL);
+
+        break;
+
+
+    case DPASTE_DE:
+
+        for (i = 0; i < G_N_ELEMENTS(langs_supported_dpaste); i++) {
+            if (g_strcmp0(f_type, langs_supported_dpaste[i]) == 0)
+                break;
+            else
+                f_type = DEFAULT_TYPE_DPASTE;
+        }
+
+        result = g_file_get_contents(f_path, &f_content, &f_lenght, &error);
+        if(result == FALSE) {
+            dialogs_show_msgbox(GTK_MESSAGE_ERROR, "Unable to the the content of the file");
+            g_error_free(error);
+            return;
+        }
+
+        msg = soup_message_new("POST", website);
+        /* apparently dpaste.de detects automatically the syntax of the
+         * pasted code so 'lexer' should be unneeded
+         */
+        formdata = soup_form_encode("content", f_content, "title", f_title,
+                                    "lexer", f_type, NULL);
+
+        break;
+
+    case SPRUNGE_US:
+
+        result = g_file_get_contents(f_path, &f_content, &f_lenght, &error);
+        if(result == FALSE) {
+            dialogs_show_msgbox(GTK_MESSAGE_ERROR, "Unable to the the content of the file");
+            g_error_free(error);
+            return;
+        }
+
+        msg = soup_message_new("POST", website);
+        formdata = soup_form_encode("sprunge", f_content, NULL);
+
+        break;
+
+    case PASTEBIN_GEANY_ORG:
+
+        result = g_file_get_contents(f_path, &f_content, &f_lenght, &error);
+        if(result == FALSE) {
+            dialogs_show_msgbox(GTK_MESSAGE_ERROR, "Unable to the the content of the file");
+            g_error_free(error);
+            return;
+        }
+
+        msg = soup_message_new("POST", website);
+        formdata = soup_form_encode("content", f_content, "author", USERNAME,
+                                    "title", f_title, "lexer", f_type, NULL);
+
+        break;
 
     }
 
     soup_message_set_request(msg, "application/x-www-form-urlencoded",
-			    SOUP_MEMORY_COPY, formdata, strlen(formdata));
+                             SOUP_MEMORY_COPY, formdata, strlen(formdata));
 
     status = soup_session_send_message(session, msg);
-
-    if(status == 200) {
-
-	    p_url = msg->response_body->data;
-
-	    /*
-	     * codepad.org doesn't return only the url of the new snippet pasted
-	     * but an html page. This minimal parser will get the bare url.
-	     */
-
-	    if (website_selected == CODEPAD_ORG) {
-	        temp_body = g_strdup(p_url);
-	        tokens_array = g_strsplit(temp_body, "<a href=\"", 0);
-
-	       /* copy the first 27 chars because the url is composed by 27 characters.
-	        * codepad.org/XXXXXXXX
-	        */
-	        p_url = g_strndup(tokens_array[5], 27);
-
-	        g_free(temp_body);
-	        g_strfreev(tokens_array);
-
-	    } else if(website_selected == DPASTE_DE) {
-	        p_url = g_strndup(p_url + 1, strlen(p_url) - 2);
-
-	    } else if(website_selected == SPRUNGE_US) {
-
-			/* in order to enable the syntax highlightning on sprunge.us
-			 * it is necessary to append at the returned url a question
-			 * mark '?' followed by the file type.
-			 *
-			 * e.g. sprunge.us/xxxx?c
-			 */
-	        p_url[strlen(p_url) - 1] = '\0';
-	        f_type[0] = g_ascii_tolower(f_type[0]);
-	        temp_body = g_strdup_printf("?%s", f_type);
-	        g_strlcat(p_url + 1, temp_body, -1);
-	        p_url = g_strchomp(p_url);
-	        free(temp_body);
-	    }
-
-	    if (check_button_is_checked) {
-		    buffer_shell_command = g_malloc(100 * sizeof(gchar));
-		    sprintf(buffer_shell_command, "%s %s", OPEN_BROWSER, p_url);
-		    system(buffer_shell_command);
-		    g_free(buffer_shell_command);
-	    } else {
-		    dialogs_show_msgbox(GTK_MESSAGE_INFO, "%s", p_url);
-	    }
-
-	    if(website_selected == CODEPAD_ORG || website_selected == DPASTE_DE) {
-	        g_free(p_url);
-	    }
+    p_url = g_strdup(msg->response_body->data);
+    g_free(f_content);
+    
+    if(status == SOUP_STATUS_OK) {
+
+        /*
+         * codepad.org doesn't return only the url of the new snippet pasted
+         * but an html page. This minimal parser will get the bare url.
+         */
+
+        if (website_selected == CODEPAD_ORG) {
+            temp_body = g_strdup(p_url);
+            tokens_array = g_strsplit(temp_body, "<a href=\"", 0);
+
+            /* cuts the string when it finds the first occurrence of '/'
+             * It shoud work even if codepad would change its url.
+             */
+
+            p_url = g_strdup(tokens_array[5]);
+            occ_position = indexof(tokens_array[5], '\"');
+            
+            g_free(temp_body);
+            g_strfreev(tokens_array);
+            
+            if(occ_position != -1) {
+                p_url[occ_position] = '\0';
+            } else {
+                dialogs_show_msgbox(GTK_MESSAGE_ERROR, "Unable to paste the code on codepad.org\n"
+                                    "Retry or select another pastebin.");
+                g_free(p_url);
+                return;
+            }
+
+        } else if(website_selected == DPASTE_DE) {
+            p_url = g_strndup(p_url + 1, strlen(p_url) - 2);
+
+        } else if(website_selected == SPRUNGE_US) {
+
+            /* in order to enable the syntax highlightning on sprunge.us
+             * it is necessary to append at the returned url a question
+             * mark '?' followed by the file type.
+             *
+             * e.g. sprunge.us/xxxx?c
+             */
+            p_url[strlen(p_url) - 1] = '\0';
+            f_type[0] = g_ascii_tolower(f_type[0]);
+            temp_body = g_strdup_printf("?%s", f_type);
+            g_strlcat(p_url + 1, temp_body, -1);
+            p_url = g_strchomp(p_url);
+            g_free(temp_body);
+        }
+
+        if (check_button_is_checked) {
+            utils_open_browser(p_url);
+        } else {
+            dialogs_show_msgbox(GTK_MESSAGE_INFO, "%s", p_url);
+        }
 
     } else {
-        dialogs_show_msgbox(GTK_MESSAGE_INFO, "Unable to paste the code. Check your connection and retry.\n"
-            "Error code: %d\n", status);
+        dialogs_show_msgbox(GTK_MESSAGE_ERROR, "Unable to paste the code. Check your connection and retry.\n"
+                            "Error code: %d\n", status);
     }
 
-    g_free(f_content);
-
+    g_free(p_url);
 }
 
 static void item_activate(GtkMenuItem * menuitem, gpointer gdata)
@@ -299,14 +303,11 @@ static void item_activate(GtkMenuItem * menuitem, gpointer gdata)
 static void on_configure_response(GtkDialog * dialog, gint response, gpointer * user_data)
 {
     if (response == GTK_RESPONSE_OK || response == GTK_RESPONSE_APPLY) {
+        website_selected =  gtk_combo_box_get_active(GTK_COMBO_BOX(widgets.combo));
 
-	    website_selected =
-			gtk_combo_box_get_active
-				(GTK_COMBO_BOX(widgets.combo));
-
-	    if (gtk_toggle_button_get_active
-	        (GTK_TOGGLE_BUTTON(widgets.check_button)))
-				check_button_is_checked = TRUE;
+        if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets.check_button))) {
+            check_button_is_checked = TRUE;
+        }
     }
 }
 
@@ -322,15 +323,12 @@ GtkWidget *plugin_configure(GtkDialog * dialog)
 
     widgets.combo = gtk_combo_box_text_new();
 
-    for (i = 0; i < websites_num; i++)
-	gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets.combo),
-				       websites[i]);
+    for (i = 0; i < G_N_ELEMENTS(websites); i++)
+        gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets.combo), websites[i]);
 
     gtk_combo_box_set_active(GTK_COMBO_BOX(widgets.combo), 0);
 
-    widgets.check_button =
-		gtk_check_button_new_with_label
-			("show your paste in a new browser tab");
+    widgets.check_button = gtk_check_button_new_with_label("show your paste in a new browser tab");
 
     gtk_container_add(GTK_CONTAINER(vbox), label);
     gtk_container_add(GTK_CONTAINER(vbox), widgets.combo);
@@ -338,8 +336,7 @@ GtkWidget *plugin_configure(GtkDialog * dialog)
 
     gtk_widget_show_all(vbox);
 
-    g_signal_connect(dialog, "response", G_CALLBACK(on_configure_response),
-		     NULL);
+    g_signal_connect(dialog, "response", G_CALLBACK(on_configure_response), NULL);
 
     return vbox;
 }
@@ -351,9 +348,9 @@ static void add_menu_item()
     paste_item = gtk_menu_item_new_with_mnemonic(_("_Paste it!"));
     gtk_widget_show(paste_item);
     gtk_container_add(GTK_CONTAINER(geany->main_widgets->tools_menu),
-		      paste_item);
+                      paste_item);
     g_signal_connect(paste_item, "activate", G_CALLBACK(item_activate),
-		     NULL);
+                     NULL);
 
     main_menu_item = paste_item;
 }
@@ -367,5 +364,4 @@ void plugin_init(GeanyData * data)
 void plugin_cleanup(void)
 {
     gtk_widget_destroy(main_menu_item);
-    g_free(welcome_text);
 }


@@ Diff output truncated at 100000 characters. @@


--------------
This E-Mail was brought to you by github_commit_mail.py (Source: TBD).



More information about the Plugins-Commits mailing list