限制待收听留言周期提醒来源

This commit is contained in:
stu2not
2026-05-27 17:14:55 +08:00
parent 1b75435a3c
commit eebc5a14d8
2 changed files with 22 additions and 10 deletions

View File

@@ -1,7 +1,6 @@
from apscheduler.schedulers.asyncio import AsyncIOScheduler
from apscheduler.triggers.interval import IntervalTrigger
from banban.service.pending_voice_message import pending_voice_message_service
from services.offline_audio_cache import offline_audio_cache
from utils.logger import session_logger as logger
class TaskScheduler:
@@ -35,11 +34,9 @@ class TaskScheduler:
async def _execute_task(self):
try:
pending_devices = await pending_voice_message_service.list_devices_with_pending()
audio_cache = await offline_audio_cache.get_all_audio_cache()
fallback_devices = list(audio_cache.keys()) if audio_cache else []
device_ids = list(dict.fromkeys([*pending_devices, *fallback_devices]))
device_ids = list(dict.fromkeys(pending_devices))
if not device_ids:
logger.warning("", "", "离线音频缓存,跳过本次执行")
logger.warning("", "", "待收听留言,跳过本次执行")
return
for device_id in device_ids:
sent = await pending_voice_message_service.notify_device_pending_message(

View File

@@ -87,13 +87,28 @@ async def test_scheduler_sends_pending_notice_without_websocket_check(monkeypatc
calls.append(target_device_id)
return True
class FakeOfflineAudioCache:
async def get_all_audio_cache(self):
return {}
monkeypatch.setattr("services.scheduler.pending_voice_message_service", FakePendingVoiceService())
monkeypatch.setattr("services.scheduler.offline_audio_cache", FakeOfflineAudioCache())
await scheduler._execute_task()
assert calls == ["TalkingQ_device001"]
@pytest.mark.asyncio
async def test_scheduler_skips_notice_when_no_pending_messages(monkeypatch):
scheduler = TaskScheduler()
calls = []
class FakePendingVoiceService:
async def list_devices_with_pending(self):
return []
async def notify_device_pending_message(self, *, target_device_id):
calls.append(target_device_id)
return True
monkeypatch.setattr("services.scheduler.pending_voice_message_service", FakePendingVoiceService())
await scheduler._execute_task()
assert calls == []