mirror of
https://github.com/rommapp/romm.git
synced 2026-06-27 22:35:57 +00:00
Merge pull request #3434 from rommapp/copilot/fix-region-specific-release-date
Use region-prioritized release dates from ScreenScraper
This commit is contained in:
@@ -400,19 +400,36 @@ def extract_metadata_from_ss_rom(rom: Rom, game: SSGame) -> SSMetadata:
|
||||
except (ValueError, TypeError):
|
||||
return ""
|
||||
|
||||
def _get_lowest_date(dates: list[SSGameDate]) -> int | None:
|
||||
lowest_date = min(dates, default=None, key=lambda v: v.get("text", ""))
|
||||
if not lowest_date:
|
||||
return None
|
||||
|
||||
def _parse_date(date_text: str) -> int | None:
|
||||
try:
|
||||
return int(datetime.strptime(lowest_date["text"], "%Y-%m-%d").timestamp())
|
||||
return int(datetime.strptime(date_text, "%Y-%m-%d").timestamp())
|
||||
except ValueError:
|
||||
try:
|
||||
return int(datetime.strptime(lowest_date["text"], "%Y").timestamp())
|
||||
return int(datetime.strptime(date_text, "%Y").timestamp())
|
||||
except ValueError:
|
||||
return None
|
||||
|
||||
def _get_lowest_date(dates: list[SSGameDate]) -> int | None:
|
||||
if not dates:
|
||||
return None
|
||||
|
||||
for region in get_preferred_regions(rom):
|
||||
region_dates = sorted(
|
||||
(d for d in dates if d.get("region", "unk") == region),
|
||||
key=lambda v: v.get("text", ""),
|
||||
)
|
||||
for region_date in region_dates:
|
||||
parsed_date = _parse_date(region_date.get("text", ""))
|
||||
if parsed_date is not None:
|
||||
return parsed_date
|
||||
|
||||
for date in sorted(dates, key=lambda v: v.get("text", "")):
|
||||
parsed_date = _parse_date(date.get("text", ""))
|
||||
if parsed_date is not None:
|
||||
return parsed_date
|
||||
|
||||
return None
|
||||
|
||||
def _get_genres(game: SSGame) -> list[str]:
|
||||
return [
|
||||
genre_name["text"]
|
||||
|
||||
@@ -14,6 +14,7 @@ from handler.metadata.ss_handler import (
|
||||
_is_notgame,
|
||||
add_ss_auth_to_url,
|
||||
extract_media_from_ss_game,
|
||||
extract_metadata_from_ss_rom,
|
||||
get_preferred_regions,
|
||||
)
|
||||
|
||||
@@ -203,6 +204,35 @@ class TestExtractMediaFromSsGame:
|
||||
assert "box-2D(us)" in result["box2d_url"]
|
||||
|
||||
|
||||
class TestExtractMetadataFromSsRom:
|
||||
def _make_rom(self, regions: list[str] | None = None) -> MagicMock:
|
||||
rom = MagicMock()
|
||||
rom.platform_id = 1
|
||||
rom.id = 100
|
||||
rom.regions = regions
|
||||
return rom
|
||||
|
||||
def test_release_date_prefers_tagged_region(self):
|
||||
config = _make_config(region_priority=[])
|
||||
rom = self._make_rom(regions=["Japan", "USA"])
|
||||
game = cast(
|
||||
SSGame,
|
||||
{
|
||||
"dates": [
|
||||
{"region": "us", "text": "1990-02-12"},
|
||||
{"region": "jp", "text": "1988-10-23"},
|
||||
{"region": "eu", "text": "1991-08-29"},
|
||||
],
|
||||
"medias": [],
|
||||
},
|
||||
)
|
||||
|
||||
with patch("handler.metadata.ss_handler.cm.get_config", return_value=config):
|
||||
metadata = extract_metadata_from_ss_rom(rom, game)
|
||||
|
||||
assert metadata["first_release_date"] == 593568000
|
||||
|
||||
|
||||
class TestIsNotgame:
|
||||
def _game(self, notgame: str = "false", names: list[str] | None = None) -> SSGame:
|
||||
return cast(
|
||||
|
||||
Reference in New Issue
Block a user