From 0d466a3291c152598e96e688ff8ea26061440427 Mon Sep 17 00:00:00 2001 From: Joaquin Madrid Belando Date: Thu, 5 Mar 2026 18:11:43 +0100 Subject: [PATCH] Improve playFileOnRequest: add file existence check, better logging, catch all exceptions --- bridge_master.py | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/bridge_master.py b/bridge_master.py index 0ad6cf4..0bae01d 100644 --- a/bridge_master.py +++ b/bridge_master.py @@ -766,14 +766,27 @@ def playFileOnRequest(self,fileNumber): _lang = CONFIG['SYSTEMS'][system]['ANNOUNCEMENT_LANGUAGE'] _nine = bytes_3(9) _source_id = bytes_3(5000) - logger.debug('(%s) Sending contents of AMBE file: %s',system,fileNumber) + + _ambe_file = '/{}/ondemand/{}.ambe'.format(_lang, fileNumber) + _full_path = os.path.join('./Audio', _lang, 'ondemand', '{}.ambe'.format(fileNumber)) + + if not os.path.isfile(_full_path): + logger.warning('(%s) AMBE file not found: %s', system, _full_path) + return + + logger.info('(%s) Playing on-demand AMBE file: %s (ID: %s)', system, _full_path, fileNumber) sleep(1) _say = [] try: - _say.append(AMBEobj.readSingleFile(''.join(['/',_lang,'/ondemand/',str(fileNumber),'.ambe']))) - except IOError: - logger.warning('(%s) cannot read file for number %s',system,fileNumber) + _say.append(AMBEobj.readSingleFile(_ambe_file)) + except Exception as e: + logger.warning('(%s) Error reading AMBE file %s: %s', system, _full_path, e) + return + + if not _say or not _say[0]: + logger.warning('(%s) AMBE file empty or invalid: %s', system, _full_path) return + speech = pkt_gen(_source_id, _nine, bytes_4(9), 1, _say) sleep(1) _slot = systems[system].STATUS[2] @@ -782,12 +795,11 @@ def playFileOnRequest(self,fileNumber): pkt = next(speech) except StopIteration: break - #Packet every 60ms sleep(0.058) _stream_id = pkt[16:20] _pkt_time = time() reactor.callFromThread(sendVoicePacket,self,pkt,_source_id,_nine,_slot) - logger.debug('(%s) Sending AMBE file %s end',system,fileNumber) + logger.info('(%s) On-demand playback complete: %s', system, fileNumber) def threadIdent(): logger.debug('(IDENT) starting ident thread')