Files
devstar_plugin/src/home.ts

136 lines
5.1 KiB
TypeScript
Raw Normal View History

2024-07-02 12:15:39 +08:00
import * as vscode from 'vscode';
import * as os from 'os';
import RemoteContainer from './remote-container';
import User from './user';
import * as utils from './utils'
2024-07-02 12:15:39 +08:00
export default class DSHome {
private context: vscode.ExtensionContext;
private remoteContainer: RemoteContainer;
private user:User;
static defaultUrl = 'http://localhost:8080/test/index.html';
2024-07-02 12:15:39 +08:00
constructor(context: vscode.ExtensionContext) {
this.context = context;
this.user = new User(context);
this.remoteContainer = new RemoteContainer(this.user);
2024-07-02 12:15:39 +08:00
}
async toggle(url: string = DSHome.defaultUrl) {
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,
{
enableScripts: true,
}
2024-07-02 12:15:39 +08:00
);
utils.fetch(url).then(async (content) => {
panel.webview.html = await this.getWebviewContent(content);
})
2024-07-02 12:15:39 +08:00
panel.webview.onDidReceiveMessage(
async (message) => {
const data = message.data
2024-07-02 12:15:39 +08:00
switch (message.command) {
// ----------------- frequent -----------------------
case 'getUserToken':
const userToken = this.user.getUserTokenFromLocal()
if (userToken === undefined) {
panel.webview.postMessage({ command: 'getUserToken', data: {userToken: ''}})
break;
} else {
panel.webview.postMessage({ command: 'getUserToken', data: {userToken: userToken}})
break;
}
case 'getUsername':
const username = this.user.getUsernameFromLocal()
if (username === undefined) {
panel.webview.postMessage({command: 'getUsername', data: {username: ''}})
break;
} else {
panel.webview.postMessage({command: 'getUsername', data: {username: username}})
break;
}
case 'firstOpenRemoteFolder':
const path = data.path
await this.remoteContainer.firstConnect(data.host, data.username, data.port)
.then((_res) => {
if (_res == 'success') {
// only success then open folder
this.remoteContainer.openRemoteFolder(data.host, path);
}
}).catch(error => {
console.error(`Failed to connect ${data.host}: `, error)
})
2024-09-18 20:46:25 +08:00
break;
case 'openRemoteFolder':
this.remoteContainer.openRemoteFolder(data.host, data.path);
2024-09-18 20:46:25 +08:00
break;
// ----------------- not frequent -----------------------
2024-09-18 20:46:25 +08:00
case 'setUserToken':
this.user.setUserTokenToLocal(data.userToken)
if (data.userToken === this.user.getUserTokenFromLocal()) {
2024-09-18 20:46:25 +08:00
panel.webview.postMessage({ command: 'setUserToken', data: {ok: true}})
break;
} else {
panel.webview.postMessage({ command: 'setUserToken', data: {ok: false}})
break;
}
case 'setUsername':
this.user.setUsernameToLocal(data.username);
if (data.username === this.user.getUsernameFromLocal()) {
panel.webview.postMessage({command: 'setUsername', data: {ok: true}});
break;
} else {
panel.webview.postMessage({command: 'setUsername', data: {ok: false}});
break;
}
case 'getUserPublicKey':
var userPublicKey = '';
if (this.user.existUserPrivateKey()) {
userPublicKey = this.user.getUserPublicKey();
panel.webview.postMessage({command: 'getUserPublicKey', data: {userPublicKey: userPublicKey}})
break;
} else {
panel.webview.postMessage({command: 'getUserPublicKey', data: {userPublicKey: userPublicKey}})
break;
}
case 'createUserPublicKey':
2024-10-28 14:58:10 +08:00
await this.user.createUserSSHKey();
if (this.user.existUserPublicKey()) {
panel.webview.postMessage({command: 'createUserPublicKey', data: {ok: true}})
break;
} else {
panel.webview.postMessage({command: 'createUserPublicKey', data: {ok: false}})
break;
}
case 'getMachineName':
const machineName = os.hostname();
panel.webview.postMessage({command: 'getMachineName', data: {machineName: machineName}})
case 'getDefaultPublicKey':
var defaultPublicKey;
if (utils.existDefaultPublicKey()) {
defaultPublicKey = utils.getDefaultPublicKey();
} else {
// if default public key doesn't exist, create it
utils.createSSHKey();
defaultPublicKey = utils.getDefaultPublicKey();
}
panel.webview.postMessage({ command: 'getDefaultPublicKey', data: {defaultPublicKey: defaultPublicKey}})
2024-07-02 12:15:39 +08:00
}
},
undefined,
this.context.subscriptions
2024-07-02 12:15:39 +08:00
);
this.context.subscriptions.push(panel)
2024-07-02 12:15:39 +08:00
}
async getWebviewContent(content: string): Promise<string> {
return `${content}`
2024-07-02 12:15:39 +08:00
}
}