mirror of
https://github.com/rommapp/romm.git
synced 2026-07-01 08:16:21 +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:
|
if remove_cover:
|
||||||
cleaned_data.update(await fs_resource_handler.remove_cover(rom))
|
cleaned_data.update(await fs_resource_handler.remove_cover(rom))
|
||||||
cleaned_data.update({"url_cover": ""})
|
cleaned_data.update({"url_cover": ""})
|
||||||
|
|||||||
@@ -103,6 +103,30 @@ def test_update_rom(
|
|||||||
assert get_rom_by_id_mock.called
|
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):
|
def test_delete_roms(client: TestClient, access_token: str, rom: Rom):
|
||||||
response = client.post(
|
response = client.post(
|
||||||
"/api/roms/delete",
|
"/api/roms/delete",
|
||||||
|
|||||||
Reference in New Issue
Block a user