Branch: refs/heads/master Author: Enrico enrico.trt@gmail.com Committer: Enrico enrico.trt@gmail.com Date: Wed, 02 May 2012 20:15:35 Commit: 567b5c65716f57e90a6bc9241a674b0d3780966d https://github.com/geany/geany-plugins/commit/567b5c65716f57e90a6bc9241a674b...
Log Message: ----------- added handling of errors, overall clean of the code, removed uneeded code
Modified Paths: -------------- geniuspaste/src/geniuspaste.c
Modified: geniuspaste/src/geniuspaste.c 178 files changed, 71 insertions(+), 107 deletions(-) =================================================================== @@ -30,10 +30,8 @@ #include <geanyplugin.h>
#ifdef G_OS_WIN32 - #define OPEN_BROWSER "start" #define USERNAME getenv("USERNAME") #else - #define OPEN_BROWSER "xdg-open" #define USERNAME getenv("USER") #endif
@@ -62,10 +60,7 @@ 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) @@ -74,29 +69,37 @@ "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; + 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_type = g_strdup(ft->name); + gchar *f_path = doc->real_path; gchar *f_name = doc->file_name; gchar *f_title; gchar *p_url; @@ -104,18 +107,6 @@ static void paste(const gchar * website) gchar *temp_body; gchar **tokens_array;
- const gchar *langs_supported_codepad[] = { "C", "C++", "D", "Haskell", - "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" - }; - - gint i; gint occ_position; guint status; gsize f_lenght; @@ -123,116 +114,97 @@ static void paste(const gchar * website) occ_position = last_indexof(f_name, G_DIR_SEPARATOR); f_title = f_name + occ_position + 1; - + 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); + + 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); + 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"); + 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); + 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"); + printf("%s\n", f_type); + 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, "title", f_title, - "lexer", f_type, NULL); + /* 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:
- 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"); + 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); + 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"); + 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); + formdata = soup_form_encode("content", f_content, "author", USERNAME, + "title", f_title, "lexer", f_type, NULL);
- break; + 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) { + if(status == SOUP_STATUS_OK) {
- p_url = msg->response_body->data; + p_url = g_strdup(msg->response_body->data); /* * codepad.org doesn't return only the url of the new snippet pasted @@ -243,11 +215,13 @@ static void paste(const gchar * website) 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 + /* cuts the string when it finds the first occurrence of '/' + * It shoud work even if codepad would change its url. */ - p_url = g_strndup(tokens_array[5], 27); - + + p_url = g_strdup(tokens_array[5]); + p_url[indexof(tokens_array[5], '"')] = '\0'; + g_free(temp_body); g_strfreev(tokens_array); @@ -267,24 +241,18 @@ static void paste(const gchar * website) 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); + g_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); + utils_open_browser(p_url); + g_free(p_url); } else { dialogs_show_msgbox(GTK_MESSAGE_INFO, "%s", p_url); } - - if(website_selected == CODEPAD_ORG || website_selected == DPASTE_DE) { - g_free(p_url); - } } else { - dialogs_show_msgbox(GTK_MESSAGE_INFO, "Unable to paste the code. Check your connection and retry.\n" + dialogs_show_msgbox(GTK_MESSAGE_ERROR, "Unable to paste the code. Check your connection and retry.\n" "Error code: %d\n", status); }
@@ -300,14 +268,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; + } } }
@@ -323,7 +288,7 @@ GtkWidget *plugin_configure(GtkDialog * dialog)
widgets.combo = gtk_combo_box_text_new();
- for (i = 0; i < websites_num; i++) + for (i = 0; i < G_N_ELEMENTS(websites); i++) gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets.combo), websites[i]);
@@ -368,5 +333,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).
plugins-commits@lists.geany.org