|
63 | 63 | from logger.formatter import BLUE |
64 | 64 | from logger.formatter import highlight as hl |
65 | 65 | from logger.logger import log |
66 | | -from models.rom import Rom, RomUserStatus |
| 66 | +from models.rom import Rom, RomUserStatus, compute_name_sort_key |
67 | 67 | from utils.background_tasks import fire_and_forget |
68 | 68 | from utils.database import safe_int, safe_str_to_bool |
69 | 69 | from utils.filesystem import sanitize_filename |
@@ -135,6 +135,7 @@ class RomUpdateForm(BaseModel): |
135 | 135 | default=None, description="Raw manual metadata as JSON string." |
136 | 136 | ) |
137 | 137 | name: str | None = None |
| 138 | + name_sort_key: str | None = None |
138 | 139 | summary: str | None = None |
139 | 140 | fs_name: str | None = None |
140 | 141 | url_cover: str | None = None |
@@ -194,6 +195,7 @@ async def parse_rom_update_form( |
194 | 195 | raw_hltb_metadata: str | None = Form(default=None), |
195 | 196 | raw_manual_metadata: str | None = Form(default=None), |
196 | 197 | name: str | None = Form(default=None), |
| 198 | + name_sort_key: str | None = Form(default=None), |
197 | 199 | summary: str | None = Form(default=None), |
198 | 200 | fs_name: str | None = Form(default=None), |
199 | 201 | url_cover: str | None = Form(default=None), |
@@ -222,6 +224,7 @@ async def parse_rom_update_form( |
222 | 224 | "raw_hltb_metadata": raw_hltb_metadata, |
223 | 225 | "raw_manual_metadata": raw_manual_metadata, |
224 | 226 | "name": name, |
| 227 | + "name_sort_key": name_sort_key, |
225 | 228 | "summary": summary, |
226 | 229 | "fs_name": fs_name, |
227 | 230 | "url_cover": url_cover, |
@@ -1207,6 +1210,7 @@ async def update_rom( |
1207 | 1210 | "hltb_id": None, |
1208 | 1211 | "libretro_id": None, |
1209 | 1212 | "name": rom.fs_name, |
| 1213 | + "name_sort_key": compute_name_sort_key(rom.fs_name), |
1210 | 1214 | "summary": "", |
1211 | 1215 | "url_screenshots": [], |
1212 | 1216 | "path_screenshots": [], |
@@ -1391,15 +1395,27 @@ async def update_rom( |
1391 | 1395 | log.error(f"Invalid screenshot URL in update_rom: {str(e)}") |
1392 | 1396 | raise HTTPException(status_code=400, detail=str(e)) from e |
1393 | 1397 |
|
| 1398 | + name_value = form_data.name if "name" in provided_fields else rom.name |
1394 | 1399 | cleaned_data.update( |
1395 | 1400 | { |
1396 | | - "name": form_data.name if "name" in provided_fields else rom.name, |
| 1401 | + "name": name_value, |
1397 | 1402 | "summary": ( |
1398 | 1403 | form_data.summary if "summary" in provided_fields else rom.summary |
1399 | 1404 | ), |
1400 | 1405 | } |
1401 | 1406 | ) |
1402 | 1407 |
|
| 1408 | + if "name_sort_key" in provided_fields: |
| 1409 | + # The edit form always echoes the current key back, so only act when the |
| 1410 | + # user actually changed it: a value is a custom override, an empty value |
| 1411 | + # reverts to deriving from the (possibly new) name. When unchanged, leave |
| 1412 | + # it out so update_rom re-derives only if the stored key isn't custom. |
| 1413 | + submitted = (form_data.name_sort_key or "").strip() |
| 1414 | + if submitted != (rom.name_sort_key or "").strip(): |
| 1415 | + cleaned_data["name_sort_key"] = compute_name_sort_key( |
| 1416 | + submitted or name_value |
| 1417 | + ) |
| 1418 | + |
1403 | 1419 | new_fs_name = str(form_data.fs_name or rom.fs_name) |
1404 | 1420 | new_fs_name = sanitize_filename(new_fs_name) |
1405 | 1421 | cleaned_data.update({"fs_name": new_fs_name}) |
|
0 commit comments