mirror of
https://github.com/rommapp/romm.git
synced 2026-04-23 06:54:40 +00:00
fix: re-parse tags from filename when renaming a rom
Renaming a rom via PUT /roms/{id} only updated fs_name and its
derivatives, leaving regions/languages/tags/revision/version stale
against the new filename. Re-parse them whenever fs_name changes so
edits like "patapon (Fr En)" -> "Patapon (Fr, En)" are reflected in
the database.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1296,6 +1296,20 @@ async def update_rom(
|
||||
}
|
||||
)
|
||||
|
||||
# Re-parse tags from the filename so region/language/revision/version/tags
|
||||
# stay in sync whenever the fs_name changes.
|
||||
if new_fs_name != rom.fs_name:
|
||||
parsed_tags = fs_rom_handler.parse_tags(new_fs_name)
|
||||
cleaned_data.update(
|
||||
{
|
||||
"regions": parsed_tags.regions,
|
||||
"languages": parsed_tags.languages,
|
||||
"tags": parsed_tags.other_tags,
|
||||
"revision": parsed_tags.revision,
|
||||
"version": parsed_tags.version,
|
||||
}
|
||||
)
|
||||
|
||||
if remove_cover:
|
||||
cleaned_data.update(await fs_resource_handler.remove_cover(rom))
|
||||
cleaned_data.update({"url_cover": ""})
|
||||
|
||||
@@ -103,6 +103,30 @@ def test_update_rom(
|
||||
assert get_rom_by_id_mock.called
|
||||
|
||||
|
||||
@patch.object(FSRomsHandler, "rename_fs_rom")
|
||||
@patch.object(IGDBHandler, "get_rom_by_id", return_value=IGDBRom(igdb_id=None))
|
||||
def test_update_rom_reparses_tags_on_fs_name_change(
|
||||
rename_fs_rom_mock: AsyncMock,
|
||||
get_rom_by_id_mock: AsyncMock,
|
||||
client: TestClient,
|
||||
access_token: str,
|
||||
rom: Rom,
|
||||
):
|
||||
response = client.put(
|
||||
f"/api/roms/{rom.id}",
|
||||
headers={"Authorization": f"Bearer {access_token}"},
|
||||
data={"fs_name": "Patapon (Fr, En) (Rev 1).iso"},
|
||||
)
|
||||
assert response.status_code == status.HTTP_200_OK
|
||||
|
||||
body = response.json()
|
||||
assert body["fs_name"] == "Patapon (Fr, En) (Rev 1).iso"
|
||||
assert body["languages"] == ["French", "English"]
|
||||
assert body["regions"] == []
|
||||
assert body["revision"] == "1"
|
||||
assert body["tags"] == []
|
||||
|
||||
|
||||
def test_delete_roms(client: TestClient, access_token: str, rom: Rom):
|
||||
response = client.post(
|
||||
"/api/roms/delete",
|
||||
|
||||
Reference in New Issue
Block a user