Created a vs code extension with Claude
This commit is contained in:
96
vscode-appdaemon/src/statusBar.ts
Normal file
96
vscode-appdaemon/src/statusBar.ts
Normal file
@@ -0,0 +1,96 @@
|
||||
import * as vscode from 'vscode';
|
||||
import { ADClient } from './adClient';
|
||||
|
||||
export class StatusBarManager {
|
||||
private restartADItem: vscode.StatusBarItem;
|
||||
private restartHAItem: vscode.StatusBarItem;
|
||||
private productionModeItem: vscode.StatusBarItem;
|
||||
private errorItem: vscode.StatusBarItem;
|
||||
private contextualItem: vscode.StatusBarItem;
|
||||
|
||||
constructor(private adClient: ADClient) {
|
||||
// Reload AppDaemon apps
|
||||
this.restartADItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 100);
|
||||
this.restartADItem.command = 'appdaemon.restartAD';
|
||||
this.restartADItem.text = '$(refresh) AD Apps';
|
||||
this.restartADItem.tooltip = 'Reload all AppDaemon Apps';
|
||||
this.restartADItem.show();
|
||||
|
||||
// Restart Home Assistant
|
||||
this.restartHAItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 99);
|
||||
this.restartHAItem.command = 'appdaemon.restartHA';
|
||||
this.restartHAItem.text = '$(home) HA';
|
||||
this.restartHAItem.tooltip = 'Restart Home Assistant';
|
||||
this.restartHAItem.show();
|
||||
|
||||
// Production mode toggle
|
||||
this.productionModeItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 98);
|
||||
this.productionModeItem.command = 'appdaemon.toggleProductionMode';
|
||||
this.updateProductionModeDisplay();
|
||||
this.productionModeItem.show();
|
||||
|
||||
// Error log shortcut
|
||||
this.errorItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 97);
|
||||
this.errorItem.command = 'appdaemon.showErrors';
|
||||
this.errorItem.text = '$(check) AD Errors';
|
||||
this.errorItem.tooltip = 'Show AppDaemon Error Log';
|
||||
this.errorItem.show();
|
||||
|
||||
// Contextual per-file restart button (hidden by default)
|
||||
this.contextualItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 101);
|
||||
this.contextualItem.command = 'appdaemon.restartCurrentFileApps';
|
||||
|
||||
// React to production mode changes
|
||||
adClient.onProductionModeChanged(() => this.updateProductionModeDisplay());
|
||||
}
|
||||
|
||||
/**
|
||||
* Update (or hide) the contextual button based on apps found in the current file.
|
||||
* @param appNames App names parsed from the active YAML, or empty to hide.
|
||||
*/
|
||||
updateContextualApps(appNames: string[]) {
|
||||
if (appNames.length === 0) {
|
||||
this.contextualItem.hide();
|
||||
return;
|
||||
}
|
||||
const label = appNames.length <= 2
|
||||
? appNames.join(', ')
|
||||
: `${appNames.length} apps`;
|
||||
this.contextualItem.text = `$(debug-restart) ${label}`;
|
||||
this.contextualItem.tooltip = `Restart: ${appNames.join(', ')}`;
|
||||
this.contextualItem.show();
|
||||
}
|
||||
|
||||
updateProductionModeDisplay() {
|
||||
const isProduction = this.adClient.isProductionMode();
|
||||
if (isProduction) {
|
||||
this.productionModeItem.text = '$(eye-closed) Prod ON';
|
||||
this.productionModeItem.tooltip = 'Production Mode: ON — click to disable';
|
||||
this.productionModeItem.backgroundColor = new vscode.ThemeColor('statusBarItem.warningBackground');
|
||||
} else {
|
||||
this.productionModeItem.text = '$(eye) Prod OFF';
|
||||
this.productionModeItem.tooltip = 'Production Mode: OFF — click to enable';
|
||||
this.productionModeItem.backgroundColor = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
setErrorCount(count: number) {
|
||||
if (count > 0) {
|
||||
this.errorItem.text = `$(warning) AD Errors (${count})`;
|
||||
this.errorItem.backgroundColor = new vscode.ThemeColor('statusBarItem.errorBackground');
|
||||
this.errorItem.tooltip = `${count} error(s) in AppDaemon log — click to view`;
|
||||
} else {
|
||||
this.errorItem.text = '$(check) AD Errors';
|
||||
this.errorItem.backgroundColor = undefined;
|
||||
this.errorItem.tooltip = 'No AppDaemon errors — click to view log';
|
||||
}
|
||||
}
|
||||
|
||||
dispose() {
|
||||
this.restartADItem.dispose();
|
||||
this.restartHAItem.dispose();
|
||||
this.productionModeItem.dispose();
|
||||
this.errorItem.dispose();
|
||||
this.contextualItem.dispose();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user