refactor(sleep): 解耦SleepManager与ScheduleManager的依赖关系
将日程表获取的逻辑从`SleepManager`转移到`TimeChecker`中,并使其直接从全局的`schedule_manager`实例获取日程,消除了`SleepManager`对日程表的直接管理责任。 这一重构简化了`SleepManager`的职责,使其更专注于睡眠状态的管理,同时提高了模块间的独立性。 - `SleepManager`不再持有`today_schedule`状态。 - `TimeChecker`现在直接从`schedule_manager`获取日程,不再依赖于`SleepManager`传递。 - 移除了`ScheduleManager`中对`sleep_manager`的引用和更新操作。
This commit is contained in:
committed by
Windpicker-owo
parent
c1b3ed169a
commit
a9696ee43f
@@ -25,8 +25,7 @@ class SleepManager:
|
||||
"""
|
||||
初始化睡眠管理器。
|
||||
"""
|
||||
self.time_checker = TimeChecker(self) # 时间检查器,用于判断当前是否处于理论睡眠时间
|
||||
self.today_schedule: Optional[List[Dict[str, Any]]] = None # 当天的日程安排
|
||||
self.time_checker = TimeChecker() # 时间检查器,用于判断当前是否处于理论睡眠时间
|
||||
self.last_sleep_log_time = 0 # 上次记录睡眠日志的时间戳
|
||||
self.sleep_log_interval = 35 # 睡眠日志记录间隔(秒)
|
||||
|
||||
@@ -284,14 +283,6 @@ class SleepManager:
|
||||
logger.info(f"将在 {re_sleep_delay_minutes} 分钟后尝试重新入睡。")
|
||||
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):
|
||||
"""将当前所有睡眠相关的状态打包并保存到本地存储。"""
|
||||
state_data = {
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
from datetime import datetime, time, timedelta
|
||||
from typing import Optional
|
||||
from typing import Optional, List, Dict, Any
|
||||
import random
|
||||
|
||||
from src.common.logger import get_logger
|
||||
from src.config.config import global_config
|
||||
from src.schedule.schedule_manager import schedule_manager
|
||||
|
||||
logger = get_logger("time_checker")
|
||||
|
||||
|
||||
class TimeChecker:
|
||||
def __init__(self, schedule_source):
|
||||
self.schedule_source = schedule_source
|
||||
def __init__(self):
|
||||
# 缓存当天的偏移量,确保一天内使用相同的偏移量
|
||||
self._daily_sleep_offset = None
|
||||
self._daily_wake_offset = None
|
||||
self._daily_sleep_offset: int = 0
|
||||
self._daily_wake_offset: int = 0
|
||||
self._offset_date = None
|
||||
|
||||
def _get_daily_offsets(self):
|
||||
@@ -34,9 +34,13 @@ class TimeChecker:
|
||||
|
||||
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]]:
|
||||
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)
|
||||
else:
|
||||
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]]:
|
||||
"""检查当前时间是否落在日程表的任何一个睡眠活动中"""
|
||||
sleep_keywords = ["休眠", "睡觉", "梦乡"]
|
||||
today_schedule = self.schedule_source.get_today_schedule()
|
||||
today_schedule = self.get_today_schedule()
|
||||
if today_schedule:
|
||||
for event in today_schedule:
|
||||
try:
|
||||
|
||||
@@ -7,7 +7,6 @@ from src.common.database.sqlalchemy_models import Schedule, get_db_session
|
||||
from src.config.config import global_config
|
||||
from src.common.logger import get_logger
|
||||
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 .llm_generator import ScheduleLLMGenerator
|
||||
from .plan_manager import PlanManager
|
||||
@@ -23,7 +22,6 @@ class ScheduleManager:
|
||||
self.plan_manager = PlanManager()
|
||||
self.daily_task_started = False
|
||||
self.schedule_generation_running = False
|
||||
self.sleep_manager = SleepManager()
|
||||
|
||||
async def start_daily_schedule_generation(self):
|
||||
if not self.daily_task_started:
|
||||
@@ -45,7 +43,6 @@ class ScheduleManager:
|
||||
schedule_data = self._load_schedule_from_db(today_str)
|
||||
if schedule_data:
|
||||
self.today_schedule = schedule_data
|
||||
self.sleep_manager.update_today_schedule(self.today_schedule)
|
||||
self._log_loaded_schedule(today_str)
|
||||
return
|
||||
|
||||
@@ -100,7 +97,6 @@ class ScheduleManager:
|
||||
if schedule_data:
|
||||
self._save_schedule_to_db(today_str, schedule_data)
|
||||
self.today_schedule = schedule_data
|
||||
self.sleep_manager.update_today_schedule(self.today_schedule)
|
||||
self._log_generated_schedule(today_str, schedule_data)
|
||||
|
||||
if sampled_plans:
|
||||
|
||||
Reference in New Issue
Block a user