fix(voicemail): improve greeting generation and playback error handling in VoicemailManager

This commit is contained in:
2026-01-01 22:26:54 -06:00
parent 62926140df
commit c10fef9723

View File

@@ -252,33 +252,42 @@ class VoicemailManager:
greeting_path = os.path.join(self.greetings_dir, "greeting.opus") greeting_path = os.path.join(self.greetings_dir, "greeting.opus")
if not os.path.exists(greeting_path): if not os.path.exists(greeting_path):
# Fallback if no greeting generated yet # Fallback if no greeting generated yet
self.generate_greeting(self.config.voicemail_greeting.get()) if self.has_espeak and self.has_ffmpeg:
try:
self.generate_greeting(self.config.voicemail_greeting.get())
except Exception as e:
RNS.log(f"Voicemail: Could not generate initial greeting: {e}", RNS.LOG_ERROR)
else:
RNS.log("Voicemail: espeak-ng or ffmpeg missing, cannot generate greeting", RNS.LOG_WARNING)
def session_job(): def session_job():
try: try:
# 1. Play greeting # 1. Play greeting
try: if os.path.exists(greeting_path):
greeting_source = OpusFileSource(greeting_path, target_frame_ms=60) try:
# Attach to transmit mixer greeting_source = OpusFileSource(greeting_path, target_frame_ms=60)
greeting_pipeline = Pipeline( # Attach to transmit mixer
source=greeting_source, greeting_pipeline = Pipeline(
codec=Null(), source=greeting_source,
sink=telephone.transmit_mixer, codec=Null(),
) sink=telephone.transmit_mixer,
greeting_pipeline.start() )
greeting_pipeline.start()
# Wait for greeting to finish # Wait for greeting to finish
while greeting_source.running: while greeting_source.running:
time.sleep(0.1) time.sleep(0.1)
if not telephone.active_call: if not telephone.active_call:
return return
greeting_pipeline.stop() greeting_pipeline.stop()
except Exception as e: except Exception as e:
RNS.log( RNS.log(
f"Voicemail: Could not play greeting (libs missing?): {e}", f"Voicemail: Could not play greeting (libs missing?): {e}",
RNS.LOG_ERROR, RNS.LOG_ERROR,
) )
else:
RNS.log("Voicemail: No greeting available to play", RNS.LOG_WARNING)
# 2. Play beep # 2. Play beep
beep_source = LXST.ToneSource( beep_source = LXST.ToneSource(