improved asking for and uploading tapes to score server
[rocksndiamonds.git] / src / screens.c
index 641b3a13abce20244b84e4a6aef735221892908c..79ed0aa7051ee186d7611ac7d95150b8f64bd8dc 100644 (file)
@@ -1743,6 +1743,9 @@ void DrawMainMenu(void)
   OpenDoor(DOOR_CLOSE_1 | DOOR_OPEN_2);
 
   SyncEmscriptenFilesystem();
+
+  // needed once to upload tapes (after program start or after user change)
+  CheckUploadTapes();
 }
 
 static void gotoTopLevelDir(void)
@@ -2232,9 +2235,13 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
        SaveLevelSetup_LastSeries();
        SaveLevelSetup_SeriesInfo();
 
+#if defined(PLATFORM_EMSCRIPTEN)
+       Request("Close the browser window to quit!", REQ_CONFIRM);
+#else
        if (!setup.ask_on_quit_program ||
            Request("Do you really want to quit?", REQ_ASK | REQ_STAY_CLOSED))
          SetGameStatus(GAME_MODE_QUIT);
+#endif
       }
     }
   }
@@ -4222,8 +4229,7 @@ static int ApiRenamePlayerThread(void *data_raw)
 
 static void ApiRenamePlayerAsThread(void)
 {
-  struct ApiRenamePlayerThreadData *data =
-    CreateThreadData_ApiRenamePlayer();
+  struct ApiRenamePlayerThreadData *data = CreateThreadData_ApiRenamePlayer();
 
   ExecuteAsThread(ApiRenamePlayerThread,
                  "ApiRenamePlayer", data,
@@ -4353,10 +4359,17 @@ static void setTypeNameValues(char *name, struct TextPosInfo *pos,
     // temporarily change active user to edited user
     user.nr = type_name_nr;
 
-    // load setup of edited user (unless creating user with current setup)
-    if (!create_user ||
-       !Request("Use current setup values for the new player?", REQ_ASK))
+    if (create_user &&
+        Request("Use current setup values for the new player?", REQ_ASK))
+    {
+      // use current setup values for new user, but create new player UUID
+      setup.player_uuid = getStringCopy(getUUID());
+    }
+    else
+    {
+      // load setup for existing user (or start with defaults for new user)
       LoadSetup();
+    }
   }
 
   char *setup_filename = getSetupFilename();
@@ -9977,7 +9990,19 @@ static boolean OfferUploadTapes(void)
   int num_tapes_uploaded = UploadTapes();
   char message[100];
 
-  sprintf(message, "%d tapes uploaded!", num_tapes_uploaded);
+  if (num_tapes_uploaded < 0)
+  {
+    Request("Cannot upload tapes to score server!", REQ_CONFIRM);
+
+    return FALSE;
+  }
+
+  if (num_tapes_uploaded == 0)
+    sprintf(message, "No tapes uploaded!");
+  else if (num_tapes_uploaded == 1)
+    sprintf(message, "1 tape uploaded!");
+  else
+    sprintf(message, "%d tapes uploaded!", num_tapes_uploaded);
 
   Request(message, REQ_CONFIRM);
 
@@ -9986,7 +10011,7 @@ static boolean OfferUploadTapes(void)
 
   SaveSetup();
 
-  return (num_tapes_uploaded > 0);
+  return TRUE;
 }
 
 void CheckUploadTapes(void)
@@ -9994,6 +10019,9 @@ void CheckUploadTapes(void)
   if (!setup.ask_for_uploading_tapes)
     return;
 
+  // after asking for uploading all tapes once, do not ask again
+  setup.ask_for_uploading_tapes = FALSE;
+
   if (directoryExists(getTapeDir(NULL)))
   {
     boolean tapes_uploaded = OfferUploadTapes();
@@ -10008,8 +10036,5 @@ void CheckUploadTapes(void)
     setup.provide_uploading_tapes = FALSE;
   }
 
-  // after asking for uploading all tapes once, do not ask again
-  setup.ask_for_uploading_tapes = FALSE;
-
   SaveSetup();
 }