improved handling of failed tape uploads to score server
[rocksndiamonds.git] / src / libgame / setup.c
index f6d5bd11ec24182d39d711d36be9e80a16a5cbac..9ea1754932adb1371c9d994aca8e8af497411e3a 100644 (file)
@@ -279,7 +279,7 @@ char *getNewUserLevelSubdir(void)
   return new_level_subdir;
 }
 
-static char *getTapeDir(char *level_subdir)
+char *getTapeDir(char *level_subdir)
 {
   static char *tape_dir = NULL;
   char *data_dir = getUserGameDataDir();
@@ -1155,11 +1155,44 @@ char *getCustomMusicDirectory(void)
   return NULL;         // cannot find specified artwork file anywhere
 }
 
+void MarkTapeDirectoryUploadsAsComplete(char *level_subdir)
+{
+  char *filename = getPath2(getTapeDir(level_subdir), UPLOADED_FILENAME);
+
+  touchFile(filename);
+
+  checked_free(filename);
+}
+
+void MarkTapeDirectoryUploadsAsIncomplete(char *level_subdir)
+{
+  char *filename = getPath2(getTapeDir(level_subdir), UPLOADED_FILENAME);
+
+  unlink(filename);
+
+  checked_free(filename);
+}
+
+boolean CheckTapeDirectoryUploadsComplete(char *level_subdir)
+{
+  char *filename = getPath2(getTapeDir(level_subdir), UPLOADED_FILENAME);
+  boolean success = fileExists(filename);
+
+  checked_free(filename);
+
+  return success;
+}
+
 void InitTapeDirectory(char *level_subdir)
 {
+  boolean new_tape_dir = !directoryExists(getTapeDir(level_subdir));
+
   createDirectory(getUserGameDataDir(), "user data", PERMS_PRIVATE);
   createDirectory(getTapeDir(NULL), "main tape", PERMS_PRIVATE);
   createDirectory(getTapeDir(level_subdir), "level tape", PERMS_PRIVATE);
+
+  if (new_tape_dir)
+    MarkTapeDirectoryUploadsAsComplete(level_subdir);
 }
 
 void InitScoreDirectory(char *level_subdir)
@@ -1523,7 +1556,8 @@ int dumpTreeInfo(TreeInfo *node, int depth)
     DebugContinued("tree", "%c '%s' ['%s] [PARENT: '%s'] %s\n",
                   bullet, node->name, node->identifier,
                   (node->node_parent ? node->node_parent->identifier : "-"),
-                  (node->node_group ? "[GROUP]" : ""));
+                  (node->node_group ? "[GROUP]" :
+                   node->is_copy ? "[COPY]" : ""));
 
     if (!node->node_group && !node->parent_link)
       num_leaf_nodes++;
@@ -4847,7 +4881,7 @@ static void SaveLevelSetup_LastSeries_Ext(boolean deactivate_last_level_series)
 
   for (i = 0; last_level_series[i] != NULL; i++)
   {
-    char token[strlen(TOKEN_STR_LAST_LEVEL_SERIES) + 10];
+    char token[strlen(TOKEN_STR_LAST_LEVEL_SERIES) + 1 + 10 + 1];
 
     sprintf(token, "%s.%03d", TOKEN_STR_LAST_LEVEL_SERIES, i);