X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ffiles.c;h=4c5a366138a27fb6df88a3ce6a2688ce4e82c93b;hb=746d91a67b5059c607e8e6bd0453e6e0738ffe45;hp=11eba8f4b95dd2c3cd72b620d64c9ae8e388381e;hpb=91b5e8017245999d9f72b5cd8089597eb827666e;p=rocksndiamonds.git diff --git a/src/files.c b/src/files.c index 11eba8f4..4c5a3661 100644 --- a/src/files.c +++ b/src/files.c @@ -8401,7 +8401,7 @@ void SaveScoreTape(int nr) char *filename = getScoreTapeFilename(tape.score_tape_basename, nr); // used instead of "leveldir_current->subdir" (for network games) - InitScoreDirectory(levelset.identifier); + InitScoreTapeDirectory(levelset.identifier, nr); SaveTapeExt(filename); } @@ -9114,20 +9114,28 @@ static boolean SetRequest_ApiGetScore(struct HttpRequest *request, request->method = API_SERVER_METHOD; request->uri = API_SERVER_URI_GET; + char *levelset_identifier = getEscapedJSON(leveldir_current->identifier); + char *levelset_name = getEscapedJSON(leveldir_current->name); + snprintf(request->body, MAX_HTTP_BODY_SIZE, "{\n" "%s" " \"game_version\": \"%s\",\n" " \"game_platform\": \"%s\",\n" " \"levelset_identifier\": \"%s\",\n" + " \"levelset_name\": \"%s\",\n" " \"level_nr\": \"%d\"\n" "}\n", getPasswordJSON(setup.api_server_password), getProgramRealVersionString(), getProgramPlatformString(), - levelset.identifier, + levelset_identifier, + levelset_name, level_nr); + checked_free(levelset_identifier); + checked_free(levelset_name); + ConvertHttpRequestBodyToServerEncoding(request); return TRUE; @@ -9243,6 +9251,10 @@ static void ApiGetScore_HttpRequestExt(struct HttpRequest *request, if (!HTTP_SUCCESS(response->status_code)) { + // do not show error message if no scores found for this level set + if (response->status_code == 404) + return; + Error("server failed to handle request: %d %s", response->status_code, response->status_text); @@ -9268,12 +9280,16 @@ static int ApiGetScoreThread(void *data_raw) struct HttpRequest *request = checked_calloc(sizeof(struct HttpRequest)); struct HttpResponse *response = checked_calloc(sizeof(struct HttpResponse)); + program.api_thread_count++; + #if defined(PLATFORM_EMSCRIPTEN) Emscripten_ApiGetScore_HttpRequest(request, data_raw); #else ApiGetScore_HttpRequest(request, response, data_raw); #endif + program.api_thread_count--; + checked_free(request); checked_free(response); @@ -9517,6 +9533,7 @@ static boolean SetRequest_ApiAddScore(struct HttpRequest *request, " \"level_nr\": \"%d\",\n" " \"level_name\": \"%s\",\n" " \"level_author\": \"%s\",\n" + " \"use_step_counter\": \"%d\",\n" " \"rate_time_over_score\": \"%d\",\n" " \"player_name\": \"%s\",\n" " \"player_uuid\": \"%s\",\n" @@ -9538,6 +9555,7 @@ static boolean SetRequest_ApiAddScore(struct HttpRequest *request, level_nr, level_name, level_author, + level.use_step_counter, level.rate_time_over_score, player_name, player_uuid, @@ -9665,12 +9683,16 @@ static int ApiAddScoreThread(void *data_raw) struct HttpRequest *request = checked_calloc(sizeof(struct HttpRequest)); struct HttpResponse *response = checked_calloc(sizeof(struct HttpResponse)); + program.api_thread_count++; + #if defined(PLATFORM_EMSCRIPTEN) Emscripten_ApiAddScore_HttpRequest(request, data_raw); #else ApiAddScore_HttpRequest(request, response, data_raw); #endif + program.api_thread_count--; + checked_free(request); checked_free(response); @@ -9709,12 +9731,17 @@ void LoadLocalAndServerScore(int nr, boolean download_score) { int last_added_local = scores.last_added_local; - LoadScore(nr); + // needed if only showing server scores + setScoreInfoToDefaults(); + + if (!strEqual(setup.scores_in_highscore_list, STR_SCORES_TYPE_SERVER_ONLY)) + LoadScore(nr); // restore last added local score entry (before merging server scores) scores.last_added = scores.last_added_local = last_added_local; - if (setup.use_api_server && !setup.only_show_local_scores) + if (setup.use_api_server && + !strEqual(setup.scores_in_highscore_list, STR_SCORES_TYPE_LOCAL_ONLY)) { // load server scores from cache file and trigger update from server LoadServerScore(nr, download_score); @@ -9915,8 +9942,8 @@ static struct TokenInfo global_setup_tokens[] = &setup.show_undo_redo_buttons, "show_undo_redo_buttons" }, { - TYPE_SWITCH, - &setup.only_show_local_scores, "only_show_local_scores" + TYPE_STRING, + &setup.scores_in_highscore_list, "scores_in_highscore_list" }, { TYPE_STRING, @@ -10611,7 +10638,7 @@ static void setSetupInfoToDefaults(struct SetupInfo *si) si->small_game_graphics = FALSE; si->show_load_save_buttons = FALSE; si->show_undo_redo_buttons = FALSE; - si->only_show_local_scores = FALSE; + si->scores_in_highscore_list = getStringCopy(STR_SCORES_TYPE_DEFAULT); si->graphics_set = getStringCopy(GFX_CLASSIC_SUBDIR); si->sounds_set = getStringCopy(SND_CLASSIC_SUBDIR);