refactor: abstract and simplify the communication between home page and vscode
* refactor the infertace in index.html * adapt the change of interface in home page and vscode
This commit is contained in:
		@@ -214,21 +214,26 @@ header("Allow: GET, POST, OPTIONS, PUT, DELETE");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        async function getUserTokenFromVscode() {
 | 
			
		||||
            // const userToken = 'ecd9ceda7904f1f980b90f22be87329910cc6fb1'
 | 
			
		||||
            const data = await biCommunication2Webview('getUserToken', null)
 | 
			
		||||
            const userToken = data.userToken
 | 
			
		||||
            if (userToken === 'none') {
 | 
			
		||||
                // do nothing
 | 
			
		||||
            } else {
 | 
			
		||||
                // verify user token
 | 
			
		||||
                await verifyToken(userToken)
 | 
			
		||||
                    .then(result => {
 | 
			
		||||
                        USERTOKEN = userToken
 | 
			
		||||
                    })
 | 
			
		||||
                    .catch(error => {
 | 
			
		||||
                        console.error('Error in verifying token:', error)
 | 
			
		||||
                    })
 | 
			
		||||
            }
 | 
			
		||||
            await communicateVSCodeByWebview('getUserToken', null)
 | 
			
		||||
            .then(async data => {
 | 
			
		||||
                const userToken = data.userToken
 | 
			
		||||
                if (userToken === 'none') {
 | 
			
		||||
                    // do nothing
 | 
			
		||||
                } else {
 | 
			
		||||
                    // verify user token
 | 
			
		||||
                    await verifyToken(userToken)
 | 
			
		||||
                        .then(result => {
 | 
			
		||||
                            USERTOKEN = userToken
 | 
			
		||||
                        })
 | 
			
		||||
                        .catch(error => {
 | 
			
		||||
                            console.error('Error in verifying token:', error)
 | 
			
		||||
                        })
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            })
 | 
			
		||||
            .catch(error => [
 | 
			
		||||
                console.log('Failed to get user token: ', error)
 | 
			
		||||
            ])
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function verifyToken(token) {
 | 
			
		||||
@@ -306,7 +311,7 @@ header("Allow: GET, POST, OPTIONS, PUT, DELETE");
 | 
			
		||||
            .then(data => {
 | 
			
		||||
                // store token in global variable and vscode global state
 | 
			
		||||
                USERTOKEN = data.sha1;
 | 
			
		||||
                biCommunication2Webview('setUserToken', { userToken: USERTOKEN })
 | 
			
		||||
                communicateVSCodeByWebview('setUserToken', { userToken: USERTOKEN })
 | 
			
		||||
                .then(result => {
 | 
			
		||||
                    if (result.ok) {
 | 
			
		||||
                        console.log('User token has been set to vscode global state')
 | 
			
		||||
@@ -340,7 +345,7 @@ header("Allow: GET, POST, OPTIONS, PUT, DELETE");
 | 
			
		||||
        function logout() {
 | 
			
		||||
            // remove token from global variable and vscode global state
 | 
			
		||||
            USERTOKEN = null
 | 
			
		||||
            biCommunication2Webview('setUserToken', { userToken: 'none'})
 | 
			
		||||
            communicateVSCodeByWebview('setUserToken', { userToken: 'none'})
 | 
			
		||||
            .then(result => {
 | 
			
		||||
                if (result.ok) {
 | 
			
		||||
                    console.log('User token has been removed from vscode global state')
 | 
			
		||||
@@ -361,7 +366,7 @@ header("Allow: GET, POST, OPTIONS, PUT, DELETE");
 | 
			
		||||
            tableBody.innerHTML = '';
 | 
			
		||||
 | 
			
		||||
            // load new data
 | 
			
		||||
            var url = DEVSTAR_HOME + "/api/v1/user/repos?page=1&limit=10"  
 | 
			
		||||
            var url = DEVSTAR_HOME + "/api/v1/user/repos?page=1&limit=20"  
 | 
			
		||||
            var token = USERTOKEN
 | 
			
		||||
            fetch(url, {
 | 
			
		||||
                method: 'GET',
 | 
			
		||||
@@ -536,6 +541,8 @@ header("Allow: GET, POST, OPTIONS, PUT, DELETE");
 | 
			
		||||
                console.log("There has a problem when check if the repo has devContainer:", error)
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
            console.log("opening project")
 | 
			
		||||
 | 
			
		||||
            // open devcontainer through repoId
 | 
			
		||||
            var url = DEVSTAR_HOME + "/api/devcontainer"  
 | 
			
		||||
            var token = USERTOKEN
 | 
			
		||||
@@ -572,8 +579,8 @@ header("Allow: GET, POST, OPTIONS, PUT, DELETE");
 | 
			
		||||
                    const devContainerPort = data.data.devContainerPort
 | 
			
		||||
                    const devContainerWorkDir = '/data/workspace'
 | 
			
		||||
 | 
			
		||||
                    // default: open with password
 | 
			
		||||
                    firstOpenRemoteFolder(devContainerHost, devContainerUsername, devContainerPassword, devContainerPort, devContainerWorkDir)
 | 
			
		||||
                    // default: open with key
 | 
			
		||||
                    communicateVSCodeByWebview('firstOpenRemoteFolder', {host: `${devContainerHost}`, username: `${devContainerUsername}`, port: `${devContainerPort}`, path: `${devContainerWorkDir}`})
 | 
			
		||||
                } else {
 | 
			
		||||
                    // TODO: show Error to User
 | 
			
		||||
                    showAlert("打开容器失败!", 1500)
 | 
			
		||||
@@ -670,7 +677,7 @@ header("Allow: GET, POST, OPTIONS, PUT, DELETE");
 | 
			
		||||
 | 
			
		||||
        async function getDefaultPublicKeyFromVSCode() {
 | 
			
		||||
            try {
 | 
			
		||||
                const data = await biCommunication2Webview('getDefaultPublicKey', null);
 | 
			
		||||
                const data = await communicateVSCodeByWebview('getDefaultPublicKey', null);
 | 
			
		||||
                const defaultPublicKey = data.defaultPublicKey;
 | 
			
		||||
 | 
			
		||||
                return defaultPublicKey;
 | 
			
		||||
@@ -720,17 +727,18 @@ header("Allow: GET, POST, OPTIONS, PUT, DELETE");
 | 
			
		||||
            }, duration); // 消息显示 duration/1000 秒后消失
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        async function biCommunication2Webview(action, data) {
 | 
			
		||||
        async function communicateVSCodeByWebview(action, data) {
 | 
			
		||||
            return new Promise((resolve, reject) => {
 | 
			
		||||
                // request to webview
 | 
			
		||||
                window.parent.postMessage({ action: action, data: data }, '*');
 | 
			
		||||
                window.parent.postMessage({ target: "vscode", action: action, data: data }, '*');
 | 
			
		||||
 | 
			
		||||
                // response from webview
 | 
			
		||||
                function handleResponse(event) {
 | 
			
		||||
                    const jsonData = event.data
 | 
			
		||||
                    if (jsonData.action === action) {
 | 
			
		||||
                        console.log("biCommunication2Webview", jsonData)
 | 
			
		||||
                        // return webview response
 | 
			
		||||
                        console.log("dataFromVSCodeByWebview", jsonData.data)
 | 
			
		||||
 | 
			
		||||
                        window.removeEventListener('message', handleResponse) // 清理监听器
 | 
			
		||||
                        resolve(jsonData.data)
 | 
			
		||||
                    }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user