aboutsummaryrefslogtreecommitdiff
path: root/src/update_check.c
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2010-05-28 08:42:45 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2010-05-28 08:42:45 +0000
commit3dc9b18af690611442f591bc4badc7d86b241117 (patch)
treede9e3f60ebca0181d635776c8d6851a8addcab6e /src/update_check.c
parent7721162ad8e0cd3e817b4bea7c47d3523a1bd5d0 (diff)
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
Diffstat (limited to 'src/update_check.c')
-rw-r--r--src/update_check.c82
1 files changed, 54 insertions, 28 deletions
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, &micro,
- &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, &micro,
- &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, &micro,
+ &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, &micro,
+ &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();