@@ -22,6 +22,8 @@ let deactivated = false;
2222let isOffline = false ;
2323/** @type {Date | null } */
2424let offlineSince = null ;
25+ /** @type {NodeJS.Timeout | undefined } */
26+ let recoveryTimer ;
2527
2628/**
2729 * @param {vscode.ExtensionContext } context
@@ -58,6 +60,7 @@ function deactivate() {
5860 offlineSince = null ;
5961 statusBarItem ?. hide ( ) ;
6062 clearTimer ( ) ;
63+ clearRecoveryTimer ( ) ;
6164}
6265
6366// ---------------------------------------------------------------------------
@@ -104,6 +107,7 @@ async function refresh(promptSignIn = false, isManual = false) {
104107 lastUpdatedAt = new Date ( ) ;
105108 isOffline = false ;
106109 offlineSince = null ;
110+ clearRecoveryTimer ( ) ;
107111 updateStatusBar ( data ) ;
108112 } catch ( err ) {
109113 const code = err ?. code ;
@@ -112,6 +116,7 @@ async function refresh(promptSignIn = false, isManual = false) {
112116 if ( code !== 'NETWORK_ERROR' && code !== 'TIMEOUT' ) {
113117 isOffline = false ;
114118 offlineSince = null ;
119+ clearRecoveryTimer ( ) ;
115120 }
116121
117122 if ( code === 'AUTH' ) {
@@ -135,6 +140,7 @@ async function refresh(promptSignIn = false, isManual = false) {
135140 if ( ! isOffline ) {
136141 isOffline = true ;
137142 offlineSince = new Date ( ) ;
143+ startRecoveryTimer ( ) ;
138144 }
139145 if ( lastData ) {
140146 updateStatusBar ( lastData ) ;
@@ -314,6 +320,26 @@ function clearTimer() {
314320 }
315321}
316322
323+ const RECOVERY_INTERVAL_MS = 10 * 1000 ; // 10 s
324+
325+ function startRecoveryTimer ( ) {
326+ if ( recoveryTimer ) return ; // already running
327+ recoveryTimer = setInterval ( ( ) => {
328+ if ( ! isOffline ) {
329+ clearRecoveryTimer ( ) ;
330+ return ;
331+ }
332+ refresh ( ) ;
333+ } , RECOVERY_INTERVAL_MS ) ;
334+ }
335+
336+ function clearRecoveryTimer ( ) {
337+ if ( recoveryTimer ) {
338+ clearInterval ( recoveryTimer ) ;
339+ recoveryTimer = undefined ;
340+ }
341+ }
342+
317343// ---------------------------------------------------------------------------
318344// Config helper
319345// ---------------------------------------------------------------------------
@@ -358,5 +384,5 @@ module.exports = {
358384 if ( 'lastData' in s ) lastData = s . lastData ;
359385 if ( 'lastUpdatedAt' in s ) lastUpdatedAt = s . lastUpdatedAt ;
360386 } ,
361- _getState : ( ) => ( { isOffline, offlineSince } ) ,
387+ _getState : ( ) => ( { isOffline, offlineSince, recoveryTimerActive : ! ! recoveryTimer } ) ,
362388} ;
0 commit comments