@@ -16,11 +16,14 @@ import { Refs, Ref, Type } from '../util/refs';
1616import { Delayer } from '../util/async' ;
1717import { Platform } from '../util/platform' ;
1818import { selectWorkspaceFolder } from '../util/workspace' ;
19+ import * as consts from '../util/constants' ;
1920import { ToolsConfig } from '../tools' ;
2021import { Catalog } from './catalog' ;
22+ import LogViewLoader from '../view/log/LogViewLoader' ;
2123
2224import path = require( 'path' ) ;
2325import globby = require( 'globby' ) ;
26+ import treeKill = require( 'tree-kill' ) ;
2427
2528const waitPort = require ( 'wait-port' ) ;
2629const getPort = require ( 'get-port' ) ;
@@ -157,7 +160,25 @@ export class Component extends OpenShiftItem {
157160 ( value : OpenShiftObject ) => value . contextValue === ContextType . COMPONENT_PUSHED
158161 ) ;
159162 if ( ! component ) return null ;
160- Component . odo . executeInTerminal ( Command . showLog ( component . getParent ( ) . getParent ( ) . getName ( ) , component . getParent ( ) . getName ( ) , component . getName ( ) ) , component . contextPath . fsPath ) ;
163+ const cmd = Command . showLog ( component . getParent ( ) . getParent ( ) . getName ( ) , component . getParent ( ) . getName ( ) , component . getName ( ) ) ;
164+ const panel = LogViewLoader . loadView ( extensions . getExtension ( consts . ExtenisonID ) . extensionPath , `${ component . path } Log` , cmd ) ;
165+ const [ tool , ...params ] = cmd . split ( ' ' ) ;
166+ const process = await Component . odo . spawn ( tool , params , component . contextPath . fsPath ) ;
167+ process . stdout . on ( 'data' , ( data ) => {
168+ panel . webview . postMessage ( { action : 'add' , data : `${ data } ` . trim ( ) . split ( '\n' ) } ) ;
169+ } ) . on ( 'end' , ( data ) => {
170+ panel . webview . postMessage ( { action : 'finished' } ) ;
171+ } ) ;
172+ const recieveDisposable = panel . webview . onDidReceiveMessage ( ( event ) => {
173+ if ( event . action === 'stop' ) {
174+ treeKill ( process . pid ) ;
175+ recieveDisposable . dispose ( ) ;
176+ }
177+ } )
178+ const disposable = panel . onDidDispose ( ( ) => {
179+ treeKill ( process . pid ) ;
180+ disposable . dispose ( ) ;
181+ } ) ;
161182 }
162183
163184 static async followLog ( context : OpenShiftObject ) : Promise < string > {
@@ -168,7 +189,25 @@ export class Component extends OpenShiftItem {
168189 ( value : OpenShiftObject ) => value . contextValue === ContextType . COMPONENT_PUSHED
169190 ) ;
170191 if ( ! component ) return null ;
171- Component . odo . executeInTerminal ( Command . showLogAndFollow ( component . getParent ( ) . getParent ( ) . getName ( ) , component . getParent ( ) . getName ( ) , component . getName ( ) ) , component . contextPath . fsPath ) ;
192+ const cmd = Command . showLogAndFollow ( component . getParent ( ) . getParent ( ) . getName ( ) , component . getParent ( ) . getName ( ) , component . getName ( ) ) ;
193+ const panel = LogViewLoader . loadView ( extensions . getExtension ( consts . ExtenisonID ) . extensionPath , `${ component . path } Follow Log` , cmd ) ;
194+ const [ tool , ...params ] = cmd . split ( ' ' ) ;
195+ const process = await Component . odo . spawn ( tool , params , component . contextPath . fsPath ) ;
196+ process . stdout . on ( 'data' , ( data ) => {
197+ panel . webview . postMessage ( { action : 'add' , data : `${ data } ` . trim ( ) . split ( '\n' ) } ) ;
198+ } ) . on ( 'close' , ( ) => {
199+ panel . webview . postMessage ( { action : 'finished' } ) ;
200+ } ) ;
201+ const recieveDisposable = panel . webview . onDidReceiveMessage ( ( event ) => {
202+ if ( event . action === 'stop' ) {
203+ treeKill ( process . pid ) ;
204+ recieveDisposable . dispose ( ) ;
205+ }
206+ } )
207+ const disposable = panel . onDidDispose ( ( ) => {
208+ treeKill ( process . pid ) ;
209+ disposable . dispose ( ) ;
210+ } ) ;
172211 }
173212
174213 private static async getLinkData ( component : OpenShiftObject ) : Promise < any > {
0 commit comments