@@ -7,17 +7,16 @@ export class TimeTracker implements vscode.Disposable {
77 private currentProject : string = '' ;
88 private database : Database ;
99 private updateInterval : NodeJS . Timeout | null = null ;
10- private saveInterval : NodeJS . Timeout | null = null ;
11- private saveIntervalSeconds : number ;
10+ private saveInterval : NodeJS . Timeout | null = null ; private saveIntervalSeconds : number = 5 ;
1211 private lastCursorActivity : number = Date . now ( ) ;
1312 private cursorInactivityTimeout : NodeJS . Timeout | null = null ;
14- private inactivityTimeoutSeconds : number ;
13+ private inactivityTimeoutSeconds : number = 300 ;
14+ private focusTimeoutHandle : NodeJS . Timeout | null = null ;
15+ private focusTimeoutSeconds : number = 60 ;
1516
1617 constructor ( database : Database ) {
1718 this . database = database ;
18- const config = vscode . workspace . getConfiguration ( 'simpleCodingTimeTracker' ) ;
19- this . saveIntervalSeconds = config . get ( 'saveInterval' , 5 ) ;
20- this . inactivityTimeoutSeconds = config . get ( 'inactivityTimeout' , 300 ) ; // Default 5 minutes in seconds
19+ this . updateConfiguration ( ) ;
2120
2221 // Track cursor movements
2322 vscode . window . onDidChangeTextEditorSelection ( ( ) => {
@@ -61,11 +60,33 @@ export class TimeTracker implements vscode.Disposable {
6160 // Track when VS Code window gains focus
6261 vscode . window . onDidChangeWindowState ( ( e ) => {
6362 if ( e . focused ) {
64- this . updateCursorActivity ( ) ;
63+ // Clear any pending timeout when focus returns
64+ if ( this . focusTimeoutHandle ) {
65+ clearTimeout ( this . focusTimeoutHandle ) ;
66+ this . focusTimeoutHandle = null ;
67+ }
68+ this . startTracking ( ) ;
69+ } else {
70+ // Set timeout when focus is lost
71+ if ( this . focusTimeoutHandle ) {
72+ clearTimeout ( this . focusTimeoutHandle ) ;
73+ }
74+ this . focusTimeoutHandle = setTimeout ( ( ) => {
75+ if ( this . isTracking ) {
76+ this . stopTracking ( ) ;
77+ }
78+ } , this . focusTimeoutSeconds * 1000 ) ;
6579 }
6680 } ) ;
6781 }
6882
83+ public updateConfiguration ( ) {
84+ const config = vscode . workspace . getConfiguration ( 'simpleCodingTimeTracker' ) ;
85+ this . saveIntervalSeconds = config . get ( 'saveInterval' , 5 ) ;
86+ this . inactivityTimeoutSeconds = config . get ( 'inactivityTimeout' , 300 ) ; // Default 5 minutes in seconds
87+ this . focusTimeoutSeconds = config . get ( 'focusTimeout' , 60 ) ;
88+ }
89+
6990 private setupCursorTracking ( ) {
7091 if ( this . cursorInactivityTimeout ) {
7192 clearTimeout ( this . cursorInactivityTimeout ) ;
0 commit comments