X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=dfc08900a8ddc82ea290cc69df41ea07be223741;hb=c1d626add6662c6ffa9ca5c00be53b11684195cf;hp=e3294c1bd8691edd0fb4c6df8992e030b485c860;hpb=ec32314a7ce9f3ac478d7fdecf85ed949816bdc1;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index e3294c1b..dfc08900 100644 --- a/src/screens.c +++ b/src/screens.c @@ -282,6 +282,8 @@ static void MapScreenTreeGadgets(TreeInfo *); static void UpdateScreenMenuGadgets(int, boolean); +static boolean OfferUploadTapes(void); + static struct GadgetInfo *screen_gadget[NUM_SCREEN_GADGETS]; static int info_mode = INFO_MODE_MAIN; @@ -6651,6 +6653,11 @@ static void execGadgetNetworkServer(void) ClickOnGadget(gi, MB_LEFTBUTTON); } +static void execOfferUploadTapes(void) +{ + OfferUploadTapes(); +} + static void ToggleNetworkModeIfNeeded(void) { int font_title = FONT_TITLE_1; @@ -6868,8 +6875,9 @@ static struct TokenInfo setup_info_game[] = { TYPE_PLAYER, &setup.network_player_nr,"Preferred Network Player:" }, { TYPE_TEXT_INPUT, execGadgetNetworkServer, "Network Server Hostname:" }, { TYPE_STRING, &network_server_text, "" }, - { TYPE_SWITCH, &setup.api_server, "Use Highscore Server:" }, + { TYPE_SWITCH, &setup.use_api_server, "Use Highscore Server:" }, { TYPE_SWITCH, &setup.only_show_local_scores, "Only Show Local Scores:" }, + { TYPE_ENTER_LIST, execOfferUploadTapes, "Upload All Tapes to Server" }, { TYPE_SWITCH, &setup.multiple_users, "Multiple Users/Teams:" }, { TYPE_YES_NO, &setup.input_on_focus, "Only Move Focussed Player:" }, { TYPE_SWITCH, &setup.time_limit, "Time Limit:" }, @@ -7473,8 +7481,8 @@ static void changeSetupValue(int screen_pos, int setup_info_pos_raw, int dx) ToggleNetworkModeIfNeeded(); // API server mode may have changed at this point - if (si->value == &setup.api_server) - runtime.api_server = setup.api_server; + if (si->value == &setup.use_api_server) + runtime.use_api_server = setup.use_api_server; // game speed list may have changed at this point if (si->value == &setup.game_speed_extended) @@ -9829,7 +9837,7 @@ void DrawScreenAfterAddingSet(char *tree_subdir_new, int tree_type) } } -static void UploadTapes(void) +static int UploadTapes(void) { SetGameStatus(GAME_MODE_LOADING); @@ -9846,7 +9854,7 @@ static void UploadTapes(void) global.autoplay_leveldir = "ALL"; global.autoplay_all = TRUE; - AutoPlayTapes(); + int num_tapes_uploaded = AutoPlayTapes(); global.autoplay_mode = AUTOPLAY_MODE_NONE; global.autoplay_leveldir = NULL; @@ -9855,27 +9863,55 @@ static void UploadTapes(void) SetGameStatus(GAME_MODE_MAIN); DrawMainMenu(); + + return num_tapes_uploaded; +} + +static boolean OfferUploadTapes(void) +{ + if (!Request("Upload all your tapes to the high score server now?", REQ_ASK)) + return FALSE; + + int num_tapes_uploaded = UploadTapes(); + char message[100]; + + sprintf(message, "%d tapes uploaded!", num_tapes_uploaded); + + Request(message, REQ_CONFIRM); + + // after all tapes have been uploaded, remove entry from setup menu + setup.provide_uploading_tapes = FALSE; + setHideSetupEntry(execOfferUploadTapes); + + SaveSetup(); + + return (num_tapes_uploaded > 0); } void CheckUploadTapes(void) { + if (!setup.provide_uploading_tapes) + setHideSetupEntry(execOfferUploadTapes); + if (!setup.ask_for_uploading_tapes) return; if (directoryExists(getTapeDir(NULL))) { - if (Request("Upload all your tapes to the high score server now?", REQ_ASK)) - { - UploadTapes(); + boolean tapes_uploaded = OfferUploadTapes(); - Request("All tapes uploaded!", REQ_CONFIRM); - } - else - { - Request("You can upload your tapes from the setup menu later!", REQ_CONFIRM); - } + if (!tapes_uploaded) + Request("You can upload your tapes from the setup menu later!", + REQ_CONFIRM); + } + else + { + // if tapes directory does not exist yet, never offer uploading all tapes + setup.provide_uploading_tapes = FALSE; + setHideSetupEntry(execOfferUploadTapes); } + // after asking for uploading all tapes once, do not ask again setup.ask_for_uploading_tapes = FALSE; SaveSetup();