[geany/geany-plugins] cdf09a: Merge pull request #34 from Enrix835/master

Frank Lanitz git-noreply at xxxxx
Thu May 10 19:21:17 UTC 2012


Branch:      refs/heads/master
Author:      Frank Lanitz <frank at frank.uvena.de>
Committer:   Frank Lanitz <frank at frank.uvena.de>
Date:        Thu, 10 May 2012 19:21:17
Commit:      cdf09af0a44149045242dbe06969c6930ff7ea16
             https://github.com/geany/geany-plugins/commit/cdf09af0a44149045242dbe06969c6930ff7ea16

Log Message:
-----------
Merge pull request #34 from Enrix835/master

GeniusPaste: new features


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

Modified: geniuspaste/src/geniuspaste.c
232 files changed, 173 insertions(+), 59 deletions(-)
===================================================================
@@ -19,9 +19,13 @@
  *  MA 02110-1301, USA.
  */
 
-#include "libsoup/soup.h"
-#include "stdlib.h"
-#include "string.h"
+#include <libsoup/soup.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef HAVE_LOCALE_H
+#include <locale.h>
+#endif
 
 #ifdef HAVE_CONFIG_H
 #include "config.h" /* for the gettext domain */
@@ -50,7 +54,8 @@
 
 static GtkWidget *main_menu_item = NULL;
 
-static const gchar *websites[] = {
+static const gchar *websites[] =
+{
     "http://codepad.org",
     "http://pastebin.com/api_public.php",
     "http://pastebin.geany.org/api/",
@@ -58,18 +63,23 @@
     "http://sprunge.us/",
 };
 
-static struct {
+static struct
+{
     GtkWidget *combo;
     GtkWidget *check_button;
+    GtkWidget *author_entry;
 } widgets;
 
+static gchar *config_file = NULL;
+static gchar *author_name = NULL;
+
 static gint website_selected;
 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"), 
-    "0.1", "Enrico Trotta");
+                             _("Paste your code on your favorite pastebin"),
+                             "0.2", "Enrico Trotta");
 
 static gint indexof(const gchar * string, gchar c)
 {
@@ -83,6 +93,62 @@ static gint last_indexof(const gchar * string, gchar c)
     return occ ? occ - string : -1;
 }
 
+static void load_settings(void)
+{
+    GKeyFile *config = g_key_file_new();
+    GError *err = NULL;
+    gint tmp_website;
+    gboolean tmp_open_browser;
+    gchar *tmp_author_name;
+
+    config_file = g_strconcat(geany->app->configdir, G_DIR_SEPARATOR_S, "plugins", G_DIR_SEPARATOR_S,
+                              "geniuspaste", G_DIR_SEPARATOR_S, "geniuspaste.conf", NULL);
+    g_key_file_load_from_file(config, config_file, G_KEY_FILE_NONE, NULL);
+
+    tmp_website = g_key_file_get_integer(config, "geniuspaste", "website", &err);
+    tmp_open_browser = g_key_file_get_boolean(config, "geniuspaste", "open_browser", &err);
+    tmp_author_name = g_key_file_get_string(config, "geniuspaste", "author_name", &err);
+
+    if (err)
+    {
+        g_error_free(err);
+    }
+    else
+    {
+        website_selected = tmp_website;
+        check_button_is_checked = tmp_open_browser;
+        author_name = tmp_author_name;
+    }
+    g_key_file_free(config);
+}
+
+static void save_settings(void)
+{
+    GKeyFile *config = g_key_file_new();
+    gchar *data;
+    gchar *config_dir = g_path_get_dirname(config_file);
+
+    g_key_file_load_from_file(config, config_file, G_KEY_FILE_NONE, NULL);
+
+    g_key_file_set_integer(config, "geniuspaste", "website", website_selected);
+    g_key_file_set_boolean(config, "geniuspaste", "open_browser", check_button_is_checked);
+    g_key_file_set_string(config, "geniuspaste", "author_name", author_name);
+
+    if (! g_file_test(config_dir, G_FILE_TEST_IS_DIR) && utils_mkdir(config_dir, TRUE) != 0)
+    {
+        dialogs_show_msgbox(GTK_MESSAGE_ERROR,
+                            _("Plugin configuration directory could not be created."));
+    }
+    else
+    {
+        data = g_key_file_to_data(config, NULL, NULL);
+        utils_write_file(config_file, data);
+        g_free(data);
+    }
+    g_free(config_dir);
+    g_key_file_free(config);
+}
+
 static void paste(const gchar * website)
 {
     SoupSession *session = soup_session_async_new();
@@ -90,14 +156,14 @@ static void paste(const gchar * website)
 
     GeanyDocument *doc = document_get_current();
 
-    if(doc == NULL) {
-        dialogs_show_msgbox(GTK_MESSAGE_ERROR, "There are no opened documents. Open one and retry.\n");
+    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;
+    GError *error = NULL;
 
     gchar *f_content;
     gchar *f_type = g_strdup(ft->name);
@@ -109,15 +175,19 @@ 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_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"
+    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 occ_position;
@@ -129,11 +199,15 @@ 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) {
+    load_settings();
+
+    switch (website_selected)
+    {
 
     case CODEPAD_ORG:
 
-        for (i = 0; i < G_N_ELEMENTS(langs_supported_codepad); i++) {
+        for (i = 0; i < G_N_ELEMENTS(langs_supported_codepad); i++)
+        {
             if (g_strcmp0(f_type, langs_supported_codepad[i]) == 0)
                 break;
             else
@@ -141,8 +215,9 @@ static void paste(const gchar * website)
         }
 
         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");
+        if(result == FALSE)
+        {
+            dialogs_show_msgbox(GTK_MESSAGE_ERROR, _("Unable to get the the content of the file"));
             g_error_free(error);
             return;
         }
@@ -156,8 +231,9 @@ static void paste(const gchar * website)
     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");
+        if(result == FALSE)
+        {
+            dialogs_show_msgbox(GTK_MESSAGE_ERROR, _("Unable to get the the content of the file"));
             g_error_free(error);
             return;
         }
@@ -171,7 +247,8 @@ static void paste(const gchar * website)
 
     case DPASTE_DE:
 
-        for (i = 0; i < G_N_ELEMENTS(langs_supported_dpaste); i++) {
+        for (i = 0; i < G_N_ELEMENTS(langs_supported_dpaste); i++)
+        {
             if (g_strcmp0(f_type, langs_supported_dpaste[i]) == 0)
                 break;
             else
@@ -180,7 +257,7 @@ static void paste(const gchar * website)
 
         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");
+            dialogs_show_msgbox(GTK_MESSAGE_ERROR, _("Unable to get the the content of the file"));
             g_error_free(error);
             return;
         }
@@ -197,8 +274,9 @@ static void paste(const gchar * website)
     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");
+        if(result == FALSE)
+        {
+            dialogs_show_msgbox(GTK_MESSAGE_ERROR, _("Unable to get the the content of the file"));
             g_error_free(error);
             return;
         }
@@ -211,14 +289,15 @@ static void paste(const gchar * website)
     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");
+        if(result == FALSE)
+        {
+            dialogs_show_msgbox(GTK_MESSAGE_ERROR, _("Unable to get 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,
+        formdata = soup_form_encode("content", f_content, "author", author_name,
                                     "title", f_title, "lexer", f_type, NULL);
 
         break;
@@ -230,16 +309,17 @@ static void paste(const gchar * website)
 
     status = soup_session_send_message(session, msg);
     p_url = g_strdup(msg->response_body->data);
-    g_free(f_content);
-    
-    if(status == SOUP_STATUS_OK) {
+
+    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) {
+        if (website_selected == CODEPAD_ORG)
+        {
             temp_body = g_strdup(p_url);
             tokens_array = g_strsplit(temp_body, "<a href=\"", 0);
 
@@ -249,23 +329,29 @@ static void paste(const gchar * website)
 
             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) {
+
+            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);
+            }
+            else
+            {
+                dialogs_show_msgbox(GTK_MESSAGE_ERROR, _("Unable to paste the code on codepad.org\n"
+                                    "Retry or select another pastebin."));
                 return;
             }
 
-        } else if(website_selected == DPASTE_DE) {
+        }
+        else if(website_selected == DPASTE_DE)
+        {
             p_url = g_strndup(p_url + 1, strlen(p_url) - 2);
 
-        } else if(website_selected == SPRUNGE_US) {
+        }
+        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
@@ -281,17 +367,22 @@ static void paste(const gchar * website)
             g_free(temp_body);
         }
 
-        if (check_button_is_checked) {
+        if (check_button_is_checked)
+        {
             utils_open_browser(p_url);
-        } else {
+        }
+        else
+        {
             dialogs_show_msgbox(GTK_MESSAGE_INFO, "%s", p_url);
         }
-
-    } else {
-        dialogs_show_msgbox(GTK_MESSAGE_ERROR, "Unable to paste the code. Check your connection and retry.\n"
-                            "Error code: %d\n", status);
+    }
+    else
+    {
+        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);
 }
 
@@ -302,11 +393,19 @@ 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));
-
-        if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets.check_button))) {
-            check_button_is_checked = TRUE;
+    if (response == GTK_RESPONSE_OK || response == GTK_RESPONSE_APPLY)
+    {
+        if(g_strcmp0(gtk_entry_get_text(GTK_ENTRY(widgets.author_entry)), "") == 0)
+        {
+            dialogs_show_msgbox(GTK_MESSAGE_ERROR, _("The author name field is empty!"));
+        }
+        else
+        {
+            website_selected = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets.combo));
+            check_button_is_checked = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets.check_button));
+            author_name = g_strdup(gtk_entry_get_text(GTK_ENTRY(widgets.author_entry)));
+            save_settings();
+            g_free(author_name);
         }
     }
 }
@@ -314,26 +413,39 @@ static void on_configure_response(GtkDialog * dialog, gint response, gpointer *
 GtkWidget *plugin_configure(GtkDialog * dialog)
 {
     gint i;
-    GtkWidget *label, *vbox;
+    GtkWidget *label, *vbox, *author_label;
 
     vbox = gtk_vbox_new(FALSE, 6);
 
     label = gtk_label_new(_("Select a pastebin:"));
     gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
 
+    author_label = gtk_label_new(_("Enter the author name:"));
+    gtk_misc_set_alignment(GTK_MISC(author_label), 0, 0.5);
+
+    widgets.author_entry = gtk_entry_new();
+
+    if(author_name == NULL)
+        author_name = USERNAME;
+
+    gtk_entry_set_text(GTK_ENTRY(widgets.author_entry), author_name);
+
     widgets.combo = gtk_combo_box_text_new();
 
     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);
+    gtk_container_add(GTK_CONTAINER(vbox), author_label);
+    gtk_container_add(GTK_CONTAINER(vbox), widgets.author_entry);
     gtk_container_add(GTK_CONTAINER(vbox), widgets.check_button);
 
+    gtk_combo_box_set_active(GTK_COMBO_BOX(widgets.combo), website_selected);
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets.check_button), check_button_is_checked);
+
     gtk_widget_show_all(vbox);
 
     g_signal_connect(dialog, "response", G_CALLBACK(on_configure_response), NULL);
@@ -357,6 +469,8 @@ static void add_menu_item()
 
 void plugin_init(GeanyData * data)
 {
+    load_settings();
+    main_locale_init(LOCALEDIR, GETTEXT_PACKAGE);
     add_menu_item();
 }
 


@@ 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