add region and language priority

This commit is contained in:
Georges-Antoine Assi
2025-09-21 09:38:00 -04:00
parent 34c25ad155
commit ce4809ea9c
6 changed files with 70 additions and 6 deletions

View File

@@ -63,6 +63,8 @@ class Config:
EJS_CONTROLS: dict[str, EjsControls] # core_name -> EjsControls
SCAN_METADATA_PRIORITY: list[str]
SCAN_ARTWORK_PRIORITY: list[str]
SCAN_REGION_PRIORITY: list[str]
SCAN_LANGUAGE_PRIORITY: list[str]
def __init__(self, **entries):
self.__dict__.update(entries)
@@ -223,6 +225,16 @@ class ConfigManager:
"hltb",
],
),
SCAN_REGION_PRIORITY=pydash.get(
self._raw_config,
"scan.region.priority",
["us", "wor", "ss", "eu", "jp"],
),
SCAN_LANGUAGE_PRIORITY=pydash.get(
self._raw_config,
"scan.language.priority",
["en", "fr"],
),
)
def _get_ejs_controls(self) -> dict[str, EjsControls]:
@@ -393,6 +405,14 @@ class ConfigManager:
log.critical("Invalid config.yml: scan.artwork.priority must be a list")
sys.exit(3)
if not isinstance(self.config.SCAN_REGION_PRIORITY, list):
log.critical("Invalid config.yml: scan.region.priority must be a list")
sys.exit(3)
if not isinstance(self.config.SCAN_LANGUAGE_PRIORITY, list):
log.critical("Invalid config.yml: scan.language.priority must be a list")
sys.exit(3)
def get_config(self) -> Config:
try:
with open(self.config_file, "r+") as config_file:
@@ -449,6 +469,12 @@ class ConfigManager:
"artwork": {
"priority": self.config.SCAN_ARTWORK_PRIORITY,
},
"region": {
"priority": self.config.SCAN_REGION_PRIORITY,
},
"language": {
"priority": self.config.SCAN_LANGUAGE_PRIORITY,
},
},
}

View File

@@ -39,6 +39,8 @@ def get_config() -> ConfigResponse:
EJS_SETTINGS=cfg.EJS_SETTINGS,
SCAN_METADATA_PRIORITY=cfg.SCAN_METADATA_PRIORITY,
SCAN_ARTWORK_PRIORITY=cfg.SCAN_ARTWORK_PRIORITY,
SCAN_REGION_PRIORITY=cfg.SCAN_REGION_PRIORITY,
SCAN_LANGUAGE_PRIORITY=cfg.SCAN_LANGUAGE_PRIORITY,
)

View File

@@ -19,3 +19,5 @@ class ConfigResponse(TypedDict):
EJS_CONTROLS: dict[str, EjsControls]
SCAN_METADATA_PRIORITY: list[str]
SCAN_ARTWORK_PRIORITY: list[str]
SCAN_REGION_PRIORITY: list[str]
SCAN_LANGUAGE_PRIORITY: list[str]

View File

@@ -10,6 +10,7 @@ from unidecode import unidecode as uc
from adapters.services.screenscraper import ScreenScraperService
from adapters.services.screenscraper_types import SSGame, SSGameDate
from config import SCREENSCRAPER_PASSWORD, SCREENSCRAPER_USER
from config.config_manager import config_manager as cm
from logger.logger import log
from .base_handler import (
@@ -25,7 +26,36 @@ from .base_handler import UniversalPlatformSlug as UPS
SS_DEV_ID: Final = base64.b64decode("enVyZGkxNQ==").decode()
SS_DEV_PASSWORD: Final = base64.b64decode("eFRKd29PRmpPUUc=").decode()
PREFERRED_REGIONS: Final = ["us", "wor", "ss", "eu", "jp"]
def get_preferred_regions() -> list[str]:
"""Get preferred regions from config, merged with defaults"""
config = cm.get_config()
default_regions = ["us", "wor", "ss", "eu", "jp"]
ordered_regions = [
region for region in config.SCAN_REGION_PRIORITY if region in default_regions
]
remaining_regions = [
region
for region in default_regions
if region not in config.SCAN_REGION_PRIORITY
]
return ordered_regions + remaining_regions
def get_preferred_languages() -> list[str]:
"""Get preferred languages from config, merged with defaults"""
config = cm.get_config()
default_languages = ["en", "fr"]
ordered_languages = [
lang for lang in config.SCAN_LANGUAGE_PRIORITY if lang in default_languages
]
remaining_languages = [
lang for lang in default_languages if lang not in config.SCAN_LANGUAGE_PRIORITY
]
return ordered_languages + remaining_languages
PS1_SS_ID: Final = 57
PS2_SS_ID: Final = 58
@@ -135,7 +165,7 @@ class SSRom(BaseRom):
def build_ss_rom(game: SSGame) -> SSRom:
res_name = ""
for region in PREFERRED_REGIONS:
for region in get_preferred_regions():
res_name = next(
(
name["text"]
@@ -157,7 +187,7 @@ def build_ss_rom(game: SSGame) -> SSRom:
)
url_cover = ""
for region in PREFERRED_REGIONS:
for region in get_preferred_regions():
url_cover = next(
(
media["url"]
@@ -172,7 +202,7 @@ def build_ss_rom(game: SSGame) -> SSRom:
break
url_manual: str = ""
for region in PREFERRED_REGIONS:
for region in get_preferred_regions():
url_manual = next(
(
media["url"]
@@ -231,7 +261,7 @@ def extract_metadata_from_ss_rom(rom: SSGame) -> SSMetadata:
]
def _get_franchises(rom: SSGame) -> list[str]:
preferred_languages = ["en", "fr"]
preferred_languages = get_preferred_languages()
for lang in preferred_languages:
franchises = [
franchise_name["text"]
@@ -244,7 +274,7 @@ def extract_metadata_from_ss_rom(rom: SSGame) -> SSMetadata:
return []
def _get_game_modes(rom: SSGame) -> list[str]:
preferred_languages = ["en", "fr"]
preferred_languages = get_preferred_languages()
for lang in preferred_languages:
modes = [
mode_name["text"]

View File

@@ -19,5 +19,7 @@ export type ConfigResponse = {
EJS_CONTROLS: Record<string, EjsControls>;
SCAN_METADATA_PRIORITY: Array<string>;
SCAN_ARTWORK_PRIORITY: Array<string>;
SCAN_REGION_PRIORITY: Array<string>;
SCAN_LANGUAGE_PRIORITY: Array<string>;
};

View File

@@ -27,6 +27,8 @@ const defaultConfig = {
EJS_CONTROLS: {},
SCAN_METADATA_PRIORITY: [],
SCAN_ARTWORK_PRIORITY: [],
SCAN_REGION_PRIORITY: [],
SCAN_LANGUAGE_PRIORITY: [],
} as ConfigResponse;
export default defineStore("config", {