mirror of
https://github.com/rommapp/romm.git
synced 2026-06-28 06:46:00 +00:00
add region and language priority
This commit is contained in:
@@ -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,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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"]
|
||||
|
||||
@@ -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>;
|
||||
};
|
||||
|
||||
|
||||
@@ -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", {
|
||||
|
||||
Reference in New Issue
Block a user