Files
hsa/code-server-like/static/js/code-like-extension.js
2025-10-26 21:37:17 +08:00

105 lines
3.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

let vs_socket = null;
let debounceTimeout;
// 定义代码类型到文件后缀的映射
const typeToExtension = {
'python': 'py',
'cpp': 'cpp',
'javascript': 'js',
'java': 'java',
'html': 'html',
'css': 'css',
'php': 'php',
'ruby': 'rb',
'go': 'go',
'c': 'c',
'cs': 'cs'
// 可以根据需要添加更多映射
};
// 缓冲器函数(防抖)
function debounceSendToServer(data, delay) {
if (debounceTimeout) {
clearTimeout(debounceTimeout);
}
debounceTimeout = setTimeout(() => {
sendToServer(data);
}, delay);
}
function sendToServer(data){
try {
if (!vs_socket) {
return;
}
console.log('Sending data to Flask server:', data);
vs_socket.emit('message', data)
} catch (error) {
console.error('Error sending data to Flask server:', error);
}
}
function ChangeActiveTextEditor(path){ //打开文件
console.log(`Current open file: ${path}`);
sendToServer({
type: 'activeFile',
filePath: path,
config: code_like_config,
});
}
function ChangeWorkspacefileTree(fileTree) {
if (fileTree){
sendToServer({
type: 'workspaceFolders',
fileTree: fileTree,
config: code_like_config,
});
}
}
// vscode.window.showInformationMessage('Connecting to server...');
vs_socket = io('vscode');
vs_socket.on('connect', () => {
// vscode.window.showInformationMessage('Connected to server');
console.log('Connected to server');
vs_socket.emit('login', { config: code_like_config });
vs_socket.emit('load_chapter',{config: code_like_config})
});
vs_socket.on('disconnect', () => {
// vscode.window.showInformationMessage('Disconnected from server');
console.log('Disconnected from server');
});
vs_socket.on('terminal',(data)=>{
// vscode.window.showInformationMessage('Terminal command received'+data);
socket.emit("pty_input", {"input": data.data+'\r\n'}, function(response) {
});
})
vs_socket.on('code-file',(data)=>{
if (data.type=='create'){
let title = data.chapter_title
let content = data.data
const codeBlockRegex = /^```(\w+)\s([\s\S]*?)\s```$/;
const match = content.match(codeBlockRegex);
if (match && match.length >= 3) {
const codeType = match[1].toLowerCase();
const codeContent = match[2].trim();
// 根据代码类型获取后缀如果没有匹配的则使用txt
const fileExtension = typeToExtension[codeType] || 'txt';
console.log('代码类型:', codeType);
console.log('文件后缀:', fileExtension);
console.log('代码内容:', codeContent);
createAndWriteNewFile(title+'.'+fileExtension, codeContent)
// 这里可以使用解析出的结果进行后续操作
} else {
console.error('无效的代码格式');
// 处理格式错误的情况
}
}
})