mirror of
https://github.com/rommapp/romm.git
synced 2026-06-28 06:46:00 +00:00
feat: refactor platform handling and library structure detection
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
from datetime import datetime, timezone
|
||||
from typing import Annotated
|
||||
|
||||
from fastapi import Body
|
||||
@@ -12,23 +11,11 @@ from exceptions.fs_exceptions import PlatformAlreadyExistsException
|
||||
from handler.auth.constants import Scope
|
||||
from handler.database import db_platform_handler
|
||||
from handler.filesystem import fs_platform_handler
|
||||
from handler.metadata import (
|
||||
meta_flashpoint_handler,
|
||||
meta_hasheous_handler,
|
||||
meta_hltb_handler,
|
||||
meta_igdb_handler,
|
||||
meta_launchbox_handler,
|
||||
meta_moby_handler,
|
||||
meta_ra_handler,
|
||||
meta_ss_handler,
|
||||
meta_tgdb_handler,
|
||||
)
|
||||
from handler.metadata.base_handler import UniversalPlatformSlug as UPS
|
||||
from handler.scan_handler import scan_platform
|
||||
from logger.formatter import BLUE
|
||||
from logger.formatter import highlight as hl
|
||||
from logger.logger import log
|
||||
from models.platform import DEFAULT_COVER_ASPECT_RATIO, Platform
|
||||
from utils.platforms import get_supported_platforms
|
||||
from utils.router import APIRouter
|
||||
|
||||
router = APIRouter(
|
||||
@@ -70,89 +57,10 @@ def get_platforms(request: Request) -> list[PlatformSchema]:
|
||||
|
||||
|
||||
@protected_route(router.get, "/supported", [Scope.PLATFORMS_READ])
|
||||
def get_supported_platforms(request: Request) -> list[PlatformSchema]:
|
||||
def get_supported_platforms_endpoint(request: Request) -> list[PlatformSchema]:
|
||||
"""Retrieve the list of supported platforms."""
|
||||
|
||||
db_platforms = db_platform_handler.get_platforms()
|
||||
db_platforms_map = {p.slug: p for p in db_platforms}
|
||||
|
||||
now = datetime.now(timezone.utc)
|
||||
supported_platforms = []
|
||||
|
||||
for upslug in UPS:
|
||||
slug = upslug.value
|
||||
|
||||
db_platform = db_platforms_map.get(slug, None)
|
||||
if db_platform:
|
||||
supported_platforms.append(
|
||||
PlatformSchema.model_validate(db_platform).model_dump()
|
||||
)
|
||||
continue
|
||||
|
||||
igdb_platform = meta_igdb_handler.get_platform(slug)
|
||||
moby_platform = meta_moby_handler.get_platform(slug)
|
||||
ss_platform = meta_ss_handler.get_platform(slug)
|
||||
ra_platform = meta_ra_handler.get_platform(slug)
|
||||
launchbox_platform = meta_launchbox_handler.get_platform(slug)
|
||||
hasheous_platform = meta_hasheous_handler.get_platform(slug)
|
||||
tgdb_platform = meta_tgdb_handler.get_platform(slug)
|
||||
flashpoint_platform = meta_flashpoint_handler.get_platform(slug)
|
||||
hltb_platform = meta_hltb_handler.get_platform(slug)
|
||||
|
||||
platform_attrs = {
|
||||
"id": -1,
|
||||
"name": slug.replace("-", " ").title(),
|
||||
"fs_slug": slug,
|
||||
"slug": slug,
|
||||
"roms": [],
|
||||
"rom_count": 0,
|
||||
"created_at": now,
|
||||
"updated_at": now,
|
||||
"fs_size_bytes": 0,
|
||||
"missing_from_fs": False,
|
||||
"aspect_ratio": DEFAULT_COVER_ASPECT_RATIO,
|
||||
}
|
||||
|
||||
platform_attrs.update(
|
||||
{
|
||||
**hltb_platform,
|
||||
**flashpoint_platform,
|
||||
**hasheous_platform,
|
||||
**tgdb_platform,
|
||||
**launchbox_platform,
|
||||
**ra_platform,
|
||||
**moby_platform,
|
||||
**ss_platform,
|
||||
**igdb_platform,
|
||||
"igdb_id": igdb_platform.get("igdb_id")
|
||||
or hasheous_platform.get("igdb_id")
|
||||
or None,
|
||||
"ra_id": ra_platform.get("ra_id")
|
||||
or hasheous_platform.get("ra_id")
|
||||
or None,
|
||||
"tgdb_id": moby_platform.get("tgdb_id")
|
||||
or hasheous_platform.get("tgdb_id")
|
||||
or None,
|
||||
"name": igdb_platform.get("name")
|
||||
or ss_platform.get("name")
|
||||
or moby_platform.get("name")
|
||||
or ra_platform.get("name")
|
||||
or launchbox_platform.get("name")
|
||||
or hasheous_platform.get("name")
|
||||
or tgdb_platform.get("name")
|
||||
or flashpoint_platform.get("name")
|
||||
or hltb_platform.get("name")
|
||||
or slug.replace("-", " ").title(),
|
||||
"url_logo": igdb_platform.get("url_logo")
|
||||
or tgdb_platform.get("url_logo")
|
||||
or "",
|
||||
}
|
||||
)
|
||||
|
||||
platform = Platform(**platform_attrs)
|
||||
supported_platforms.append(PlatformSchema.model_validate(platform).model_dump())
|
||||
|
||||
return supported_platforms
|
||||
return get_supported_platforms()
|
||||
|
||||
|
||||
@protected_route(
|
||||
|
||||
Reference in New Issue
Block a user