SF.net SVN: geany-plugins:[2000] trunk/geany-plugins/updatechecker/src/ updatechecker.c

frlan at users.sourceforge.net frlan at xxxxx
Sun Mar 27 09:55:46 UTC 2011


Revision: 2000
          http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=2000&view=rev
Author:   frlan
Date:     2011-03-27 09:55:45 +0000 (Sun, 27 Mar 2011)

Log Message:
-----------
Updatechcker: Check and init threads as a workaround for old GTK/glib versions

Modified Paths:
--------------
    trunk/geany-plugins/updatechecker/src/updatechecker.c

Modified: trunk/geany-plugins/updatechecker/src/updatechecker.c
===================================================================
--- trunk/geany-plugins/updatechecker/src/updatechecker.c	2011-03-22 15:36:59 UTC (rev 1999)
+++ trunk/geany-plugins/updatechecker/src/updatechecker.c	2011-03-27 09:55:45 UTC (rev 2000)
@@ -31,21 +31,21 @@
 PLUGIN_VERSION_CHECK(188)
 
 PLUGIN_SET_TRANSLATABLE_INFO(
-	LOCALEDIR,
-	GETTEXT_PACKAGE,
-	_("Updatechecker"),
-	_("A plugin which is checking whether there are updates for Geany available."),
-	VERSION,
-	"Frank Lanitz <frank at frank.uvena.de>")
+    LOCALEDIR,
+    GETTEXT_PACKAGE,
+    _("Updatechecker"),
+    _("A plugin which is checking whether there are updates for Geany available."),
+    VERSION,
+    "Frank Lanitz <frank at frank.uvena.de>")
 
 enum {
-	UPDATECHECK_MANUAL,
-	UPDATECHECK_STARTUP
+    UPDATECHECK_MANUAL,
+    UPDATECHECK_STARTUP
 };
 
 static GtkWidget *main_menu_item = NULL;
 static void update_check_result_cb(SoupSession *session,
-	SoupMessage *msg, gpointer user_data);
+    SoupMessage *msg, gpointer user_data);
 
 static gboolean check_on_startup = FALSE;
 
@@ -55,48 +55,48 @@
 
 static struct
 {
-	GtkWidget *run_on_startup;
+    GtkWidget *run_on_startup;
 }
 config_widgets;
 
 typedef struct
 {
-	gint major;
-	gint minor;
-	gint mini;
-	gchar *extra;
+    gint major;
+    gint minor;
+    gint mini;
+    gchar *extra;
 }
 version_struct;
 
 
 static void update_check(gint type)
 {
-	SoupSession *soup;
-	SoupMessage *msg;
-	gchar *user_agent = g_strconcat("Updatechecker ", VERSION, " at Geany ", 
-									 GEANY_VERSION, NULL);
+    SoupSession *soup;
+    SoupMessage *msg;
+    gchar *user_agent = g_strconcat("Updatechecker ", VERSION, " at Geany ",
+                                     GEANY_VERSION, NULL);
 
-	g_message("Starting checking for updates");
-	soup = soup_session_async_new_with_options(SOUP_SESSION_USER_AGENT, 
-			user_agent, NULL);
+    g_message("Starting checking for updates");
+    soup = soup_session_async_new_with_options(SOUP_SESSION_USER_AGENT,
+            user_agent, NULL);
 
-	g_free(user_agent);
-	
-	msg = soup_message_new ("GET", "http://geany.org/service/version.php");
-	
-	soup_session_queue_message (soup, msg, update_check_result_cb, GINT_TO_POINTER(type));
+    g_free(user_agent);
+
+    msg = soup_message_new ("GET", "http://geany.org/service/version.php");
+
+    soup_session_queue_message (soup, msg, update_check_result_cb, GINT_TO_POINTER(type));
 }
 
 
 
 static void
 on_geany_startup_complete(G_GNUC_UNUSED GObject *obj,
-						  G_GNUC_UNUSED gpointer user_data)
+                          G_GNUC_UNUSED gpointer user_data)
 {
-	if (check_on_startup == TRUE)
-	{
-		update_check(UPDATECHECK_STARTUP);
-	}
+    if (check_on_startup == TRUE)
+    {
+        update_check(UPDATECHECK_STARTUP);
+    }
 }
 
 
@@ -104,43 +104,43 @@
  * http://sylpheed.sraoss.jp/en/
  * GPL FTW! */
 static void parse_version_string(const gchar *ver, gint *major, gint *minor,
-				 gint *micro, gchar **extra)
+                 gint *micro, gchar **extra)
 {
-	gchar **vers;	
-	vers = g_strsplit(ver, ".", 4);
-	if (vers[0])
-	{
-		*major = atoi(vers[0]);
-		if (vers[1])
-		{
-			*minor = atoi(vers[1]);
-			if (vers[2])
-			{
-				*micro = atoi(vers[2]);
-				if (vers[3])
-				{
-					*extra = g_strdup(vers[3]);
-				}
-				else
-				{
-					*extra = NULL;
-				}
-			}
-			else
-			{
-				*micro = 0;
-			}
-		}
-		else
-		{
-			*minor = 0;
-		}
-	}
-	else
-	{
-		major = 0;
-	}
-	g_strfreev(vers);
+    gchar **vers;
+    vers = g_strsplit(ver, ".", 4);
+    if (vers[0])
+    {
+        *major = atoi(vers[0]);
+        if (vers[1])
+        {
+            *minor = atoi(vers[1]);
+            if (vers[2])
+            {
+                *micro = atoi(vers[2]);
+                if (vers[3])
+                {
+                    *extra = g_strdup(vers[3]);
+                }
+                else
+                {
+                    *extra = NULL;
+                }
+            }
+            else
+            {
+                *micro = 0;
+            }
+        }
+        else
+        {
+            *minor = 0;
+        }
+    }
+    else
+    {
+        major = 0;
+    }
+    g_strfreev(vers);
 }
 
 
@@ -149,167 +149,175 @@
 static gboolean
 version_compare(const gchar *current_version)
 {
-	version_struct geany_running;
-	version_struct geany_current;
-		
-	parse_version_string(GEANY_VERSION, &geany_running.major,
-		&geany_running.minor, &geany_running.mini, &geany_running.extra);
+    version_struct geany_running;
+    version_struct geany_current;
 
-	parse_version_string(current_version, &geany_current.major,
-		&geany_current.minor, &geany_current.mini, &geany_current.extra);
+    parse_version_string(GEANY_VERSION, &geany_running.major,
+        &geany_running.minor, &geany_running.mini, &geany_running.extra);
 
-	if ((geany_running.major < geany_current.major) ||
-		(geany_running.minor < geany_current.minor) ||
-		(geany_running.minor < geany_current.minor))
-	{
-		return TRUE;
-	}
-	else
-	{
-		return FALSE;
-	}
+    parse_version_string(current_version, &geany_current.major,
+        &geany_current.minor, &geany_current.mini, &geany_current.extra);
+
+    if ((geany_running.major < geany_current.major) ||
+        (geany_running.minor < geany_current.minor) ||
+        (geany_running.minor < geany_current.minor))
+    {
+        return TRUE;
+    }
+    else
+    {
+        return FALSE;
+    }
 }
 
 
 static void update_check_result_cb(SoupSession *session,
-	SoupMessage *msg, gpointer user_data)
+    SoupMessage *msg, gpointer user_data)
 {
-	gint type = GPOINTER_TO_INT(user_data);
-	
-	/* Checking whether we did get a valid (200) result */
-	if (msg->status_code == 200)
-	{
-		if (version_compare(msg->response_body->data) == TRUE)
-		{
-			dialogs_show_msgbox(GTK_MESSAGE_INFO,
-				_("There is a more recent version available"));
-			g_message("There is a more recent version available");
-		}
-		else
-		{
-			if (type == UPDATECHECK_MANUAL)
-			{
-				dialogs_show_msgbox(GTK_MESSAGE_INFO,
-					_("No update available"));
-			}
+    gint type = GPOINTER_TO_INT(user_data);
 
-			g_message("No update available");
+    /* Checking whether we did get a valid (200) result */
+    if (msg->status_code == 200)
+    {
+        if (version_compare(msg->response_body->data) == TRUE)
+        {
+            dialogs_show_msgbox(GTK_MESSAGE_INFO,
+                _("There is a more recent version available"));
+            g_message("There is a more recent version available");
+        }
+        else
+        {
+            if (type == UPDATECHECK_MANUAL)
+            {
+                dialogs_show_msgbox(GTK_MESSAGE_INFO,
+                    _("No update available"));
+            }
 
-		}
-	}
-	else
-	{
-		if (type == UPDATECHECK_MANUAL)
-		{
-			dialogs_show_msgbox(GTK_MESSAGE_ERROR,
-				_("Wasn't able to catch some version information.\n"
-				"Error code: %d \n"
-				"Error message: »%s«"), msg->status_code, msg->reason_phrase);
-		}
-		g_warning("Connection error. Code: %d; Message: %s",
-			msg->status_code, msg->reason_phrase);
-	}
+            g_message("No update available");
+
+        }
+    }
+    else
+    {
+        if (type == UPDATECHECK_MANUAL)
+        {
+            dialogs_show_msgbox(GTK_MESSAGE_ERROR,
+                _("Wasn't able to catch some version information.\n"
+                "Error code: %d \n"
+                "Error message: »%s«"), msg->status_code, msg->reason_phrase);
+        }
+        g_warning("Connection error. Code: %d; Message: %s",
+            msg->status_code, msg->reason_phrase);
+    }
 }
 
 static void manual_check_activated_cb(GtkMenuItem *menuitem, gpointer gdata)
 {
-	update_check(UPDATECHECK_MANUAL);
+    update_check(UPDATECHECK_MANUAL);
 }
 
 
 static void
 on_configure_response(G_GNUC_UNUSED GtkDialog *dialog, gint response,
-					  G_GNUC_UNUSED gpointer user_data)
+                      G_GNUC_UNUSED gpointer user_data)
 {
-	if (response == GTK_RESPONSE_OK || response == GTK_RESPONSE_APPLY)
-	{
-		GKeyFile *config = g_key_file_new();
-		gchar *data;
-		gchar *config_dir = g_path_get_dirname(config_file);
+    if (response == GTK_RESPONSE_OK || response == GTK_RESPONSE_APPLY)
+    {
+        GKeyFile *config = g_key_file_new();
+        gchar *data;
+        gchar *config_dir = g_path_get_dirname(config_file);
 
-		config_file = g_strconcat(geany->app->configdir,
-			G_DIR_SEPARATOR_S, "plugins", G_DIR_SEPARATOR_S,
-			"updatechecker", G_DIR_SEPARATOR_S, "general.conf", NULL);
+        config_file = g_strconcat(geany->app->configdir,
+            G_DIR_SEPARATOR_S, "plugins", G_DIR_SEPARATOR_S,
+            "updatechecker", G_DIR_SEPARATOR_S, "general.conf", NULL);
 
-		/* Crabbing options that has been set */
-		check_on_startup =
-			gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_widgets.run_on_startup));
+        /* Crabbing options that has been set */
+        check_on_startup =
+            gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_widgets.run_on_startup));
 
-		/* write stuff to file */
-		g_key_file_load_from_file(config, config_file, G_KEY_FILE_NONE, NULL);
+        /* write stuff to file */
+        g_key_file_load_from_file(config, config_file, G_KEY_FILE_NONE, NULL);
 
-		g_key_file_set_boolean(config, "general", "check_for_updates_on_startup",
-			check_on_startup);
+        g_key_file_set_boolean(config, "general", "check_for_updates_on_startup",
+            check_on_startup);
 
-		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
-		{
-			/* write config to file */
-			data = g_key_file_to_data(config, NULL, NULL);
-			utils_write_file(config_file, data);
-			g_free(data);
-		}
+        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
+        {
+            /* write config to file */
+            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);
-	}
+        g_free(config_dir);
+        g_key_file_free(config);
+    }
 }
 
 
 GtkWidget *
 plugin_configure(GtkDialog * dialog)
 {
-	GtkWidget   *vbox;
-	vbox = gtk_vbox_new(FALSE, 6);
+    GtkWidget   *vbox;
+    vbox = gtk_vbox_new(FALSE, 6);
 
-	config_widgets.run_on_startup = gtk_check_button_new_with_label(
-		_("Run updatecheck on startup"));
+    config_widgets.run_on_startup = gtk_check_button_new_with_label(
+        _("Run updatecheck on startup"));
 
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_widgets.run_on_startup),
-		check_on_startup);
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_widgets.run_on_startup),
+        check_on_startup);
 
-	gtk_box_pack_start(GTK_BOX(vbox), config_widgets.run_on_startup, FALSE, FALSE, 2);
-	gtk_widget_show_all(vbox);
-	g_signal_connect(dialog, "response", G_CALLBACK(on_configure_response), NULL);
-	return vbox;
+    gtk_box_pack_start(GTK_BOX(vbox), config_widgets.run_on_startup, FALSE, FALSE, 2);
+    gtk_widget_show_all(vbox);
+    g_signal_connect(dialog, "response", G_CALLBACK(on_configure_response), NULL);
+    return vbox;
 }
 
 
 /* Registering of callbacks for Geany events */
 PluginCallback plugin_callbacks[] =
 {
-	{ "geany-startup-complete", (GCallback) &on_geany_startup_complete, FALSE, NULL },
-	{ NULL, NULL, FALSE, NULL }
+    { "geany-startup-complete", (GCallback) &on_geany_startup_complete, FALSE, NULL },
+    { NULL, NULL, FALSE, NULL }
 };
 
 
 static void init_configuration()
 {
-	GKeyFile *config = g_key_file_new();
+    GKeyFile *config = g_key_file_new();
 
-	/* loading configurations from file ...*/
-	config_file = g_strconcat(geany->app->configdir, G_DIR_SEPARATOR_S,
-	"plugins", G_DIR_SEPARATOR_S,
-	"updatechecker", G_DIR_SEPARATOR_S, "general.conf", NULL);
+    /* loading configurations from file ...*/
+    config_file = g_strconcat(geany->app->configdir, G_DIR_SEPARATOR_S,
+    "plugins", G_DIR_SEPARATOR_S,
+    "updatechecker", G_DIR_SEPARATOR_S, "general.conf", NULL);
 
-	/* ... and Initialising options from config file */
-	g_key_file_load_from_file(config, config_file, G_KEY_FILE_NONE, NULL);
+    /* ... and Initialising options from config file */
+    g_key_file_load_from_file(config, config_file, G_KEY_FILE_NONE, NULL);
 
-	check_on_startup = utils_get_setting_boolean(config, "general",
-		"check_for_updates_on_startup", FALSE);
+    check_on_startup = utils_get_setting_boolean(config, "general",
+        "check_for_updates_on_startup", FALSE);
 
-	g_key_file_free(config);
+    g_key_file_free(config);
 }
 
 
 void plugin_init(GeanyData *data)
 {
-	init_configuration();
+    init_configuration();
+    /* soup uses threads but it seems to don't initialize the thread system
+     * Work around baesed on a patch Colomban Wendling and Matthew Brush */
+
+    if (! g_thread_supported ())
+    {
+        g_thread_init (NULL);
+    }
+
     main_menu_item = gtk_menu_item_new_with_mnemonic(_("Check for Updates"));
     gtk_widget_show(main_menu_item);
     gtk_container_add(GTK_CONTAINER(geany->main_widgets->tools_menu),


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Plugins-Commits mailing list