diff --git a/src/multilang_translator/translator_server/translator_server.py b/src/multilang_translator/translator_server/translator_server.py index 17a5a34..9b946fd 100644 --- a/src/multilang_translator/translator_server/translator_server.py +++ b/src/multilang_translator/translator_server/translator_server.py @@ -37,38 +37,43 @@ CURRENT_ENDPOINT_CONFIG = {} def init_endpoint(endpoint: Endpoint, languages: list[str]): """Initialize a specific endpoint for multicast.""" + current_config = CURRENT_ENDPOINT_CONFIG.get(endpoint.id) + + if current_config is not None: + current_langs = [big.language for big in current_config.bigs] + # if languages are unchanged and the caster client status is initiailized, skip init + if current_langs == languages and multicast_client.get_status(base_url=endpoint.url)['is_initialized']: + log.info('Endpoint %s was already initialized', endpoint.name) + return + log.info(f"Initializing endpoint: {endpoint.name} at {endpoint.url}") - # Create a config for this endpoint + # Load a default config config = auracast_config.AuracastConfigGroup( bigs=[getattr(auracast_config, f"AuracastBigConfig{lang.capitalize()}")() for lang in languages] ) # overwrite some default configs - # Configure the transport config.transport = 'auto' config.auracast_device_address = ':'.join(f"{random.randint(0, 255):02X}" for _ in range(6)) # Configure the bigs for big in config.bigs: - big.loop = False - big.name = endpoint.name - big.program_info = big.program_info + ' ' + endpoint.name - big.id = random.randint(0, 2**16) #TODO: how many bits is this ? - big.random_address = ':'.join(f"{random.randint(0, 255):02X}" for _ in range(6)) - - # TODO: init happens all the time - # Initialize the endpoint if config changed or if it's not already initialized - if not multicast_client.get_status(base_url=endpoint.url)['is_initialized'] or config != CURRENT_ENDPOINT_CONFIG.get(endpoint.id): - ret = multicast_client.init(config, base_url=endpoint.url) - # if ret != 200: # TODO: this is not working, should probably be handled async - # log.error('Init of endpoint %s was unsucessfull', endpoint.name) - # raise Exception(f"Init was of endpoint {endpoint.name} was unsucessfull") - CURRENT_ENDPOINT_CONFIG[endpoint.id] = config.model_copy() - else: - log.info('Endpoint %s was already initialized', endpoint.name) + big.loop = False + big.name = endpoint.name + big.random_address = ':'.join(f"{random.randint(0, 255):02X}" for _ in range(6)) + big.id = random.randint(0, 2**16) #TODO: how many bits is this ? + #big.program_info = big.program_info + ' ' + endpoint.name + ret = multicast_client.init(config, base_url=endpoint.url) + # if ret != 200: # TODO: this is not working, should probably be handled async + # log.error('Init of endpoint %s was unsucessfull', endpoint.name) + # raise Exception(f"Init was of endpoint {endpoint.name} was unsucessfull") + CURRENT_ENDPOINT_CONFIG[endpoint.id] = config.model_copy() log.info(f"Endpoint {endpoint.name} initialized successfully") + #else: + # log.info('Endpoint %s was already initialized', endpoint.name) + async def make_announcement(text: str, ep_group: EndpointGroup): @@ -221,28 +226,12 @@ async def monitor_streaming_completion(ep_group: EndpointGroup): log.error(f"Max wait time reached for group {ep_group.id}. Forcing completion.") -async def reset_endpoints_after_delay(endpoint_ids, delay_seconds): - """Reset endpoints after a delay.""" - await asyncio.sleep(delay_seconds) - - for endpoint_id in endpoint_ids: - if endpoint_id in endpoint_status and endpoint_status[endpoint_id]["active"]: - try: - endpoint_status[endpoint_id]["broadcasts"] = 0 - log.info(f"Reset broadcasts count for endpoint {endpoint_id}") - except Exception as e: - log.error(f"Failed to reset endpoint {endpoint_id}: {e}") - - - - @app.get("/groups") async def get_groups(): """Get all endpoint groups with their current status.""" return endpoints_db.get_all_groups() - @app.post("/groups") async def create_group(group: endpoints_db.EndpointGroup): """Add a new endpoint group."""