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:
@@ -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 = {
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user