Bugfixes
This commit is contained in:
@@ -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(
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user