Skip to content

Commit 8502a8b

Browse files
committed
Support offline usage
Only log a warning instead of throwing an exception if the user is offline and a valid version of the language server/debug adapter is installed.
1 parent 4937a48 commit 8502a8b

File tree

3 files changed

+25
-8
lines changed

3 files changed

+25
-8
lines changed

src/debugSetup.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export async function registerDebugAdapter(context: vscode.ExtensionContext, sta
1818
await debugAdapterDownloader.downloadServerIfNeeded(status);
1919
} catch (error) {
2020
console.error(error);
21-
vscode.window.showErrorMessage(`Could not download debug adapter: ${error}`);
21+
vscode.window.showWarningMessage(`Could not update/download Kotlin Debug Adapter: ${error}`);
2222
return;
2323
}
2424
}

src/languageSetup.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ export async function activateLanguageServer(context: vscode.ExtensionContext, s
2323
try {
2424
await langServerDownloader.downloadServerIfNeeded(status);
2525
} catch (error) {
26-
console.error(error);
27-
vscode.window.showErrorMessage(`Could not download language server: ${error}`);
26+
console.error(error);
27+
vscode.window.showWarningMessage(`Could not update/download Kotlin Language Server: ${error}`);
2828
return;
2929
}
3030
}

src/serverDownloader.ts

+22-5
Original file line numberDiff line numberDiff line change
@@ -78,16 +78,33 @@ export class ServerDownloader {
7878
}
7979

8080
async downloadServerIfNeeded(status: Status): Promise<void> {
81-
const serverInfo = (await this.installedServerInfo()) || { version: "0.0.0", lastUpdate: Number.MIN_SAFE_INTEGER };
82-
const secondsSinceLastUpdate = (Date.now() - serverInfo.lastUpdate) / 1000;
81+
const serverInfo = await this.installedServerInfo();
82+
const serverInfoOrDefault = serverInfo || { version: "0.0.0", lastUpdate: Number.MIN_SAFE_INTEGER };
83+
const secondsSinceLastUpdate = (Date.now() - serverInfoOrDefault.lastUpdate) / 1000;
8384

8485
if (secondsSinceLastUpdate > 480) {
8586
// Only query GitHub API for latest version if some time has passed
86-
LOG.info("Querying GitHub API for new KLS version...");
87+
LOG.info(`Querying GitHub API for new ${this.displayName} version...`);
88+
89+
let releaseInfo: GitHubReleasesAPIResponse;
90+
91+
try {
92+
releaseInfo = await this.latestReleaseInfo();
93+
} catch (error) {
94+
const message = `Could not fetch from GitHub releases API: ${error}.`;
95+
if (serverInfo == null) {
96+
// No server is installed yet, so throw
97+
throw new Error(message);
98+
} else {
99+
// Do not throw since user might just be offline
100+
// and a version of the server is already installed
101+
LOG.warn(message);
102+
return;
103+
}
104+
}
87105

88-
const releaseInfo = await this.latestReleaseInfo();
89106
const latestVersion = releaseInfo.tag_name;
90-
const installedVersion = serverInfo.version;
107+
const installedVersion = serverInfoOrDefault.version;
91108
const serverNeedsUpdate = semver.gt(latestVersion, installedVersion);
92109
let newVersion = installedVersion;
93110

0 commit comments

Comments
 (0)