refactor(sleep): 解耦SleepManagerScheduleManager的依赖关系

将日程表获取的逻辑从`SleepManager`转移到`TimeChecker`中,并使其直接从全局的`schedule_manager`实例获取日程,消除了`SleepManager`对日程表的直接管理责任。

这一重构简化了`SleepManager`的职责,使其更专注于睡眠状态的管理,同时提高了模块间的独立性。

- `SleepManager`不再持有`today_schedule`状态。
- `TimeChecker`现在直接从`schedule_manager`获取日程,不再依赖于`SleepManager`传递。
- 移除了`ScheduleManager`中对`sleep_manager`的引用和更新操作。
This commit is contained in:
minecraft1024a
2025-09-07 12:28:15 +08:00
parent d2e48e5b17
commit 1e2eb977bb
3 changed files with 12 additions and 21 deletions

View File

@@ -25,8 +25,7 @@ class SleepManager:
""" """
初始化睡眠管理器。 初始化睡眠管理器。
""" """
self.time_checker = TimeChecker(self) # 时间检查器,用于判断当前是否处于理论睡眠时间 self.time_checker = TimeChecker() # 时间检查器,用于判断当前是否处于理论睡眠时间
self.today_schedule: Optional[List[Dict[str, Any]]] = None # 当天的日程安排
self.last_sleep_log_time = 0 # 上次记录睡眠日志的时间戳 self.last_sleep_log_time = 0 # 上次记录睡眠日志的时间戳
self.sleep_log_interval = 35 # 睡眠日志记录间隔(秒) self.sleep_log_interval = 35 # 睡眠日志记录间隔(秒)
@@ -284,14 +283,6 @@ class SleepManager:
logger.info(f"将在 {re_sleep_delay_minutes} 分钟后尝试重新入睡。") logger.info(f"将在 {re_sleep_delay_minutes} 分钟后尝试重新入睡。")
self._save_sleep_state() self._save_sleep_state()
def get_today_schedule(self) -> Optional[List[Dict[str, Any]]]:
"""获取今天的日程安排。"""
return self.today_schedule
def update_today_schedule(self, schedule: Optional[List[Dict[str, Any]]]):
"""更新今天的日程安排。"""
self.today_schedule = schedule
def _save_sleep_state(self): def _save_sleep_state(self):
"""将当前所有睡眠相关的状态打包并保存到本地存储。""" """将当前所有睡眠相关的状态打包并保存到本地存储。"""
state_data = { state_data = {

View File

@@ -1,19 +1,19 @@
from datetime import datetime, time, timedelta from datetime import datetime, time, timedelta
from typing import Optional from typing import Optional, List, Dict, Any
import random import random
from src.common.logger import get_logger from src.common.logger import get_logger
from src.config.config import global_config from src.config.config import global_config
from src.schedule.schedule_manager import schedule_manager
logger = get_logger("time_checker") logger = get_logger("time_checker")
class TimeChecker: class TimeChecker:
def __init__(self, schedule_source): def __init__(self):
self.schedule_source = schedule_source
# 缓存当天的偏移量,确保一天内使用相同的偏移量 # 缓存当天的偏移量,确保一天内使用相同的偏移量
self._daily_sleep_offset = None self._daily_sleep_offset: int = 0
self._daily_wake_offset = None self._daily_wake_offset: int = 0
self._offset_date = None self._offset_date = None
def _get_daily_offsets(self): def _get_daily_offsets(self):
@@ -34,9 +34,13 @@ class TimeChecker:
return self._daily_sleep_offset, self._daily_wake_offset return self._daily_sleep_offset, self._daily_wake_offset
def get_today_schedule(self) -> Optional[List[Dict[str, Any]]]:
"""从全局 ScheduleManager 获取今天的日程安排。"""
return schedule_manager.today_schedule
def is_in_theoretical_sleep_time(self, now_time: time) -> tuple[bool, Optional[str]]: def is_in_theoretical_sleep_time(self, now_time: time) -> tuple[bool, Optional[str]]:
if global_config.sleep_system.sleep_by_schedule: if global_config.sleep_system.sleep_by_schedule:
if self.schedule_source.get_today_schedule(): if self.get_today_schedule():
return self._is_in_schedule_sleep_time(now_time) return self._is_in_schedule_sleep_time(now_time)
else: else:
return self._is_in_sleep_time(now_time) return self._is_in_sleep_time(now_time)
@@ -46,7 +50,7 @@ class TimeChecker:
def _is_in_schedule_sleep_time(self, now_time: time) -> tuple[bool, Optional[str]]: def _is_in_schedule_sleep_time(self, now_time: time) -> tuple[bool, Optional[str]]:
"""检查当前时间是否落在日程表的任何一个睡眠活动中""" """检查当前时间是否落在日程表的任何一个睡眠活动中"""
sleep_keywords = ["休眠", "睡觉", "梦乡"] sleep_keywords = ["休眠", "睡觉", "梦乡"]
today_schedule = self.schedule_source.get_today_schedule() today_schedule = self.get_today_schedule()
if today_schedule: if today_schedule:
for event in today_schedule: for event in today_schedule:
try: try:

View File

@@ -7,7 +7,6 @@ from src.common.database.sqlalchemy_models import Schedule, get_db_session
from src.config.config import global_config from src.config.config import global_config
from src.common.logger import get_logger from src.common.logger import get_logger
from src.manager.async_task_manager import AsyncTask, async_task_manager from src.manager.async_task_manager import AsyncTask, async_task_manager
from ..chat.chat_loop.sleep_manager.sleep_manager import SleepManager
from .database import update_plan_usage from .database import update_plan_usage
from .llm_generator import ScheduleLLMGenerator from .llm_generator import ScheduleLLMGenerator
from .plan_manager import PlanManager from .plan_manager import PlanManager
@@ -23,7 +22,6 @@ class ScheduleManager:
self.plan_manager = PlanManager() self.plan_manager = PlanManager()
self.daily_task_started = False self.daily_task_started = False
self.schedule_generation_running = False self.schedule_generation_running = False
self.sleep_manager = SleepManager()
async def start_daily_schedule_generation(self): async def start_daily_schedule_generation(self):
if not self.daily_task_started: if not self.daily_task_started:
@@ -45,7 +43,6 @@ class ScheduleManager:
schedule_data = self._load_schedule_from_db(today_str) schedule_data = self._load_schedule_from_db(today_str)
if schedule_data: if schedule_data:
self.today_schedule = schedule_data self.today_schedule = schedule_data
self.sleep_manager.update_today_schedule(self.today_schedule)
self._log_loaded_schedule(today_str) self._log_loaded_schedule(today_str)
return return
@@ -100,7 +97,6 @@ class ScheduleManager:
if schedule_data: if schedule_data:
self._save_schedule_to_db(today_str, schedule_data) self._save_schedule_to_db(today_str, schedule_data)
self.today_schedule = schedule_data self.today_schedule = schedule_data
self.sleep_manager.update_today_schedule(self.today_schedule)
self._log_generated_schedule(today_str, schedule_data) self._log_generated_schedule(today_str, schedule_data)
if sampled_plans: if sampled_plans: