Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -107,25 +107,38 @@ def generate_world_save_filename(username="User", world_name="World"):
|
|
107 |
return f"{WORLD_STATE_FILE_MD_PREFIX}{clean_world}_by_{clean_user}_{timestamp}_{rand_hash}.md"
|
108 |
|
109 |
def parse_world_filename(filename):
|
110 |
-
"""Extracts info from filename
|
111 |
basename = os.path.basename(filename)
|
|
|
112 |
if basename.startswith(WORLD_STATE_FILE_MD_PREFIX) and basename.endswith(".md"):
|
113 |
-
|
114 |
-
parts =
|
115 |
-
|
|
|
116 |
timestamp_str = parts[-2]
|
117 |
username = parts[-4]
|
118 |
-
world_name = " ".join(parts[:-4]) # Join name parts
|
119 |
dt_obj = None
|
120 |
-
try:
|
121 |
-
|
|
|
|
|
|
|
122 |
return {"name": world_name or "Untitled", "user": username, "timestamp": timestamp_str, "dt": dt_obj, "filename": filename}
|
123 |
|
124 |
-
# Fallback
|
125 |
-
|
126 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
127 |
return {"name": basename.replace('.md','').replace(WORLD_STATE_FILE_MD_PREFIX, ''), "user": "Unknown", "timestamp": "Unknown", "dt": dt_fallback, "filename": filename}
|
128 |
|
|
|
129 |
def save_world_to_md(target_filename_base, world_data_dict):
|
130 |
"""Saves the provided world state dictionary to a specific MD file."""
|
131 |
save_path = os.path.join(SAVED_WORLDS_DIR, target_filename_base)
|
|
|
107 |
return f"{WORLD_STATE_FILE_MD_PREFIX}{clean_world}_by_{clean_user}_{timestamp}_{rand_hash}.md"
|
108 |
|
109 |
def parse_world_filename(filename):
|
110 |
+
"""Extracts info from filename if possible, otherwise returns defaults."""
|
111 |
basename = os.path.basename(filename)
|
112 |
+
# Check prefix and suffix
|
113 |
if basename.startswith(WORLD_STATE_FILE_MD_PREFIX) and basename.endswith(".md"):
|
114 |
+
core_name = basename[len(WORLD_STATE_FILE_MD_PREFIX):-3]
|
115 |
+
parts = core_name.split('_')
|
116 |
+
# Check if structure matches Name_by_User_Timestamp_Hash
|
117 |
+
if len(parts) >= 5 and parts[-3] == "by":
|
118 |
timestamp_str = parts[-2]
|
119 |
username = parts[-4]
|
120 |
+
world_name = " ".join(parts[:-4]) # Join potential name parts
|
121 |
dt_obj = None
|
122 |
+
try: # Try parsing timestamp
|
123 |
+
dt_obj = datetime.strptime(timestamp_str, '%Y%m%d_%H%M%S')
|
124 |
+
dt_obj = pytz.utc.localize(dt_obj) # Assume UTC
|
125 |
+
except (ValueError, pytz.exceptions.AmbiguousTimeError, pytz.exceptions.NonExistentTimeError):
|
126 |
+
dt_obj = None # Parsing failed
|
127 |
return {"name": world_name or "Untitled", "user": username, "timestamp": timestamp_str, "dt": dt_obj, "filename": filename}
|
128 |
|
129 |
+
# Fallback for unknown format or if parsing above failed
|
130 |
+
# This section runs if the 'if' conditions above weren't fully met
|
131 |
+
# print(f"Using fallback parsing for filename: {basename}") # Debugging log
|
132 |
+
dt_fallback = None
|
133 |
+
try: # Try getting modification time
|
134 |
+
mtime = os.path.getmtime(filename)
|
135 |
+
dt_fallback = datetime.fromtimestamp(mtime, tz=pytz.utc)
|
136 |
+
except Exception: # Ignore errors getting mtime
|
137 |
+
pass
|
138 |
+
# CORRECTED INDENTATION: This return belongs to the main function scope for the fallback case
|
139 |
return {"name": basename.replace('.md','').replace(WORLD_STATE_FILE_MD_PREFIX, ''), "user": "Unknown", "timestamp": "Unknown", "dt": dt_fallback, "filename": filename}
|
140 |
|
141 |
+
|
142 |
def save_world_to_md(target_filename_base, world_data_dict):
|
143 |
"""Saves the provided world state dictionary to a specific MD file."""
|
144 |
save_path = os.path.join(SAVED_WORLDS_DIR, target_filename_base)
|