From 2e2694e0fbbad5940f2c0029c89623ecdc68d277 Mon Sep 17 00:00:00 2001 From: Simon Robertshaw Date: Fri, 19 Aug 2011 23:44:09 +0100 Subject: [PATCH] Revert "Move version check out of main()" This reverts commit 97da8593d9d850e46d4042028b05955cd118ebc8. --- includes/update.h | 7 --- src/main.c | 143 +++++++++++++++++++++++++++++++++++++++++-- src/update.c | 153 ---------------------------------------------- 3 files changed, 137 insertions(+), 166 deletions(-) diff --git a/includes/update.h b/includes/update.h index 04a112535..2f7f38be7 100755 --- a/includes/update.h +++ b/includes/update.h @@ -20,16 +20,9 @@ #ifndef UPDATE_H #define UPDATE_H -#include - -extern int version_check; - char *exe_name(void); int update_start(char *data, int len); int update_finish(void); void update_cleanup(void); -void update_finalize(pixel *vid_buf); -void update_notify_ui_draw(pixel *vid_buf); -void update_notify_ui_process(pixel *vid_buf, int mb, int mbq, int mx, int my); #endif diff --git a/src/main.c b/src/main.c index 7f048954a..82968904f 100644 --- a/src/main.c +++ b/src/main.c @@ -164,6 +164,10 @@ typedef struct pixel *vid; } upstruc; +#ifdef BETA +static const char *old_ver_msg_beta = "A new beta is available - click here!"; +#endif +static const char *old_ver_msg = "A new version is available - click here!"; char new_message_msg[255]; float mheat = 0.0f; @@ -1408,6 +1412,30 @@ char *tag = "(c) 2008-9 Stanislaw Skowronek"; int itc = 0; char itc_msg[64] = "[?]"; +char my_uri[] = "http://" SERVER "/Update.api?Action=Download&Architecture=" +#if defined WIN32 + "Windows32" +#elif defined LIN32 + "Linux32" +#elif defined LIN64 + "Linux64" +#elif defined MACOSX + "MacOSX" +#else + "Unknown" +#endif + "&InstructionSet=" +#if defined X86_SSE3 + "SSE3" +#elif defined X86_SSE2 + "SSE2" +#elif defined X86_SSE + "SSE" +#else + "SSE" +#endif + ; + int set_scale(int scale, int kiosk){ int old_scale = sdl_scale, old_kiosk = kiosk_enable; sdl_scale = scale; @@ -1587,9 +1615,9 @@ int main(int argc, char *argv[]) int currentTime = 0; int FPS = 0, pastFPS = 0, elapsedTime = 0; void *http_ver_check, *http_session_check = NULL; - char *check_data=NULL, *tmp; + char *ver_data=NULL, *check_data=NULL, *tmp; //char console_error[255] = ""; - int result, i, j, bq, fire_fc=0, do_s_check=0, http_ret=0,http_s_ret=0, new_message_len=0; + int result, i, j, bq, fire_fc=0, do_check=0, do_s_check=0, old_version=0, http_ret=0,http_s_ret=0, major, minor, old_ver_len, new_message_len=0; #ifdef INTERNAL int vs = 0; #endif @@ -1640,6 +1668,19 @@ int main(int argc, char *argv[]) #ifdef MT numCores = core_count(); +#endif +//TODO: Move out version stuff +#ifdef BETA + if (is_beta) + { + old_ver_len = textwidth((char*)old_ver_msg_beta); + } + else + { + old_ver_len = textwidth((char*)old_ver_msg); + } +#else + old_ver_len = textwidth((char*)old_ver_msg); #endif menu_count(); parts = calloc(sizeof(particle), NPART); @@ -1732,6 +1773,7 @@ int main(int argc, char *argv[]) return 1; } + http_ver_check = http_async_req_start(NULL, "http://" SERVER "/Update.api?Action=CheckVersion", NULL, 0, 0); if (svf_login) { http_session_check = http_async_req_start(NULL, "http://" SERVER "/Login.api?Action=CheckSession", NULL, 0, 0); http_auth_headers(http_session_check, svf_user_id, NULL, svf_session_id); @@ -1873,6 +1915,28 @@ int main(int argc, char *argv[]) draw_debug_info(vid_buf, lm, lx, ly, x, y, line_x, line_y); } + if (http_ver_check) + { + if (!do_check && http_async_req_status(http_ver_check)) + { + ver_data = http_async_req_stop(http_ver_check, &http_ret, NULL); + if (http_ret==200 && ver_data) + { +#ifdef BETA + if (sscanf(ver_data, "%d.%d.%d", &major, &minor, &is_beta)==3) + if (major>SAVE_VERSION || (major==SAVE_VERSION && minor>MINOR_VERSION) || (major==SAVE_VERSION && is_beta == 0)) + old_version = 1; +#else + if (sscanf(ver_data, "%d.%d", &major, &minor)==2) + if (major>SAVE_VERSION || (major==SAVE_VERSION && minor>MINOR_VERSION)) + old_version = 1; +#endif + free(ver_data); + } + http_ver_check = NULL; + } + do_check = (do_check+1) & 15; + } if (http_session_check) { if (!do_s_check && http_async_req_status(http_session_check)) @@ -2587,9 +2651,60 @@ int main(int argc, char *argv[]) { open_link("http://" SERVER "/Conversations.html"); } - if (update_flag) update_finalize(vid_buf); - if (version_check) update_notify_ui_process(vid_buf, b, bq, x, y); + if (update_flag) + { + info_box(vid_buf, "Finalizing update..."); + if (last_major>SAVE_VERSION || (last_major==SAVE_VERSION && last_minor>=MINOR_VERSION)) + { + update_cleanup(); + error_ui(vid_buf, 0, "Update failed - try downloading a new version."); + } + else + { + if (update_finish()) + error_ui(vid_buf, 0, "Update failed - try downloading a new version."); + else + info_ui(vid_buf, "Update success", "You have successfully updated the Powder Toy!"); + } + update_flag = 0; + } + if (b && !bq && x>=(XRES-19-old_ver_len)*sdl_scale && + x<=(XRES-14)*sdl_scale && y>=(YRES-22)*sdl_scale && y<=(YRES-9)*sdl_scale && old_version) + { + tmp = malloc(64); +#ifdef BETA + if (is_beta) + { + sprintf(tmp, "Your version: %d (Beta %d), new version: %d (Beta %d).", SAVE_VERSION, MINOR_VERSION, major, minor); + } + else + { + sprintf(tmp, "Your version: %d (Beta %d), new version: %d.%d.", SAVE_VERSION, MINOR_VERSION, major, minor); + } +#else + sprintf(tmp, "Your version: %d.%d, new version: %d.%d.", SAVE_VERSION, MINOR_VERSION, major, minor); +#endif + if (confirm_ui(vid_buf, "Do you want to update The Powder Toy?", tmp, "Update")) + { + free(tmp); + tmp = download_ui(vid_buf, my_uri, &i); + if (tmp) + { + save_presets(1); + if (update_start(tmp, i)) + { + update_cleanup(); + save_presets(0); + error_ui(vid_buf, 0, "Update failed - try downloading a new version."); + } + else + return 0; + } + } + else + free(tmp); + } if (y>=sdl_scale*(YRES+(MENUSIZE-20))) //mouse checks for buttons at the bottom, to draw mouseover texts { if (x>=189*sdl_scale && x<=202*sdl_scale && svf_login && svf_open && svf_myvote==0) @@ -3235,8 +3350,24 @@ int main(int argc, char *argv[]) drawtext(vid_buf, 16, 20, it_msg, 255, 255, 255, it>51?255:it*5); } - if (version_check) update_notify_ui_draw(vid_buf); - + if (old_version) + { + clearrect(vid_buf, XRES-21-old_ver_len, YRES-24, old_ver_len+9, 17); +#ifdef BETA + if (is_beta) + { + drawtext(vid_buf, XRES-16-old_ver_len, YRES-19, old_ver_msg_beta, 255, 216, 32, 255); + } + else + { + drawtext(vid_buf, XRES-16-old_ver_len, YRES-19, old_ver_msg, 255, 216, 32, 255); + } +#else + drawtext(vid_buf, XRES-16-old_ver_len, YRES-19, old_ver_msg, 255, 216, 32, 255); +#endif + drawrect(vid_buf, XRES-19-old_ver_len, YRES-22, old_ver_len+5, 13, 255, 216, 32, 255); + } + if (svf_messages) { sprintf(new_message_msg, "You have %d new message%s, Click to view", svf_messages, (svf_messages>1)?"s":""); diff --git a/src/update.c b/src/update.c index 5d93c118f..0e5be48b5 100644 --- a/src/update.c +++ b/src/update.c @@ -38,46 +38,8 @@ #include #endif -#include -#include -#include -#include #include -int version_check = 1; -int version_check_http_counter = 0; -void *version_check_http = NULL; -int version_check_major = 0, version_check_minor = 0, version_check_isbeta = 0; -int old_ver_len = 0; -#ifdef BETA -static const char *old_ver_msg_beta = "A new beta is available - click here!"; -#endif -static const char *old_ver_msg = "A new version is available - click here!"; - -char update_uri[] = "http://" SERVER "/Update.api?Action=Download&Architecture=" -#if defined WIN32 - "Windows32" -#elif defined LIN32 - "Linux32" -#elif defined LIN64 - "Linux64" -#elif defined MACOSX - "MacOSX" -#else - "Unknown" -#endif - "&InstructionSet=" -#if defined X86_SSE3 - "SSE3" -#elif defined X86_SSE2 - "SSE2" -#elif defined X86_SSE - "SSE" -#else - "SSE" -#endif - ; - char *exe_name(void) { #if defined WIN32 @@ -241,118 +203,3 @@ void update_cleanup(void) update_finish(); #endif } - -void update_notify_ui_draw(pixel *vid_buf) -{ - if (version_check==2) - { - clearrect(vid_buf, XRES-21-old_ver_len, YRES-24, old_ver_len+9, 17); -#ifdef BETA - if (version_check_isbeta) - { - drawtext(vid_buf, XRES-16-old_ver_len, YRES-19, old_ver_msg_beta, 255, 216, 32, 255); - } - else - { - drawtext(vid_buf, XRES-16-old_ver_len, YRES-19, old_ver_msg, 255, 216, 32, 255); - } -#else - drawtext(vid_buf, XRES-16-old_ver_len, YRES-19, old_ver_msg, 255, 216, 32, 255); -#endif - drawrect(vid_buf, XRES-19-old_ver_len, YRES-22, old_ver_len+5, 13, 255, 216, 32, 255); - } -} - -void update_notify_ui_process(pixel *vid_buf, int mb, int mbq, int mx, int my) -{ - if (version_check==1 && !version_check_http) - version_check_http = http_async_req_start(NULL, "http://" SERVER "/Update.api?Action=CheckVersion", NULL, 0, 0); - if (version_check_http) - { - if (!version_check_http_counter && http_async_req_status(version_check_http)) - { - int http_ret; - char *ver_data; - ver_data = http_async_req_stop(version_check_http, &http_ret, NULL); - if (http_ret==200 && ver_data) - { -#ifdef BETA - if (sscanf(ver_data, "%d.%d.%d", &version_check_major, &version_check_minor, &version_check_isbeta)==3) - if (version_check_major>SAVE_VERSION || - (version_check_major==SAVE_VERSION && version_check_minor>MINOR_VERSION) || - (version_check_major==SAVE_VERSION && version_check_isbeta == 0)) - version_check = 2; -#else - if (sscanf(ver_data, "%d.%d", &version_check_major, &version_check_minor)==2) - if (version_check_major>SAVE_VERSION || (version_check_major==SAVE_VERSION && version_check_minor>MINOR_VERSION)) - version_check = 2; -#endif -#ifdef BETA - if (version_check_isbeta) old_ver_len = textwidth(old_ver_msg_beta); - else old_ver_len = textwidth(old_ver_msg); -#else - old_ver_len = textwidth(old_ver_msg); -#endif - } - if (ver_data) free(ver_data); - version_check_http = NULL; - } - version_check_http_counter = (version_check_http_counter+1) & 15; - } - if (mb && !mbq && mx>=(XRES-19-old_ver_len) && - mx<=(XRES-14) && my>=(YRES-22) && my<=(YRES-9) && version_check==2) - { - char *tmp = malloc(64); -#ifdef BETA - if (version_check_isbeta) - { - sprintf(tmp, "Your version: %d (Beta %d), new version: %d (Beta %d).", SAVE_VERSION, MINOR_VERSION, version_check_major, version_check_minor); - } - else - { - sprintf(tmp, "Your version: %d (Beta %d), new version: %d.%d.", SAVE_VERSION, MINOR_VERSION, version_check_major, version_check_minor); - } -#else - sprintf(tmp, "Your version: %d.%d, new version: %d.%d.", SAVE_VERSION, MINOR_VERSION, version_check_major, version_check_minor); -#endif - if (confirm_ui(vid_buf, "Do you want to update The Powder Toy?", tmp, "Update")) - { - int i; - free(tmp); - tmp = download_ui(vid_buf, update_uri, &i); - if (tmp) - { - save_presets(1); - if (update_start(tmp, i)) - { - update_cleanup(); - save_presets(0); - error_ui(vid_buf, 0, "Update failed - try downloading a new version."); - } - else - exit(0); - } - } - else - free(tmp); - } -} - -void update_finalize(pixel *vid_buf) -{ - if (!update_flag) return; - info_box(vid_buf, "Finalizing update..."); - if (last_major>SAVE_VERSION || (last_major==SAVE_VERSION && last_minor>=MINOR_VERSION)) - { - update_cleanup(); - error_ui(vid_buf, 0, "Update failed - try downloading a new version."); - } - else - { - if (update_finish()) - error_ui(vid_buf, 0, "Update failed - try downloading a new version."); - else - info_ui(vid_buf, "Update success", "You have successfully updated the Powder Toy!"); - } - update_flag = 0; -}