-
Notifications
You must be signed in to change notification settings - Fork 0
/
extension.js
128 lines (112 loc) · 3.73 KB
/
extension.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
const vscode = require("vscode");
const { Server } = require("socket.io");
const cors = require("cors");
const express = require("express");
const http = require("http"); // Add this line to import http
const { io } = require("socket.io-client");
require("dotenv").config();
/**
* @param {vscode.ExtensionContext} context
*/
function activate(context) {
const socket = io("https://codeshare-azkv.onrender.com");
socket.on('connect', () => {
socket.emit("Extension");
});
socket.on("reqFileSystemFromExtension", (msg) => {
console.log("req")
fileSystemRetreive(socket, msg)});
socket.on("reqFileContentFromExtension", (msg) => {
getFileContent(socket, msg);
});
vscode.workspace.onDidSaveTextDocument((document) => {
socket.emit("fileSavedFromExtension", { docName: document.fileName });
});
console.log('Congratulations, your extension "codeshare" is now active!');
// Register a VS Code command
const disposable = vscode.commands.registerCommand(
"codeshare.helloWorld",
function () {
vscode.window.showInformationMessage("Hello World from CodeShare!");
}
);
// Push disposables to context subscriptions
context.subscriptions.push(disposable);
}
// This method is called when your extension is deactivated
function deactivate() {}
module.exports = {
activate,
deactivate,
};
const getFileContent = async (socket, msg) => {
try {
const path = await getFileUri(msg.name);
const doc = await vscode.workspace.openTextDocument(path);
const text = doc.getText();
socket.emit("sendFileContentFromExtension", {text, socket:msg.socket, name:msg.name});
} catch (error) {
vscode.window.showErrorMessage(`Error: ${error}`);
}
};
const getFileUri = async (name) => {
try {
const files = await vscode.workspace.findFiles(`**/${name}`);
if (files.length > 0) {
const fileUri = files[0];
return fileUri;
} else {
vscode.window.showErrorMessage(`File "${filename}" not found.`);
return null;
}
} catch (error) {
vscode.window.showErrorMessage(`Error: ${error}`);
}
};
const fileSystemRetreive = async (socket, id) => {
try {
const workspaceFolders = vscode.workspace.workspaceFolders;
if (workspaceFolders && workspaceFolders.length > 0) {
const folderUri = workspaceFolders[0].uri;
const files = await folderSearch(folderUri);
socket.emit("sendFileSystemFromExtension", {files, socket:id});
} else {
vscode.window.showInformationMessage("No workspace folder found.");
}
} catch (error) {
console.error("Error reading directory:", error);
vscode.window.showErrorMessage("Error reading the workspace folder.");
}
};
const folderSearch = async (uri) => {
const files = await vscode.workspace.fs.readDirectory(uri);
const formattedFiles = await Promise.all(
files.map(async ([name, type]) => {
const newUri = vscode.Uri.joinPath(uri, name);
const isHidden = await checkIfHidden(newUri); // Check if the file is hidden
let subFolder = [];
if (type === vscode.FileType.Directory) {
subFolder = await folderSearch(newUri);
}
return {
name: name,
isFolder: type === vscode.FileType.Directory,
opened: false,
isHidden: isHidden, // Add isHidden property
subFolder: subFolder,
};
})
);
return formattedFiles;
};
// Function to check if a file is hidden
const checkIfHidden = async (uri) => {
try {
const stats = await vscode.workspace.fs.stat(uri);
// Check if the name starts with '.' (common for hidden files)
return uri.path.split('/').pop().startsWith('.');
} catch (error) {
console.error(`Error checking if hidden: ${error}`);
return false; // Default to false if there's an error
}
};