X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ffiles.c;h=0b5ff039a98f385270e469ca2bd459eae6c64fa8;hb=4cc589984c70d83f67e61fcfa6e7d9cf0e03347c;hp=fab3df37653d139a61b68d0b52aa39e09c306e5a;hpb=60ec6872a4ccb39ba9df74a77826c3bccea69006;p=rocksndiamonds.git diff --git a/src/files.c b/src/files.c index fab3df37..0b5ff039 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) - InitScoreTapeDirectory(levelset.identifier, nr); + InitScoreDirectory(levelset.identifier); 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; @@ -9432,11 +9440,13 @@ static char *get_file_base64(char *filename) struct ApiAddScoreThreadData { int level_nr; + boolean tape_saved; char *score_tape_filename; struct ScoreEntry score_entry; }; -static void *CreateThreadData_ApiAddScore(int nr, char *score_tape_filename) +static void *CreateThreadData_ApiAddScore(int nr, boolean tape_saved, + char *score_tape_filename) { struct ApiAddScoreThreadData *data = checked_malloc(sizeof(struct ApiAddScoreThreadData)); @@ -9446,6 +9456,7 @@ static void *CreateThreadData_ApiAddScore(int nr, char *score_tape_filename) score_tape_filename = getScoreTapeFilename(score_entry->tape_basename, nr); data->level_nr = nr; + data->tape_saved = tape_saved; data->score_entry = *score_entry; data->score_tape_filename = getStringCopy(score_tape_filename); @@ -9466,6 +9477,7 @@ static boolean SetRequest_ApiAddScore(struct HttpRequest *request, struct ApiAddScoreThreadData *data = data_raw; struct ScoreEntry *score_entry = &data->score_entry; char *score_tape_filename = data->score_tape_filename; + boolean tape_saved = data->tape_saved; int level_nr = data->level_nr; request->hostname = setup.api_server_hostname; @@ -9519,6 +9531,7 @@ static boolean SetRequest_ApiAddScore(struct HttpRequest *request, " \"score\": \"%d\",\n" " \"time\": \"%d\",\n" " \"tape_basename\": \"%s\",\n" + " \"tape_saved\": \"%d\",\n" " \"tape\": \"%s\"\n" "}\n", getPasswordJSON(setup.api_server_password), @@ -9539,6 +9552,7 @@ static boolean SetRequest_ApiAddScore(struct HttpRequest *request, score_entry->score, score_entry->time, score_entry->tape_basename, + tape_saved, tape_base64); checked_free(tape_base64); @@ -9671,30 +9685,32 @@ static int ApiAddScoreThread(void *data_raw) return 0; } -static void ApiAddScoreAsThread(int nr, char *score_tape_filename) +static void ApiAddScoreAsThread(int nr, boolean tape_saved, + char *score_tape_filename) { struct ApiAddScoreThreadData *data = - CreateThreadData_ApiAddScore(nr, score_tape_filename); + CreateThreadData_ApiAddScore(nr, tape_saved, score_tape_filename); ExecuteAsThread(ApiAddScoreThread, "ApiAddScore", data, "upload score to server"); } -void SaveServerScore(int nr) +void SaveServerScore(int nr, boolean tape_saved) { if (!runtime.use_api_server) return; - ApiAddScoreAsThread(nr, NULL); + ApiAddScoreAsThread(nr, tape_saved, NULL); } -void SaveServerScoreFromFile(int nr, char *score_tape_filename) +void SaveServerScoreFromFile(int nr, boolean tape_saved, + char *score_tape_filename) { if (!runtime.use_api_server) return; - ApiAddScoreAsThread(nr, score_tape_filename); + ApiAddScoreAsThread(nr, tape_saved, score_tape_filename); } void LoadLocalAndServerScore(int nr, boolean download_score)