持久化设备留言待收听状态并支持重启恢复

This commit is contained in:
stu2not
2026-05-19 14:06:16 +08:00
parent 3164d81bb0
commit 6e104201fb
21 changed files with 1147 additions and 68 deletions

View File

@@ -7,6 +7,7 @@ from handlers.audio_session_handler import handle_websocket_data
from handlers.audio_file_handler import upload_message_audio
from banban.service.device_audio_cache import device_audio_cache_service
from banban.service.device_voice_archive import device_voice_archive_service
from banban.service.pending_voice_message import pending_voice_message_service
from services.audio_session import audio_session_manager
from services.interrupt_handler import interrupt_handler
from services.task_manager import task_manager
@@ -340,22 +341,32 @@ async def process_cached_audio(device_id: str, target_device_id: str, serial_num
cached_audio,
device_id=target_device_id,
)
await offline_audio_cache.add_audio_url(target_device_id, audio_url)
session_logger.info(
device_id,
"target",
f"设备留言已加入待收听队列: target_device_id={target_device_id}, audio_url={audio_url}",
archive_result = await device_voice_archive_service.archive_peer_voice_message(
sender_device_id=device_id,
receiver_device_id=target_device_id,
local_audio_path=str(local_audio_path),
)
await task_manager.create_task(
device_voice_archive_service.archive_peer_voice_message(
if archive_result is not None:
await pending_voice_message_service.add_pending_message(
target_device_id=target_device_id,
sender_device_id=device_id,
receiver_device_id=target_device_id,
local_audio_path=str(local_audio_path),
),
device_id=device_id,
task_type="device_voice_archive",
)
im_message_id=archive_result.message_id,
media_file_key=archive_result.media_file_key,
audio_url=audio_url,
source="device_peer_voice",
)
session_logger.info(
device_id,
"target",
f"设备留言已加入待收听队列: target_device_id={target_device_id}, audio_url={audio_url}",
)
else:
await offline_audio_cache.add_audio_url(target_device_id, audio_url)
session_logger.warning(
device_id,
"target",
"设备留言已写入内存待收听队列,但归档失败,重启后无法恢复这条留言",
)
websocket = await connection_manager.get_connection(device_id)
if websocket and websocket.client_state.name == "CONNECTED":