@@ -400,19 +400,36 @@ def _normalize_score(score: str) -> str:
400400 except (ValueError , TypeError ):
401401 return ""
402402
403- def _get_lowest_date (dates : list [SSGameDate ]) -> int | None :
404- lowest_date = min (dates , default = None , key = lambda v : v .get ("text" , "" ))
405- if not lowest_date :
406- return None
407-
403+ def _parse_date (date_text : str ) -> int | None :
408404 try :
409- return int (datetime .strptime (lowest_date [ "text" ] , "%Y-%m-%d" ).timestamp ())
405+ return int (datetime .strptime (date_text , "%Y-%m-%d" ).timestamp ())
410406 except ValueError :
411407 try :
412- return int (datetime .strptime (lowest_date [ "text" ] , "%Y" ).timestamp ())
408+ return int (datetime .strptime (date_text , "%Y" ).timestamp ())
413409 except ValueError :
414410 return None
415411
412+ def _get_lowest_date (dates : list [SSGameDate ]) -> int | None :
413+ if not dates :
414+ return None
415+
416+ for region in get_preferred_regions (rom ):
417+ region_dates = sorted (
418+ (d for d in dates if d .get ("region" , "unk" ) == region ),
419+ key = lambda v : v .get ("text" , "" ),
420+ )
421+ for region_date in region_dates :
422+ parsed_date = _parse_date (region_date .get ("text" , "" ))
423+ if parsed_date is not None :
424+ return parsed_date
425+
426+ for date in sorted (dates , key = lambda v : v .get ("text" , "" )):
427+ parsed_date = _parse_date (date .get ("text" , "" ))
428+ if parsed_date is not None :
429+ return parsed_date
430+
431+ return None
432+
416433 def _get_genres (game : SSGame ) -> list [str ]:
417434 return [
418435 genre_name ["text" ]
0 commit comments