feat: add communication method without return value that communicate with devstar-home
This commit is contained in:
182
src/home.ts
182
src/home.ts
@@ -9,7 +9,7 @@ export default class DSHome {
|
||||
private remoteContainer: RemoteContainer;
|
||||
private user: User;
|
||||
private devstarHomePageUrl: string;
|
||||
private devstarDomain: string|undefined
|
||||
private devstarDomain: string | undefined
|
||||
|
||||
constructor(context: vscode.ExtensionContext) {
|
||||
this.context = context;
|
||||
@@ -40,94 +40,100 @@ export default class DSHome {
|
||||
panel.webview.onDidReceiveMessage(
|
||||
async (message) => {
|
||||
const data = message.data
|
||||
switch (message.command) {
|
||||
// ----------------- frequent -----------------------
|
||||
case 'getUserToken':
|
||||
const userToken = this.user.getUserTokenFromLocal()
|
||||
if (userToken === undefined) {
|
||||
panel.webview.postMessage({ command: 'getUserToken', data: { userToken: '' } })
|
||||
const need_return = message.need_return
|
||||
if (!need_return) {
|
||||
// ================= don't need return ==============
|
||||
} else {
|
||||
// ================= need return ====================
|
||||
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':
|
||||
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, data.username, data.port, data.path);
|
||||
}
|
||||
}).catch(error => {
|
||||
console.error(`Failed to connect ${data.host}: `, error)
|
||||
})
|
||||
break;
|
||||
} else {
|
||||
panel.webview.postMessage({ command: 'getUserToken', data: { userToken: userToken } })
|
||||
case 'openRemoteFolder':
|
||||
this.remoteContainer.openRemoteFolder(data.host, data.username, data.port, data.path);
|
||||
break;
|
||||
}
|
||||
case 'getUsername':
|
||||
const username = this.user.getUsernameFromLocal()
|
||||
if (username === undefined) {
|
||||
panel.webview.postMessage({ command: 'getUsername', data: { username: '' } })
|
||||
case 'getDevstarDomain':
|
||||
panel.webview.postMessage({ command: 'getDevstarDomain', data: { devstarDomain: this.devstarDomain } })
|
||||
break;
|
||||
} else {
|
||||
panel.webview.postMessage({ command: 'getUsername', data: { username: username } })
|
||||
break;
|
||||
}
|
||||
case 'firstOpenRemoteFolder':
|
||||
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, data.username, data.port, data.path);
|
||||
}
|
||||
}).catch(error => {
|
||||
console.error(`Failed to connect ${data.host}: `, error)
|
||||
})
|
||||
break;
|
||||
case 'openRemoteFolder':
|
||||
this.remoteContainer.openRemoteFolder(data.host, data.username, data.port, data.path);
|
||||
break;
|
||||
case 'getDevstarDomain':
|
||||
panel.webview.postMessage({command: 'getDevstarDomain', data:{ devstarDomain: this.devstarDomain}})
|
||||
break;
|
||||
// ----------------- not frequent -----------------------
|
||||
case 'setUserToken':
|
||||
this.user.setUserTokenToLocal(data.userToken)
|
||||
if (data.userToken === this.user.getUserTokenFromLocal()) {
|
||||
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':
|
||||
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 } })
|
||||
// ----------------- not frequent -----------------------
|
||||
case 'setUserToken':
|
||||
this.user.setUserTokenToLocal(data.userToken)
|
||||
if (data.userToken === this.user.getUserTokenFromLocal()) {
|
||||
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':
|
||||
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 } })
|
||||
}
|
||||
}
|
||||
},
|
||||
undefined,
|
||||
@@ -183,7 +189,7 @@ export default class DSHome {
|
||||
async function communicateVSCode(command, data) {
|
||||
return new Promise((resolve, reject) => {
|
||||
// request to vscode
|
||||
vscode.postMessage({ command: command, data: data })
|
||||
vscode.postMessage({ command: command, need_return: true, data: data })
|
||||
|
||||
function handleResponse(event) {
|
||||
const jsonData = event.data;
|
||||
@@ -223,6 +229,8 @@ export default class DSHome {
|
||||
if (iframe && iframe.contentWindow) {
|
||||
iframe.contentWindow.postMessage({ action: actionFromHome, data: dataFromVSCodeResponse }, '*')
|
||||
}
|
||||
} else if (jsonData.target === 'vscode_no_return') {
|
||||
vscode.postMessage({ command: jsonData.action, need_return: false, data: jsonData.data })
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error parsing message:', error);
|
||||
|
Reference in New Issue
Block a user