Skip to content

Commit 176ef81

Browse files
committed
Reset metadata watchers when refreshing workspaces
1 parent dd9d42f commit 176ef81

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

src/workspacesProvider.ts

+9
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export enum WorkspaceQuery {
1414
export class WorkspaceProvider implements vscode.TreeDataProvider<vscode.TreeItem> {
1515
private workspaces: WorkspaceTreeItem[] = []
1616
private agentMetadata: Record<WorkspaceAgent["id"], AgentMetadataEvent[]> = {}
17+
private watcherDisposers: (() => void)[] = []
1718

1819
constructor(private readonly getWorkspacesQuery: WorkspaceQuery, private readonly storage: Storage) {
1920
this.fetchAndRefresh()
@@ -22,6 +23,8 @@ export class WorkspaceProvider implements vscode.TreeDataProvider<vscode.TreeIte
2223
// fetchAndRefrehsh fetches new workspaces then re-renders the entire tree.
2324
async fetchAndRefresh() {
2425
const workspacesTreeItem: WorkspaceTreeItem[] = []
26+
this.watcherDisposers.forEach((dispose) => dispose())
27+
this.watcherDisposers = []
2528
// If the URL is set then we are logged in.
2629
if (this.storage.getURL()) {
2730
const resp = await getWorkspaces({ q: this.getWorkspacesQuery })
@@ -71,6 +74,9 @@ export class WorkspaceProvider implements vscode.TreeDataProvider<vscode.TreeIte
7174
return Promise.resolve(this.workspaces)
7275
}
7376

77+
// monitorMetadata opens a web socket to monitor metadata on the specified
78+
// agent and registers a disposer on this.watcherDisposers that can be used to
79+
// stop the watch.
7480
async monitorMetadata(agentId: WorkspaceAgent["id"]): Promise<void> {
7581
const agentMetadataURL = new URL(`${this.storage.getURL()}/api/v2/workspaceagents/${agentId}/watch-metadata`)
7682
const agentMetadataEventSource = new EventSource(agentMetadataURL.toString(), {
@@ -97,6 +103,9 @@ export class WorkspaceProvider implements vscode.TreeDataProvider<vscode.TreeIte
97103
agentMetadataEventSource.close()
98104
}
99105
})
106+
this.watcherDisposers.push(() => {
107+
agentMetadataEventSource.close()
108+
})
100109
}
101110
}
102111

0 commit comments

Comments
 (0)