Skip to content

Commit 44cb49c

Browse files
Merge pull request #240 from intersystems-community/fix-create-new-isfs
fix for creating new files on isfs
2 parents 2ff91d1 + 660766f commit 44cb49c

File tree

1 file changed

+53
-59
lines changed

1 file changed

+53
-59
lines changed

src/providers/FileSystemPovider/FileSystemProvider.ts

Lines changed: 53 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,28 @@ export class FileSystemProvider implements vscode.FileSystemProvider {
9292
return this._lookupAsFile(uri).then((file: File) => file.data);
9393
}
9494

95+
private generateFileContent(fileName: string, content: Buffer): { content: string[]; enc: boolean } {
96+
const fileExt = fileName.split(".").pop().toLowerCase();
97+
if (fileExt === "cls") {
98+
const className = fileName.split(".").slice(0, -1).join(".");
99+
return {
100+
content: [`Class ${className} {}`],
101+
enc: false,
102+
};
103+
} else if (["int", "inc", "mac"].includes(fileExt)) {
104+
const routineName = fileName.split(".").slice(0, -1).join(".");
105+
const routineType = `[ type = ${fileExt}]`;
106+
return {
107+
content: [`ROUTINE ${routineName} ${routineType}`],
108+
enc: false,
109+
};
110+
}
111+
return {
112+
content: [content.toString("base64")],
113+
enc: true,
114+
};
115+
}
116+
95117
public writeFile(
96118
uri: vscode.Uri,
97119
content: Buffer,
@@ -111,66 +133,38 @@ export class FileSystemProvider implements vscode.FileSystemProvider {
111133
}
112134
const api = new AtelierAPI(uri);
113135
return this._lookupAsFile(uri)
114-
.then((file) => (file.data = content))
136+
.then(() => Promise.reject())
137+
.catch((error) => {
138+
if (error.code === "FileNotFound") {
139+
return;
140+
}
141+
return Promise.reject();
142+
})
115143
.then(() => {
116-
api
117-
.actionIndex([fileName])
118-
.then((data) => data.result.content[0])
119-
.then((info) => {
120-
if (info.status === "") {
121-
/// file found, everything is Ok
122-
return;
123-
}
124-
if (options.create) {
125-
if (csp) {
126-
return api.putDoc(
127-
fileName,
128-
{
129-
content: [content.toString("base64")],
130-
enc: true,
131-
mtime: Date.now(),
132-
},
133-
false
134-
);
135-
}
136-
const fileExt = fileName.split(".").pop().toLowerCase();
137-
if (fileExt === "cls") {
138-
const className = fileName.split(".").slice(0, -1).join(".");
139-
return api.putDoc(
140-
fileName,
141-
{
142-
content: [`Class ${className} {}`],
143-
enc: false,
144-
mtime: Date.now(),
145-
},
146-
false
147-
);
148-
} else if (["int", "inc", "mac"].includes(fileExt)) {
149-
const api = new AtelierAPI(uri);
150-
const routineName = fileName.split(".").slice(0, -1).join(".");
151-
const routineType = `[ type = ${fileExt}]`;
152-
return api.putDoc(
153-
fileName,
154-
{
155-
content: [`ROUTINE ${routineName} ${routineType}`],
156-
enc: false,
157-
mtime: Date.now(),
158-
},
159-
false
160-
);
161-
}
162-
throw new Error("Not implemented");
163-
}
164-
})
165-
.then((response) => {
166-
if (response && response.result.ext && response.result.ext[0] && response.result.ext[1]) {
167-
fireOtherStudioAction(OtherStudioAction.CreatedNewDocument, uri, response.result.ext[0]);
168-
fireOtherStudioAction(OtherStudioAction.FirstTimeDocumentSave, uri, response.result.ext[1]);
169-
}
170-
this._lookupAsFile(uri).then((entry) => {
171-
this._fireSoon({ type: vscode.FileChangeType.Changed, uri });
172-
});
173-
});
144+
const newContent = this.generateFileContent(fileName, content);
145+
return api.putDoc(
146+
fileName,
147+
{
148+
...newContent,
149+
mtime: Date.now(),
150+
},
151+
false
152+
);
153+
})
154+
.catch((error) => {
155+
if (error.error?.result?.status) {
156+
throw vscode.FileSystemError.Unavailable(error.error.result.status);
157+
}
158+
throw vscode.FileSystemError.Unavailable(error.message);
159+
})
160+
.then((response) => {
161+
if (response && response.result.ext && response.result.ext[0] && response.result.ext[1]) {
162+
fireOtherStudioAction(OtherStudioAction.CreatedNewDocument, uri, response.result.ext[0]);
163+
fireOtherStudioAction(OtherStudioAction.FirstTimeDocumentSave, uri, response.result.ext[1]);
164+
}
165+
this._lookupAsFile(uri).then((entry) => {
166+
this._fireSoon({ type: vscode.FileChangeType.Changed, uri });
167+
});
174168
});
175169
}
176170

0 commit comments

Comments
 (0)