Skip to content

Commit 608954e

Browse files
authored
Merge pull request #40 from zjffun/8-cooperation-with-profiles
feat: manage user snippets of profiles
2 parents 8a5d19c + 0f47609 commit 608954e

File tree

2 files changed

+93
-7
lines changed

2 files changed

+93
-7
lines changed
Lines changed: 83 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,58 @@
11
import * as vscode from "vscode";
2-
import { getUserFolderUri } from "../share";
2+
import {
3+
getProfilesFolderUri,
4+
getStorageJsonUri,
5+
getUserFolderUri,
6+
} from "../share";
7+
import logger from "../utils/logger";
38

4-
export default async () => {
9+
interface IUserDataProfile {
10+
location: string;
11+
name: string;
12+
}
13+
14+
interface IsnippetsFileInfo {
15+
fileName: string;
16+
uri: vscode.Uri;
17+
}
18+
19+
async function getProfileUserSnippetsFilesInfo() {
20+
try {
21+
const storageJsonUri = getStorageJsonUri();
22+
const snippetsTextDoc =
23+
await vscode.workspace.openTextDocument(storageJsonUri);
24+
const storageJsonContent = snippetsTextDoc.getText();
25+
const storageJson = JSON.parse(storageJsonContent);
26+
const userDataProfiles: IUserDataProfile[] =
27+
storageJson?.userDataProfiles || [];
28+
const userSnippetsFolders = userDataProfiles
29+
.filter((profile) => profile.location)
30+
.map((profile) => {
31+
return {
32+
name: profile.name,
33+
uri: vscode.Uri.joinPath(
34+
getProfilesFolderUri(),
35+
profile.location,
36+
"snippets",
37+
),
38+
};
39+
});
40+
41+
return userSnippetsFolders;
42+
} catch (error: any) {
43+
logger.error(error?.message);
44+
return [];
45+
}
46+
}
47+
48+
async function getUserSnippetsFilesInfoByFolderUri(uri: vscode.Uri) {
549
const userSnippetsFileUris = [];
650

7-
const userFolderUri = getUserFolderUri();
851
let userSnippetFiles: [string, vscode.FileType][] = [];
952
try {
10-
userSnippetFiles = await vscode.workspace.fs.readDirectory(userFolderUri);
53+
userSnippetFiles = await vscode.workspace.fs.readDirectory(uri);
1154
} catch (error) {
12-
// havn no .vscode folder, do noting
55+
// havn no folder, do noting
1356
}
1457

1558
for (const [fileName, fileType] of userSnippetFiles) {
@@ -18,11 +61,45 @@ export default async () => {
1861
fileType & vscode.FileType.File &&
1962
(fileName.endsWith(".code-snippets") || fileName.endsWith(".json"))
2063
) {
21-
const snippetUri = vscode.Uri.joinPath(userFolderUri, fileName);
64+
const snippetUri = vscode.Uri.joinPath(uri, fileName);
2265

2366
userSnippetsFileUris.push({ fileName, uri: snippetUri });
2467
}
2568
}
2669

2770
return userSnippetsFileUris;
71+
}
72+
73+
export default async () => {
74+
const userFolderUri = getUserFolderUri();
75+
const profileUserSnippetsFolders = await getProfileUserSnippetsFilesInfo();
76+
77+
if (!profileUserSnippetsFolders?.length) {
78+
const userSnippetsFileInfos =
79+
await getUserSnippetsFilesInfoByFolderUri(userFolderUri);
80+
81+
return userSnippetsFileInfos;
82+
}
83+
84+
const userSnippetsFolders = [
85+
{
86+
name: "default",
87+
uri: userFolderUri,
88+
},
89+
...profileUserSnippetsFolders,
90+
];
91+
92+
const userSnippetsFileInfos: IsnippetsFileInfo[] = [];
93+
for (const { uri, name } of userSnippetsFolders) {
94+
const rawFileInfos = await getUserSnippetsFilesInfoByFolderUri(uri);
95+
96+
const fileInfos = rawFileInfos.map(({ fileName, uri }) => ({
97+
fileName: `${fileName} (${name})`,
98+
uri,
99+
}));
100+
101+
userSnippetsFileInfos.push(...fileInfos);
102+
}
103+
104+
return userSnippetsFileInfos;
28105
};

src/share.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,15 @@ export let context: vscode.ExtensionContext;
1717
export const setContext = (c: vscode.ExtensionContext) => (context = c);
1818

1919
export const getUserFolderUri = () =>
20-
vscode.Uri.joinPath(context.globalStorageUri, "../../snippets");
20+
vscode.Uri.joinPath(context?.globalStorageUri, "../../snippets");
21+
22+
export const getStorageJsonUri = () =>
23+
vscode.Uri.joinPath(
24+
context?.globalStorageUri,
25+
"../../globalStorage/storage.json",
26+
);
27+
28+
export const getProfilesFolderUri = () =>
29+
vscode.Uri.joinPath(context?.globalStorageUri, "../../profiles");
2130

2231
export const isBrowser = vscode.env.appHost !== "desktop";

0 commit comments

Comments
 (0)