Skip to content

Commit c1e7906

Browse files
committed
feat: check network recovery every 10s while offline
1 parent bc8b733 commit c1e7906

File tree

1 file changed

+27
-1
lines changed

1 file changed

+27
-1
lines changed

src/extension.js

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ let deactivated = false;
2222
let isOffline = false;
2323
/** @type {Date | null} */
2424
let 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

Comments
 (0)