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