import * as vscode from 'vscode'; import { LogChannel } from './LogChannel'; /** * @class * @name LoggerEventHub * @description Application event hub */ export class LoggerEventHub { public readonly onDidChangeEmitter = new vscode.EventEmitter(); public get onEvent(): vscode.Event { return this.onDidChangeEmitter.event; } public broadcastEvent(data: LoggerEventHubMessage) { this.onDidChangeEmitter.fire(data); this.logChannel.AppendLog(data.toString()); if(data.foreground){ switch(data.severity){ case LoggerEventHubMessageSeverity.info: vscode.window.showInformationMessage(this.name + ": " + data.description); break case LoggerEventHubMessageSeverity.success: vscode.window.showInformationMessage(this.name + ": "+ data.description + " (success)"); break case LoggerEventHubMessageSeverity.warning: vscode.window.showWarningMessage(this.name + ": " + data.description); break case LoggerEventHubMessageSeverity.error: vscode.window.showErrorMessage(this.name + ": " + data.description); break default: break } } } private logChannel : LogChannel; constructor(readonly name: string){ this.logChannel = new LogChannel(name); } } /** * @class * @name LoggerEventHubMessageSeverity * @description Events severity type */ export enum LoggerEventHubMessageSeverity { info = "info", success = "success", warning = "warning", error = "error" }; /** * @class * @name LoggerEventHubMessage * @description Events model */ export class LoggerEventHubMessage { constructor( readonly description: string, readonly severity: LoggerEventHubMessageSeverity, readonly foreground: boolean = false ) { } public toString() : string { return "("+this.severity.toString()+") "+this.description; } }