import * as vscode from 'vscode'; import { MultiStreamService } from './multiStreamService'; import { StreamListItem } from './streamListItem'; export class StreamListDataProvider implements vscode.TreeDataProvider { private _onDidChangeTreeData = new vscode.EventEmitter(); readonly onDidChangeTreeData = this._onDidChangeTreeData.event; private currentItems: StreamListItem[] = []; constructor(private multiStreamService: MultiStreamService) { multiStreamService.onDidChangeStreams(() => { this.refresh(); }); // multiStreamService.onDidChangeLog(() => { // this.refresh(); // }); multiStreamService.onDidChangeActiveStream(() => { this.refresh(); }); } refresh(): void { this._onDidChangeTreeData.fire(); } getTreeItem(element: StreamListItem): vscode.TreeItem { return element; } getParent(element: StreamListItem): vscode.ProviderResult { return null; } getChildren(element?: StreamListItem): Thenable { if (element) { return Promise.resolve([]); } const streams = this.multiStreamService.getStreams(); const activeStreamId = this.multiStreamService.getActiveStreamId(); const items = streams.map(stream => { const logs = this.multiStreamService.getLogsByStream(stream.id); const isActive = stream.id === activeStreamId; return new StreamListItem(stream, logs.length, isActive); }); this.currentItems = items; return Promise.resolve(items); } getActiveItem(): StreamListItem | undefined { const activeStreamId = this.multiStreamService.getActiveStreamId(); return this.currentItems.find(item => item.streamId === activeStreamId); } }