This commit is contained in:
2026-04-26 14:44:46 +02:00
parent 2136c10f69
commit 8ba22fc4a0
5 changed files with 75 additions and 45 deletions
+21 -30
View File
@@ -110,43 +110,34 @@ async def get_wake_sleep_times(
except ValueError:
return {"days": []}
sessions, _ = await get_sessions(session, from_date=from_date, to_date=to_date)
# Fetch sessions starting from one day before to catch night sleep ending on from_date
adj_from_date = from_date - timedelta(days=1)
sessions, _ = await get_sessions(session, from_date=adj_from_date, to_date=to_date)
days_data = []
current_date = from_date.date()
while current_date <= to_date.date():
date_str = current_date.strftime("%Y-%m-%d")
day_sessions = [
s
for s in sessions
if s.start_time.date() == current_date
or (s.end_time and s.end_time.date() == current_date)
]
wakeup_min = None
bedtime_min = None
if day_sessions:
# Find first wakeup after wakeup_ref
wakeups = []
for s in day_sessions:
if s.end_time and s.end_time.time() >= w_ref_time:
diff = (
s.end_time - datetime.combine(current_date, w_ref_time)
).total_seconds() / 60.0
wakeups.append(int(diff))
if wakeups:
wakeup_min = min(wakeups)
# Find last bedtime before bedtime_ref
bedtimes = []
for s in day_sessions:
if s.start_time.time() <= b_ref_time:
diff = (
s.start_time - datetime.combine(current_date, b_ref_time)
).total_seconds() / 60.0
bedtimes.append(int(diff))
if bedtimes:
bedtime_min = max(bedtimes)
midnight_today = datetime.combine(current_date, time(0, 0))
night_session = None
for s in sessions:
# A session that runs over midnight into current_date
if s.start_time < midnight_today and s.end_time and s.end_time >= midnight_today:
night_session = s
break
if night_session:
# Bedtime offset from b_ref_time on the day it started
s_start_date = night_session.start_time.date()
ref_datetime_bedtime = datetime.combine(s_start_date, b_ref_time)
bedtime_min = int((night_session.start_time - ref_datetime_bedtime).total_seconds() / 60.0)
# Wakeup offset from w_ref_time on the current day
ref_datetime_wakeup = datetime.combine(current_date, w_ref_time)
wakeup_min = int((night_session.end_time - ref_datetime_wakeup).total_seconds() / 60.0)
days_data.append(
{