"""Startup script to run tasks before the main application is started.""" import asyncio import sentry_sdk from opentelemetry import trace from config import ( ENABLE_SCHEDULED_CONVERT_IMAGES_TO_WEBP, ENABLE_SCHEDULED_RESCAN, ENABLE_SCHEDULED_RETROACHIEVEMENTS_PROGRESS_SYNC, ENABLE_SCHEDULED_UPDATE_LAUNCHBOX_METADATA, ENABLE_SCHEDULED_UPDATE_SWITCH_TITLEDB, SENTRY_DSN, ) from handler.metadata.base_handler import ( MAME_XML_KEY, METADATA_FIXTURES_DIR, PS1_SERIAL_INDEX_KEY, PS2_OPL_KEY, PS2_SERIAL_INDEX_KEY, PSP_SERIAL_INDEX_KEY, SCUMMVM_INDEX_KEY, ) from handler.redis_handler import async_cache from logger.logger import log from models.firmware import FIRMWARE_FIXTURES_DIR, KNOWN_BIOS_KEY from tasks.scheduled.cleanup_netplay import cleanup_netplay_task from tasks.scheduled.convert_images_to_webp import convert_images_to_webp_task from tasks.scheduled.scan_library import scan_library_task from tasks.scheduled.sync_retroachievements_progress import ( sync_retroachievements_progress_task, ) from tasks.scheduled.update_launchbox_metadata import update_launchbox_metadata_task from tasks.scheduled.update_switch_titledb import update_switch_titledb_task from utils import get_version from utils.cache import conditionally_set_cache from utils.context import initialize_context tracer = trace.get_tracer(__name__) @tracer.start_as_current_span("main") async def main() -> None: """Run startup tasks.""" async with initialize_context(): log.info("Running startup tasks") # Initialize scheduled tasks cleanup_netplay_task.init() if ENABLE_SCHEDULED_RESCAN: log.info("Starting scheduled rescan") scan_library_task.init() if ENABLE_SCHEDULED_UPDATE_SWITCH_TITLEDB: log.info("Starting scheduled update switch titledb") update_switch_titledb_task.init() if ENABLE_SCHEDULED_UPDATE_LAUNCHBOX_METADATA: log.info("Starting scheduled update launchbox metadata") update_launchbox_metadata_task.init() if ENABLE_SCHEDULED_CONVERT_IMAGES_TO_WEBP: log.info("Starting scheduled convert images to webp") convert_images_to_webp_task.init() if ENABLE_SCHEDULED_RETROACHIEVEMENTS_PROGRESS_SYNC: log.info("Starting scheduled RetroAchievements progress sync") sync_retroachievements_progress_task.init() log.info("Initializing cache with fixtures data") await conditionally_set_cache( async_cache, MAME_XML_KEY, METADATA_FIXTURES_DIR / "mame_index.json" ) await conditionally_set_cache( async_cache, SCUMMVM_INDEX_KEY, METADATA_FIXTURES_DIR / "scummvm_index.json", ) await conditionally_set_cache( async_cache, PS2_OPL_KEY, METADATA_FIXTURES_DIR / "ps2_opl_index.json" ) await conditionally_set_cache( async_cache, PS1_SERIAL_INDEX_KEY, METADATA_FIXTURES_DIR / "ps1_serial_index.json", ) await conditionally_set_cache( async_cache, PS2_SERIAL_INDEX_KEY, METADATA_FIXTURES_DIR / "ps2_serial_index.json", ) await conditionally_set_cache( async_cache, PSP_SERIAL_INDEX_KEY, METADATA_FIXTURES_DIR / "psp_serial_index.json", ) await conditionally_set_cache( async_cache, KNOWN_BIOS_KEY, FIRMWARE_FIXTURES_DIR / "known_bios_files.json" ) log.info("Startup tasks completed") if __name__ == "__main__": sentry_sdk.init( dsn=SENTRY_DSN, release=f"romm@{get_version()}", ) asyncio.run(main())