'use strict'; // This code is originally from https://github.com/DonJayamanne/bowerVSCode // License: https://github.com/DonJayamanne/bowerVSCode/blob/master/LICENSE import { window, StatusBarItem, StatusBarAlignment } from 'vscode'; export default class ProgressIndicator { private _statusBarItem: StatusBarItem; constructor() { this._statusBarItem = window.createStatusBarItem(StatusBarAlignment.Left); } private _tasks: string[] = []; public beginTask(task: string): void { this._tasks.push(task); this.displayProgressIndicator(); } public endTask(task: string): void { if (this._tasks.length > 0) { this._tasks.pop(); } this.setMessage(); } private setMessage(): void { if (this._tasks.length === 0) { this._statusBarItem.text = ''; this.hideProgressIndicator(); return; } this._statusBarItem.text = this._tasks[this._tasks.length - 1]; this._statusBarItem.show(); } private _interval: any; private displayProgressIndicator(): void { this.setMessage(); this.hideProgressIndicator(); this._interval = setInterval(() => this.onDisplayProgressIndicator(), 100); } private hideProgressIndicator(): void { if (this._interval) { clearInterval(this._interval); this._interval = undefined; } this.ProgressCounter = 0; } private ProgressText = ['|', '/', '-', '\\', '|', '/', '-', '\\']; private ProgressCounter = 0; private onDisplayProgressIndicator(): void { if (this._tasks.length === 0) { return; } let txt = this.ProgressText[this.ProgressCounter]; this._statusBarItem.text = this._tasks[this._tasks.length - 1] + ' ' + txt; this.ProgressCounter++; if (this.ProgressCounter >= this.ProgressText.length - 1) { this.ProgressCounter = 0; } } }