@@ -10,6 +10,7 @@ import * as path from 'path';
1010const readFile = util . promisify ( fsReadFile ) ;
1111
1212import { instrumentOperation , sendInfo } from "vscode-extension-telemetry-wrapper" ;
13+ import { getExtensionContext } from "../utils" ;
1314
1415let overviewView : vscode . WebviewPanel | undefined ;
1516const KEY_SHOW_WHEN_USING_JAVA = 'showWhenUsingJava' ;
@@ -45,30 +46,40 @@ export async function overviewCmdHandler(context: vscode.ExtensionContext, opera
4546
4647 context . globalState . update ( KEY_OVERVIEW_LAST_SHOW_TIME , Date . now ( ) . toString ( ) ) ;
4748
48- overviewView . iconPath = vscode . Uri . file ( path . join ( context . extensionPath , 'logo.lowres.png' ) ) ;
49- let buffer = await readFile ( path . join ( context . extensionPath , './out/assets/overview/index.html' ) ) ;
50- overviewView . webview . html = buffer . toString ( ) ;
49+ await initializeOverviewView ( context , overviewView , onDidDisposeWebviewPanel ) ;
50+ }
5151
52- overviewView . onDidDispose ( ( ) => {
53- overviewView = undefined ;
54- } ) ;
52+ function onDidDisposeWebviewPanel ( ) {
53+ overviewView = undefined ;
54+ }
55+
56+ async function initializeOverviewView ( context : vscode . ExtensionContext , webviewPanel : vscode . WebviewPanel , onDisposeCallback : ( ) => void ) {
57+ webviewPanel . iconPath = vscode . Uri . file ( path . join ( context . extensionPath , 'logo.lowres.png' ) ) ;
58+ webviewPanel . webview . html = await loadHtmlContent ( context ) ;
59+
60+ context . subscriptions . push ( webviewPanel . onDidDispose ( onDisposeCallback ) ) ;
5561
5662 const installedExtensions = vscode . extensions . all . map ( ext => ext . id . toLowerCase ( ) ) ;
57- overviewView . webview . postMessage ( {
63+ webviewPanel . webview . postMessage ( {
5864 command : 'hideInstalledExtensions' ,
5965 installedExtensions : installedExtensions
6066 } ) ;
6167
62- overviewView . webview . postMessage ( {
68+ webviewPanel . webview . postMessage ( {
6369 command : 'setOverviewVisibility' ,
6470 visibility : context . globalState . get ( KEY_SHOW_WHEN_USING_JAVA )
6571 } ) ;
6672
67- overviewView . webview . onDidReceiveMessage ( ( e ) => {
73+ context . subscriptions . push ( webviewPanel . webview . onDidReceiveMessage ( ( e ) => {
6874 if ( e . command === 'setOverviewVisibility' ) {
6975 toggleOverviewVisibilityOperation ( context , e . visibility ) ;
7076 }
71- } ) ;
77+ } ) ) ;
78+ }
79+
80+ async function loadHtmlContent ( context : vscode . ExtensionContext ) {
81+ let buffer = await readFile ( context . asAbsolutePath ( './out/assets/overview/index.html' ) ) ;
82+ return buffer . toString ( ) ;
7283}
7384
7485export async function showOverviewPageOnActivation ( context : vscode . ExtensionContext ) {
@@ -83,3 +94,16 @@ export async function showOverviewPageOnActivation(context: vscode.ExtensionCont
8394 vscode . commands . executeCommand ( 'java.overview' , showInBackground ) ;
8495 }
8596}
97+
98+ export class OverviewViewSerializer implements vscode . WebviewPanelSerializer {
99+ async deserializeWebviewPanel ( webviewPanel : vscode . WebviewPanel , state : any ) {
100+ if ( overviewView ) {
101+ overviewView . reveal ( ) ;
102+ webviewPanel . dispose ( ) ;
103+ return ;
104+ }
105+
106+ overviewView = webviewPanel ;
107+ initializeOverviewView ( getExtensionContext ( ) , webviewPanel , onDidDisposeWebviewPanel ) ;
108+ }
109+ }
0 commit comments