@@ -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