@@ -65,6 +65,9 @@ export function getCookies(server: ServerSpec): string[] {
6565let objectScriptApi ;
6666let serverManagerApi : serverManager . ServerManagerAPI ;
6767
68+ /** Resolved connection information for each workspace folder */
69+ const wsFolderServerSpecs : Map < string , ServerSpec > = new Map ( ) ;
70+
6871type 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 ;
0 commit comments