changed interface for functions to auto-play tapes
[rocksndiamonds.git] / src / screens.c
index a63aa3339f8d3ec1d70c7d3cd2cab0b0f5432d9d..cfab48e7250f1c5888648fbe8d267c65fa748269 100644 (file)
@@ -4035,6 +4035,101 @@ void HandleInfoScreen(int mx, int my, int dx, int dy, int button)
 }
 
 
+// ============================================================================
+// change name functions
+// ============================================================================
+
+static void RenamePlayerOnServerExt(struct HttpRequest *request,
+                                   struct HttpResponse *response,
+                                   char *player_name_raw,
+                                   char *player_uuid_raw)
+{
+  request->hostname = setup.api_server_hostname;
+  request->port     = API_SERVER_PORT;
+  request->method   = API_SERVER_METHOD;
+  request->uri      = API_SERVER_URI_RENAME;
+
+  char *player_name = getEscapedJSON(player_name_raw);
+  char *player_uuid = getEscapedJSON(player_uuid_raw);
+
+  snprintf(request->body, MAX_HTTP_BODY_SIZE,
+          "{\n"
+          "%s"
+          "  \"game_version\":         \"%s\",\n"
+          "  \"name\":                 \"%s\",\n"
+          "  \"uuid\":                 \"%s\"\n"
+          "}\n",
+          getPasswordJSON(setup.api_server_password),
+          getProgramRealVersionString(),
+          player_name,
+          player_uuid);
+
+  checked_free(player_name);
+  checked_free(player_uuid);
+
+  ConvertHttpRequestBodyToServerEncoding(request);
+
+  if (!DoHttpRequest(request, response))
+  {
+    Error("HTTP request failed: %s", GetHttpError());
+
+    return;
+  }
+
+  if (!HTTP_SUCCESS(response->status_code))
+  {
+    Error("server failed to handle request: %d %s",
+         response->status_code,
+         response->status_text);
+
+    return;
+  }
+}
+
+static void RenamePlayerOnServer(char *player_name, char *player_uuid)
+{
+  struct HttpRequest *request = checked_calloc(sizeof(struct HttpRequest));
+  struct HttpResponse *response = checked_calloc(sizeof(struct HttpResponse));
+
+  RenamePlayerOnServerExt(request, response, player_name, player_uuid);
+
+  checked_free(request);
+  checked_free(response);
+}
+
+struct RenamePlayerOnServerThreadData
+{
+  char *player_name;
+  char *player_uuid;
+};
+
+static int RenamePlayerOnServerThread(void *data_raw)
+{
+  struct RenamePlayerOnServerThreadData *data = data_raw;
+
+  RenamePlayerOnServer(data->player_name, data->player_uuid);
+
+  checked_free(data->player_name);
+  checked_free(data->player_uuid);
+  checked_free(data);
+
+  return 0;
+}
+
+static void RenamePlayerOnServerAsThread(void)
+{
+  struct RenamePlayerOnServerThreadData *data =
+    checked_malloc(sizeof(struct RenamePlayerOnServerThreadData));
+
+  data->player_name = getStringCopy(setup.player_name);
+  data->player_uuid = getStringCopy(setup.player_uuid);
+
+  ExecuteAsThread(RenamePlayerOnServerThread,
+                 "RenamePlayerOnServer", data,
+                 "rename player on server");
+}
+
+
 // ============================================================================
 // type name functions
 // ============================================================================
@@ -4172,6 +4267,9 @@ static void setTypeNameValues(char *name, struct TextPosInfo *pos,
   // save setup of edited user
   SaveSetup();
 
+  // change name of edited user on score server
+  RenamePlayerOnServerAsThread();
+
   if (game_status == GAME_MODE_PSEUDO_TYPENAMES || reset_setup)
   {
     if (reset_setup)
@@ -6794,7 +6892,8 @@ static struct TokenInfo setup_info_game[] =
 #endif
   { TYPE_ENTER_LIST, execSetupChooseSnapshotMode,"Game Engine Snapshot Mode:" },
   { TYPE_STRING,       &snapshot_mode_text,    ""                      },
-  { TYPE_SWITCH,       &setup.show_snapshot_buttons,"Show Snapshot Buttons:" },
+  { TYPE_SWITCH,       &setup.show_load_save_buttons,"Show Load/Save Buttons:" },
+  { TYPE_SWITCH,       &setup.show_undo_redo_buttons,"Show Undo/Redo Buttons:" },
   { TYPE_EMPTY,                NULL,                   ""                      },
   { TYPE_LEAVE_MENU,   execSetupMain,          "Back"                  },
 
@@ -8935,10 +9034,10 @@ void HandleGameActions(void)
   if (game_status != GAME_MODE_PLAYING)
     return;
 
-  GameActions();       // main game loop
+  GameActions();               // main game loop
 
   if (tape.auto_play && !tape.playing)
-    AutoPlayTapes();   // continue automatically playing next tape
+    AutoPlayTapesContinue();   // continue automatically playing next tape
 }