Skip to content

Commit a5c9916

Browse files
committed
feat: enhance session tracking with preserved start time and detailed logging
1 parent e608acf commit a5c9916

File tree

1 file changed

+104
-9
lines changed

1 file changed

+104
-9
lines changed

src/core/pomodoro-timer.js

Lines changed: 104 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ export class PomodoroTimer {
2727

2828
// Session time tracking
2929
this.sessionStartTime = null; // When the current session was started
30+
this.lastSessionStartTime = null; // Preserved start time for the last completed session
3031
this.currentSessionElapsedTime = 0; // Actual elapsed time for current session (in seconds)
3132
this.lastCompletedSessionTime = 0; // Time of the last completed session for undo functionality
3233
this.sessionCompletedButNotSaved = false; // Flag to track if session completed but not saved yet
@@ -612,8 +613,19 @@ export class PomodoroTimer {
612613
// Track session start time if not already set
613614
if (!this.sessionStartTime) {
614615
this.sessionStartTime = Date.now();
616+
console.log('🟢 NEW SESSION STARTED - sessionStartTime set to:', {
617+
timestamp: this.sessionStartTime,
618+
dateISO: new Date(this.sessionStartTime).toISOString(),
619+
dateLocal: new Date(this.sessionStartTime).toString()
620+
});
615621
this.currentSessionElapsedTime = 0;
616622
this.sessionCompletedButNotSaved = false; // Reset flag for new session
623+
} else {
624+
console.log('⚠️ Session already started - not updating sessionStartTime:', {
625+
existingTimestamp: this.sessionStartTime,
626+
existingDateISO: new Date(this.sessionStartTime).toISOString(),
627+
existingDateLocal: new Date(this.sessionStartTime).toString()
628+
});
617629
}
618630

619631
// Initialize timer accuracy tracking
@@ -981,6 +993,14 @@ export class PomodoroTimer {
981993
if (shouldSaveSession) {
982994
this.saveSessionData();
983995
}
996+
997+
// Reset session start time for next session (after saving)
998+
console.log('🔄 Resetting sessionStartTime after overtime skip:', {
999+
beforeReset: this.sessionStartTime,
1000+
beforeResetISO: this.sessionStartTime ? new Date(this.sessionStartTime).toISOString() : null
1001+
});
1002+
this.sessionStartTime = null;
1003+
9841004
const messages = {
9851005
focus: 'Focus session skipped. Time for a break! 😌',
9861006
break: 'Break skipped. Ready to focus? 🍅',
@@ -1004,6 +1024,14 @@ export class PomodoroTimer {
10041024
const actualElapsedTime = this.currentSessionElapsedTime || (this.durations.focus - this.timeRemaining);
10051025
this.totalFocusTime += actualElapsedTime;
10061026
this.lastCompletedSessionTime = actualElapsedTime;
1027+
1028+
// Preserve session start time for saving
1029+
console.log('Preserving session start time:', {
1030+
before: this.lastSessionStartTime,
1031+
sessionStartTime: this.sessionStartTime,
1032+
preservedValue: this.sessionStartTime
1033+
});
1034+
this.lastSessionStartTime = this.sessionStartTime;
10071035

10081036
// Save skipped focus session to SessionManager as individual session
10091037
// Only save if session lasted at least 1 minute
@@ -1046,6 +1074,14 @@ export class PomodoroTimer {
10461074
if (shouldSaveSession) {
10471075
this.saveSessionData();
10481076
}
1077+
1078+
// Reset session start time for next session (after saving)
1079+
console.log('🔄 Resetting sessionStartTime after normal skip:', {
1080+
beforeReset: this.sessionStartTime,
1081+
beforeResetISO: this.sessionStartTime ? new Date(this.sessionStartTime).toISOString() : null
1082+
});
1083+
this.sessionStartTime = null;
1084+
10491085
const messages = {
10501086
focus: 'Focus session skipped. Time for a break! 😌',
10511087
break: 'Break skipped. Ready to focus? 🍅',
@@ -1085,6 +1121,14 @@ export class PomodoroTimer {
10851121

10861122
// Store the actual elapsed time for undo functionality
10871123
this.lastCompletedSessionTime = actualElapsedTime;
1124+
1125+
// Preserve session start time for saving
1126+
console.log('Preserving session start time (timer completion):', {
1127+
before: this.lastSessionStartTime,
1128+
sessionStartTime: this.sessionStartTime,
1129+
preservedValue: this.sessionStartTime
1130+
});
1131+
this.lastSessionStartTime = this.sessionStartTime;
10881132

10891133
// Mark current task as completed if exists
10901134
if (this.currentTask.trim()) {
@@ -1136,7 +1180,13 @@ export class PomodoroTimer {
11361180
}
11371181
}
11381182

1183+
// Save completed focus session to SessionManager as individual session BEFORE resetting sessionStartTime
1184+
if (this.lastCompletedSessionTime > 0 && this.completedPomodoros > 0) {
1185+
await this.saveCompletedFocusSession();
1186+
}
1187+
11391188
// Reset session tracking for next session
1189+
console.log('Resetting sessionStartTime for next session (from completeSession)');
11401190
this.sessionStartTime = null;
11411191
this.currentSessionElapsedTime = 0;
11421192
this.sessionCompletedButNotSaved = false; // Reset flag
@@ -1151,11 +1201,6 @@ export class PomodoroTimer {
11511201
this.updateDisplay();
11521202
this.updateButtons();
11531203

1154-
// Save completed focus session to SessionManager as individual session
1155-
if (this.lastCompletedSessionTime > 0 && this.completedPomodoros > 0) {
1156-
await this.saveCompletedFocusSession();
1157-
}
1158-
11591204
// Only save aggregated session data, individual sessions are handled by saveCompletedFocusSession
11601205
await this.saveSessionData();
11611206
this.showNotification();
@@ -1236,6 +1281,14 @@ export class PomodoroTimer {
12361281

12371282
// Store the actual elapsed time for undo functionality
12381283
this.lastCompletedSessionTime = actualElapsedTime;
1284+
1285+
// Preserve session start time for saving
1286+
console.log('Preserving session start time (overtime):', {
1287+
before: this.lastSessionStartTime,
1288+
sessionStartTime: this.sessionStartTime,
1289+
preservedValue: this.sessionStartTime
1290+
});
1291+
this.lastSessionStartTime = this.sessionStartTime;
12391292

12401293
// Mark current task as completed if exists
12411294
if (this.currentTask.trim()) {
@@ -2059,12 +2112,50 @@ export class PomodoroTimer {
20592112
const now = new Date();
20602113
const durationMinutes = Math.round(this.lastCompletedSessionTime / 60);
20612114

2062-
// Calculate session end time (now) and start time (backwards from duration)
2115+
// Use preserved session start time if available, otherwise fall back to calculating backwards
2116+
let startHour, startMinute;
2117+
const actualSessionStartTime = this.lastSessionStartTime;
2118+
2119+
console.log('Session saving debug:', {
2120+
lastSessionStartTime: this.lastSessionStartTime,
2121+
sessionStartTime: this.sessionStartTime,
2122+
actualSessionStartTime: actualSessionStartTime,
2123+
durationMinutes: durationMinutes,
2124+
nowISO: now.toISOString(),
2125+
nowLocal: now.toString()
2126+
});
2127+
2128+
if (actualSessionStartTime) {
2129+
const sessionStart = new Date(actualSessionStartTime);
2130+
startHour = sessionStart.getHours();
2131+
startMinute = sessionStart.getMinutes();
2132+
console.log('Using preserved session start time:', {
2133+
timestampUTC: sessionStart.toISOString(),
2134+
timestampLocal: sessionStart.toString(),
2135+
extractedHour: startHour,
2136+
extractedMinute: startMinute
2137+
});
2138+
} else {
2139+
// Fallback to calculating backwards from duration
2140+
const endHour = now.getHours();
2141+
const endMinute = now.getMinutes();
2142+
const startTotalMinutes = endHour * 60 + endMinute - durationMinutes;
2143+
startHour = Math.max(0, Math.floor(startTotalMinutes / 60));
2144+
startMinute = Math.max(0, startTotalMinutes % 60);
2145+
console.log('Using fallback calculation for session start time (no preserved time available)');
2146+
}
2147+
20632148
const endHour = now.getHours();
20642149
const endMinute = now.getMinutes();
2065-
const startTotalMinutes = endHour * 60 + endMinute - durationMinutes;
2066-
const startHour = Math.max(0, Math.floor(startTotalMinutes / 60));
2067-
const startMinute = Math.max(0, startTotalMinutes % 60);
2150+
2151+
console.log('Final time values:', {
2152+
startHour: startHour,
2153+
startMinute: startMinute,
2154+
endHour: endHour,
2155+
endMinute: endMinute,
2156+
startTimeString: `${startHour.toString().padStart(2, '0')}:${startMinute.toString().padStart(2, '0')}`,
2157+
endTimeString: `${endHour.toString().padStart(2, '0')}:${endMinute.toString().padStart(2, '0')}`
2158+
});
20682159

20692160
// Get current tags from TagManager
20702161
const currentTags = window.tagManager ? window.tagManager.getCurrentTags() : [];
@@ -2083,6 +2174,10 @@ export class PomodoroTimer {
20832174
try {
20842175
await window.sessionManager.addSession(sessionData);
20852176
console.log('Timer session saved to SessionManager:', sessionData);
2177+
2178+
// Clear the preserved session start time after successful save
2179+
this.lastSessionStartTime = null;
2180+
console.log('Cleared lastSessionStartTime after successful save');
20862181
} catch (error) {
20872182
console.error('Failed to save timer session to SessionManager:', error);
20882183
}

0 commit comments

Comments
 (0)