Skip to content

Commit 8f68a6c

Browse files
akaromlfbricon
authored andcommitted
Show busy status when there are incomplete tasks
Signed-off-by: Rome Li <rome.li@microsoft.com>
1 parent bb55be7 commit 8f68a6c

File tree

2 files changed

+61
-2
lines changed

2 files changed

+61
-2
lines changed

src/extension.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import { logger, initializeLogFile } from './log';
2727
import glob = require('glob');
2828
import { serverTasks } from './serverTasks';
2929
import { serverTaskPresenter } from './serverTaskPresenter';
30+
import { serverStatus, ServerStatusKind } from './serverStatus';
3031

3132
let languageClient: LanguageClient;
3233
const jdtEventEmitter = new EventEmitter<Uri>();
@@ -185,6 +186,17 @@ export function activate(context: ExtensionContext): Promise<ExtensionAPI> {
185186

186187
commands.executeCommand(Commands.SHOW_SERVER_TASK_STATUS);
187188

189+
serverStatus.initialize();
190+
serverStatus.onServerStatusChanged(status => {
191+
if (status === ServerStatusKind.Busy) {
192+
item.text = '$(sync~spin)';
193+
} else if (status === ServerStatusKind.Error) {
194+
item.text = '$(thumbsdown)';
195+
} else {
196+
item.text = '$(thumbsup)';
197+
}
198+
});
199+
188200
let serverOptions;
189201
const port = process.env['SERVER_PORT'];
190202
if (!port) {
@@ -216,7 +228,7 @@ export function activate(context: ExtensionContext): Promise<ExtensionAPI> {
216228
languageClient.onNotification(StatusNotification.type, (report) => {
217229
switch (report.type) {
218230
case 'Started':
219-
item.text = '$(thumbsup)';
231+
serverStatus.updateServerStatus(ServerStatusKind.Ready);
220232
commands.executeCommand('setContext', 'javaLSReady', true);
221233
resolve({
222234
apiVersion: ExtensionApiVersion,
@@ -227,7 +239,7 @@ export function activate(context: ExtensionContext): Promise<ExtensionAPI> {
227239
});
228240
break;
229241
case 'Error':
230-
item.text = '$(thumbsdown)';
242+
serverStatus.updateServerStatus(ServerStatusKind.Error);
231243
toggleItem(window.activeTextEditor, item);
232244
resolve({
233245
apiVersion: ExtensionApiVersion,

src/serverStatus.ts

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import { EventEmitter } from "vscode";
2+
import { serverTasks } from "./serverTasks";
3+
4+
export enum ServerStatusKind {
5+
Ready = "Ready",
6+
Error = "Error",
7+
Busy = "Busy",
8+
}
9+
10+
const _emitter = new EventEmitter<ServerStatusKind>();
11+
let _status: ServerStatusKind = ServerStatusKind.Ready;
12+
let _isBusy: boolean = false;
13+
14+
function fireEvent() {
15+
if (_isBusy) {
16+
_emitter.fire(ServerStatusKind.Busy);
17+
return;
18+
}
19+
20+
_emitter.fire(_status);
21+
}
22+
23+
export namespace serverStatus {
24+
export enum ServerStatus {
25+
Ready = "Ready",
26+
Error = "Error",
27+
Busy = "Busy",
28+
}
29+
30+
export const onServerStatusChanged = _emitter.event;
31+
32+
export function initialize() {
33+
serverTasks.onDidUpdateServerTask(tasks => {
34+
_isBusy = tasks.some(task => !task.complete);
35+
fireEvent();
36+
});
37+
}
38+
39+
export function updateServerStatus(status: ServerStatusKind) {
40+
if (status === ServerStatusKind.Busy) {
41+
throw new Error("Busy status cannot be set directly.");
42+
}
43+
44+
_status = status;
45+
fireEvent();
46+
}
47+
}

0 commit comments

Comments
 (0)