2024-07-02 12:15:39 +08:00
|
|
|
import * as vscode from 'vscode';
|
2024-07-16 17:37:42 +08:00
|
|
|
import RemoteContainer from './remote-container';
|
2024-09-18 20:46:25 +08:00
|
|
|
import {fetch} from './utils'
|
2024-07-02 12:15:39 +08:00
|
|
|
|
2024-07-16 23:28:56 +08:00
|
|
|
export default class DSHome {
|
2024-07-16 17:37:42 +08:00
|
|
|
private context: vscode.ExtensionContext;
|
|
|
|
private remoteContainer: RemoteContainer;
|
2024-10-01 11:58:55 +08:00
|
|
|
static defaultUrl = 'http://localhost:8080/test/index.html';
|
2024-07-02 12:15:39 +08:00
|
|
|
|
2024-07-03 11:55:49 +08:00
|
|
|
constructor(context: vscode.ExtensionContext) {
|
|
|
|
this.context = context;
|
2024-07-16 17:37:42 +08:00
|
|
|
this.remoteContainer = new RemoteContainer()
|
2024-07-02 12:15:39 +08:00
|
|
|
}
|
|
|
|
|
2024-07-16 23:28:56 +08:00
|
|
|
async toggle(url: string = DSHome.defaultUrl) {
|
2024-07-16 17:37:42 +08:00
|
|
|
console.log(url);
|
2024-07-02 12:15:39 +08:00
|
|
|
const panel = vscode.window.createWebviewPanel(
|
2024-09-18 20:46:25 +08:00
|
|
|
'homeWebview',
|
|
|
|
'Home',
|
2024-07-02 12:15:39 +08:00
|
|
|
vscode.ViewColumn.One,
|
2024-07-16 17:37:42 +08:00
|
|
|
{
|
|
|
|
enableScripts: true,
|
|
|
|
}
|
2024-07-02 12:15:39 +08:00
|
|
|
);
|
|
|
|
|
2024-07-16 17:37:42 +08:00
|
|
|
fetch(url).then(async (content) => {
|
|
|
|
panel.webview.html = await this.getWebviewContent(content);
|
|
|
|
})
|
2024-07-02 12:15:39 +08:00
|
|
|
|
|
|
|
panel.webview.onDidReceiveMessage(
|
2024-07-16 17:37:42 +08:00
|
|
|
async (message) => {
|
2024-07-02 12:15:39 +08:00
|
|
|
switch (message.command) {
|
2024-07-16 17:37:42 +08:00
|
|
|
case 'firstOpenRemoteFolder':
|
2024-07-30 23:35:08 +08:00
|
|
|
await this.remoteContainer.firstConnect(message.host, message.username, message.password, message.port)
|
2024-10-15 17:13:58 +08:00
|
|
|
.then((_res) => {
|
|
|
|
if (_res == 'success') {
|
|
|
|
// only success then open folder
|
|
|
|
this.remoteContainer.openRemoteFolder(message.host, message.path);
|
|
|
|
}
|
|
|
|
}).catch(error => {
|
|
|
|
console.error(`Failed to connect ${message.host}: `, error)
|
2024-07-30 23:35:08 +08:00
|
|
|
})
|
2024-09-18 20:46:25 +08:00
|
|
|
break;
|
2024-07-16 17:37:42 +08:00
|
|
|
case 'openRemoteFolder':
|
|
|
|
this.remoteContainer.openRemoteFolder(message.host, message.path);
|
2024-09-18 20:46:25 +08:00
|
|
|
break;
|
|
|
|
case 'getUserToken':
|
|
|
|
const userToken = this.context.globalState.get('devstarUserToken')
|
|
|
|
if (userToken === undefined) {
|
|
|
|
panel.webview.postMessage({ command: 'getUserToken', data: {userToken: 'none'}})
|
|
|
|
break;
|
|
|
|
} else {
|
|
|
|
panel.webview.postMessage({ command: 'getUserToken', data: {userToken: userToken}})
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 'setUserToken':
|
|
|
|
this.context.globalState.update('devstarUserToken', message.data.userToken)
|
|
|
|
console.log(this.context.globalState.get('devstarUserToken'))
|
|
|
|
console.log(message.data.userToken)
|
|
|
|
if (message.data.userToken === this.context.globalState.get('devstarUserToken')) {
|
|
|
|
panel.webview.postMessage({ command: 'setUserToken', data: {ok: true}})
|
|
|
|
break;
|
|
|
|
} else {
|
|
|
|
panel.webview.postMessage({ command: 'setUserToken', data: {ok: false}})
|
|
|
|
break;
|
|
|
|
}
|
2024-07-02 12:15:39 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
undefined,
|
2024-07-03 11:55:49 +08:00
|
|
|
this.context.subscriptions
|
2024-07-02 12:15:39 +08:00
|
|
|
);
|
2024-07-03 11:55:49 +08:00
|
|
|
|
|
|
|
this.context.subscriptions.push(panel)
|
2024-07-02 12:15:39 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2024-07-16 17:37:42 +08:00
|
|
|
async getWebviewContent(content: string): Promise<string> {
|
|
|
|
return `${content}`
|
2024-07-02 12:15:39 +08:00
|
|
|
}
|
|
|
|
}
|