81 lines
2.3 KiB
TypeScript
81 lines
2.3 KiB
TypeScript
|
|
import { StatusBarAlignment, ThemeColor, window, workspace } from "vscode";
|
||
|
|
import { TabbyClient } from "./TabbyClient";
|
||
|
|
|
||
|
|
const label = "Tabby";
|
||
|
|
const iconLoading = "$(loading~spin)";
|
||
|
|
const iconReady = "$(check)";
|
||
|
|
const iconDisconnected = "$(plug)";
|
||
|
|
const iconDisabled = "$(x)";
|
||
|
|
const colorNormal = new ThemeColor('statusBar.foreground');
|
||
|
|
const colorWarning = new ThemeColor('statusBarItem.warningForeground');
|
||
|
|
const backgroundColorNormal = new ThemeColor('statusBar.background');
|
||
|
|
const backgroundColorWarning = new ThemeColor('statusBarItem.warningBackground');
|
||
|
|
|
||
|
|
const item = window.createStatusBarItem(StatusBarAlignment.Right);
|
||
|
|
export const tabbyStatusBarItem = item;
|
||
|
|
|
||
|
|
const client = TabbyClient.getInstance();
|
||
|
|
client.on("statusChanged", updateStatusBarItem);
|
||
|
|
|
||
|
|
workspace.onDidChangeConfiguration((event) => {
|
||
|
|
if (event.affectsConfiguration("tabby")) {
|
||
|
|
updateStatusBarItem();
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
updateStatusBarItem();
|
||
|
|
item.show();
|
||
|
|
|
||
|
|
function updateStatusBarItem() {
|
||
|
|
const enabled = workspace.getConfiguration("tabby").get("enabled", true);
|
||
|
|
if (!enabled) {
|
||
|
|
toDisabled();
|
||
|
|
} else {
|
||
|
|
const status = client.status;
|
||
|
|
switch (status) {
|
||
|
|
case "connecting":
|
||
|
|
toLoading();
|
||
|
|
break;
|
||
|
|
case "ready":
|
||
|
|
toReady();
|
||
|
|
break;
|
||
|
|
case "disconnected":
|
||
|
|
toDisconnected();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function toLoading() {
|
||
|
|
item.color = colorNormal;
|
||
|
|
item.backgroundColor = backgroundColorNormal;
|
||
|
|
item.text = `${iconLoading} ${label}`;
|
||
|
|
item.tooltip = "Connecting to Tabby Server...";
|
||
|
|
item.command = undefined;
|
||
|
|
}
|
||
|
|
|
||
|
|
function toReady() {
|
||
|
|
item.color = colorNormal;
|
||
|
|
item.backgroundColor = backgroundColorNormal;
|
||
|
|
item.text = `${iconReady} ${label}`;
|
||
|
|
item.tooltip = "Tabby is providing code suggestions for you.";
|
||
|
|
item.command = "tabby.toggleEnabled";
|
||
|
|
}
|
||
|
|
|
||
|
|
function toDisconnected() {
|
||
|
|
item.color = colorWarning;
|
||
|
|
item.backgroundColor = backgroundColorWarning;
|
||
|
|
item.text = `${iconDisconnected} ${label}`;
|
||
|
|
item.tooltip = "Cannot connect to Tabby Server. Click to open settings.";
|
||
|
|
item.command = "tabby.openSettings";
|
||
|
|
}
|
||
|
|
|
||
|
|
function toDisabled() {
|
||
|
|
item.color = colorWarning;
|
||
|
|
item.backgroundColor = backgroundColorWarning;
|
||
|
|
item.text = `${iconDisabled} ${label}`;
|
||
|
|
item.tooltip = "Tabby is disabled. Click to enable.";
|
||
|
|
item.command = "tabby.toggleEnabled";
|
||
|
|
}
|
||
|
|
|