From 3dc9b18af690611442f591bc4badc7d86b241117 Mon Sep 17 00:00:00 2001 From: hiro Date: Fri, 28 May 2010 08:42:45 +0000 Subject: support DISP_RELEASE / DISP_DEVEL which set displayed new version. git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@2553 ee746299-78ed-0310-b773-934348b2243d --- ChangeLog | 5 ++++ src/update_check.c | 82 +++++++++++++++++++++++++++++++++++------------------- 2 files changed, 59 insertions(+), 28 deletions(-) diff --git a/ChangeLog b/ChangeLog index e33defab..4a426f3d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2010-05-28 + + * src/update_check.c: support DISP_RELEASE / DISP_DEVEL which + set displayed new version. + 2010-05-28 * src/update_check.[ch] diff --git a/src/update_check.c b/src/update_check.c index 7a65cc7c..b5dffeb1 100644 --- a/src/update_check.c +++ b/src/update_check.c @@ -108,7 +108,8 @@ static void parse_version_string(const gchar *ver, gint *major, gint *minor, g_strfreev(vers); } -static void update_dialog(const gchar *new_ver, gboolean manual) +static void update_dialog(const gchar *new_ver, const gchar *disp_ver, + gboolean manual) { gchar buf[1024]; AlertValue val; @@ -116,12 +117,18 @@ static void update_dialog(const gchar *new_ver, gboolean manual) if (!jump_url) update_check_set_jump_url(HOMEPAGE_URI); - if (new_ver) - g_snprintf(buf, sizeof(buf), "%s\n\n%s -> %s", - _("A newer version of Sylpheed has been found.\n" - "Upgrade now?"), - VERSION, new_ver); - else + if (new_ver) { + if (disp_ver) + g_snprintf(buf, sizeof(buf), "%s\n\n%s\n(%s -> %s)", + _("A newer version of Sylpheed has been found.\n" + "Upgrade now?"), + disp_ver, VERSION, new_ver); + else + g_snprintf(buf, sizeof(buf), "%s\n\n%s -> %s", + _("A newer version of Sylpheed has been found.\n" + "Upgrade now?"), + VERSION, new_ver); + } else g_snprintf(buf, sizeof(buf), "%s", _("A newer version of Sylpheed has been found.\n" "Upgrade now?")); @@ -154,9 +161,13 @@ static void update_check_cb(GPid pid, gint status, gpointer data) #endif gboolean result = FALSE; gboolean got_version = FALSE; + gboolean rel_result = FALSE; + gboolean dev_result = FALSE; gboolean show_dialog_always = (gboolean)data; gchar buf[BUFFSIZE]; ssize_t size; + gchar *disp_rel_ver = NULL; + gchar *disp_dev_ver = NULL; debug_print("update_check_cb\n"); @@ -190,28 +201,37 @@ static void update_check_cb(GPid pid, gint status, gpointer data) key = g_strndup(lines[i], p - lines[i]); val = p + 1; - if (!strcmp(key, "RELEASE")) { - parse_version_string(val, &major, &minor, µ, - &extra); - result = compare_version(major, minor, micro, extra, - TRUE, cur_ver_is_release); - } else if (!cur_ver_is_release && !strcmp(key, "DEVEL")) { - parse_version_string(val, &major, &minor, µ, - &extra); - result = compare_version(major, minor, micro, extra, - FALSE, cur_ver_is_release); + if (!disp_rel_ver && !strcmp(key, "DISP_RELEASE")) { + disp_rel_ver = g_strdup(val); + } else if (!cur_ver_is_release && !disp_dev_ver && + !strcmp(key, "DISP_DEVEL")) { + disp_dev_ver = g_strdup(val); } - if (major + minor + micro != 0) - got_version = TRUE; + if (!result) { + if (!strcmp(key, "RELEASE")) { + parse_version_string(val, &major, &minor, µ, + &extra); + result = compare_version(major, minor, micro, extra, + TRUE, cur_ver_is_release); + rel_result = result; + } else if (!cur_ver_is_release && !strcmp(key, "DEVEL")) { + parse_version_string(val, &major, &minor, µ, + &extra); + result = compare_version(major, minor, micro, extra, + FALSE, cur_ver_is_release); + dev_result = result; + } - if (result) { - new_ver = g_strdup_printf("%d.%d.%d%s", major, minor, micro, extra ? extra : ""); - debug_print("update_check: new ver: %s\n", new_ver); - g_free(extra); - g_free(key); - break; + if (major + minor + micro != 0) + got_version = TRUE; + + if (result) { + new_ver = g_strdup_printf("%d.%d.%d%s", major, minor, micro, extra ? extra : ""); + debug_print("update_check: new ver: %s (%s)\n", new_ver, rel_result ? "release version" : "devel version"); + } } + g_free(extra); g_free(key); } @@ -221,9 +241,12 @@ static void update_check_cb(GPid pid, gint status, gpointer data) gdk_threads_enter(); if (!gtkut_window_modal_exist() && !inc_is_active()) { - if (result) - update_dialog(new_ver, show_dialog_always); - else if (show_dialog_always) { + if (result) { + if (rel_result) + update_dialog(new_ver, disp_rel_ver, show_dialog_always); + else + update_dialog(new_ver, disp_dev_ver, show_dialog_always); + } else if (show_dialog_always) { if (got_version) alertpanel_message(_("Information"), _("Sylpheed is already the latest version."), @@ -234,6 +257,9 @@ static void update_check_cb(GPid pid, gint status, gpointer data) } else { debug_print("update_check_cb: modal dialog exists or incorporation is active. Disabling update dialog.\n"); } + + g_free(disp_rel_ver); + g_free(disp_dev_ver); g_free(new_ver); gdk_threads_leave(); -- cgit v1.2.3