- // used instead of "leveldir_current->subdir" (for network games)
- InitScoreCacheDirectory(levelset.identifier);
-
- if (!(file = fopen(filename, MODE_WRITE)))
- {
- Warn("cannot save score cache file '%s'", filename);
-
- return;
- }
-
- for (i = 0; i < response->body_size; i++)
- fputc(response->body[i], file);
-
- fclose(file);
-
- SetFilePermissions(filename, PERMS_PRIVATE);
-
- server_scores.updated = TRUE;
-}
-
-static void DownloadServerScoreToCache(int nr)
-{
- struct HttpRequest *request = checked_calloc(sizeof(struct HttpRequest));
- struct HttpResponse *response = checked_calloc(sizeof(struct HttpResponse));
-
- DownloadServerScoreToCacheExt(request, response, nr);
-
- checked_free(request);
- checked_free(response);
-}
-
-static int DownloadServerScoreToCacheThread(void *data)
-{
- DownloadServerScoreToCache(*(int *)data);
-
- return 0;
-}
-
-static void DownloadServerScoreToCacheAsThread(int nr)
-{
- ExecuteAsThread(DownloadServerScoreToCacheThread,
- "DownloadServerScoreToCache", nr,
- "download scores from server");
-}
-
-static void LoadServerScoreFromCache(int nr)
-{
- struct ScoreEntry score_entry;
- struct
- {
- void *value;
- boolean is_string;
- int string_size;
- }
- score_mapping[] =
- {
- { &score_entry.score, FALSE, 0 },
- { &score_entry.time, FALSE, 0 },
- { score_entry.name, TRUE, MAX_PLAYER_NAME_LEN },
- { score_entry.tape_basename, TRUE, MAX_FILENAME_LEN },
-
- { NULL, FALSE, 0 }
- };
- char *filename = getScoreCacheFilename(nr);
- SetupFileHash *score_hash = loadSetupFileHash(filename);
- int i, j;
-
- server_scores.num_entries = 0;
-
- if (score_hash == NULL)
- return;
-
- for (i = 0; i < MAX_SCORE_ENTRIES; i++)
- {
- score_entry = server_scores.entry[i];
-
- for (j = 0; score_mapping[j].value != NULL; j++)
- {
- char token[10];
-
- sprintf(token, "%02d.%d", i, j);