Skip to content

Commit 33b96d7

Browse files
committed
#372: Better fix
1 parent 7b71f9c commit 33b96d7

2 files changed

Lines changed: 16 additions & 4 deletions

File tree

client/src/extension.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ export function getCookies(server: ServerSpec): string[] {
6565
let objectScriptApi;
6666
let serverManagerApi: serverManager.ServerManagerAPI;
6767

68+
/** Resolved connection information for each workspace folder */
69+
const wsFolderServerSpecs: Map<string, ServerSpec> = new Map();
70+
6871
type MakeRESTRequestParams = {
6972
method: "GET"|"POST";
7073
api: number;
@@ -150,13 +153,17 @@ export async function activate(context: ExtensionContext) {
150153

151154
// Send custom notifications when the connection or password changes
152155
objectScriptApi.onDidChangeConnection()(() => {
156+
wsFolderServerSpecs.clear();
153157
client.sendNotification("intersystems/server/connectionChange");
154158
});
155159
const serverManagerExt = extensions.getExtension("intersystems-community.servermanager");
156160
if (serverManagerExt !== undefined) {
157161
// The server manager extension is installed
158162
serverManagerApi = serverManagerExt.isActive ? serverManagerExt.exports : await serverManagerExt.activate();
159163
serverManagerApi.onDidChangePassword()((serverName: string) => {
164+
for (const [k,v] of wsFolderServerSpecs.entries()) {
165+
if (v.serverName == serverName) wsFolderServerSpecs.delete(k);
166+
}
160167
client.sendNotification("intersystems/server/passwordChange",serverName);
161168
});
162169
}
@@ -165,7 +172,9 @@ export async function activate(context: ExtensionContext) {
165172
context.subscriptions.push(
166173
// Register custom request handlers
167174
client.onRequest("intersystems/server/resolveFromUri", async (uri: string) => {
168-
let serverSpec = objectScriptApi.serverForUri(Uri.parse(uri));
175+
const uriObj = Uri.parse(uri);
176+
const wsFolderUriString = workspace.getWorkspaceFolder(uriObj)?.uri.toString();
177+
let serverSpec = objectScriptApi.serverForUri(uriObj);
169178
if (
170179
// Server was resolved
171180
serverSpec.host !== "" &&
@@ -203,6 +212,9 @@ export async function activate(context: ExtensionContext) {
203212
// UnknownUser without a password means "unauthenticated"
204213
serverSpec.username = undefined;
205214
}
215+
if (wsFolderUriString && !wsFolderServerSpecs.has(wsFolderUriString)) {
216+
wsFolderServerSpecs.set(wsFolderUriString, serverSpec);
217+
}
206218
return serverSpec;
207219
}),
208220
client.onRequest("intersystems/uri/localToVirtual", (uri: string): string => {
@@ -372,7 +384,7 @@ export async function deactivate(): Promise<void> {
372384
const loggedOut: Set<string> = new Set();
373385
const promises: Promise<any>[] = client ? [client.stop()] : [];
374386
for (const f of workspace.workspaceFolders ?? []) {
375-
const serverSpec: ServerSpec = objectScriptApi.serverForUri(f.uri);
387+
const serverSpec = wsFolderServerSpecs.get(f.uri.toString());
376388
if (!serverSpec?.active) continue;
377389
const sessionCookie = getCookies(serverSpec).find((c) => c.startsWith("CSPSESSIONID-"));
378390
if (!sessionCookie || loggedOut.has(sessionCookie)) continue;

server/src/server.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ connection.onNotification("intersystems/server/passwordChange",
154154
(serverName: string) => {
155155
var invalid: string[] = [];
156156
for (let [uri, server] of serverSpecs.entries()) {
157-
if (server.serverName = serverName) {
157+
if (server.serverName == serverName) {
158158
invalid.push(uri);
159159
}
160160
}
@@ -163,7 +163,7 @@ connection.onNotification("intersystems/server/passwordChange",
163163
}
164164
var toRemove: ServerSpec | undefined = undefined;
165165
for (let server of schemaCaches.keys()) {
166-
if (server.serverName = serverName) {
166+
if (server.serverName == serverName) {
167167
toRemove = server;
168168
break;
169169
}

0 commit comments

Comments
 (0)