Skip to content

Commit d670a05

Browse files
committed
Mount individual folders instead of entire WebDAV root
Change "Open as Workspace Folder" to operate on the right-clicked node (root or directory) rather than mounting b2c-webdav:/ globally. The workspace folder is named "WebDAV: <path>" for clarity. Move mount command from view title bar to context menu. Remove unmountWorkspace command and mounted context key tracking — VS Code's native "Remove Folder from Workspace" handles unmounting.
1 parent 7a82677 commit d670a05

3 files changed

Lines changed: 13 additions & 39 deletions

File tree

packages/b2c-vs-extension/package.json

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -132,12 +132,6 @@
132132
"title": "Open as Workspace Folder",
133133
"icon": "$(root-folder-opened)",
134134
"category": "B2C DX"
135-
},
136-
{
137-
"command": "b2c-dx.webdav.unmountWorkspace",
138-
"title": "Remove Workspace Folder",
139-
"icon": "$(root-folder)",
140-
"category": "B2C DX"
141135
}
142136
],
143137
"menus": {
@@ -146,16 +140,6 @@
146140
"command": "b2c-dx.webdav.refresh",
147141
"when": "view == b2cWebdavExplorer",
148142
"group": "navigation"
149-
},
150-
{
151-
"command": "b2c-dx.webdav.mountWorkspace",
152-
"when": "view == b2cWebdavExplorer && !b2c-dx.webdav.mounted",
153-
"group": "navigation"
154-
},
155-
{
156-
"command": "b2c-dx.webdav.unmountWorkspace",
157-
"when": "view == b2cWebdavExplorer && b2c-dx.webdav.mounted",
158-
"group": "navigation"
159143
}
160144
],
161145
"view/item/context": [
@@ -188,6 +172,11 @@
188172
"command": "b2c-dx.webdav.delete",
189173
"when": "view == b2cWebdavExplorer && viewItem =~ /^(directory|file)$/",
190174
"group": "2_destructive@1"
175+
},
176+
{
177+
"command": "b2c-dx.webdav.mountWorkspace",
178+
"when": "view == b2cWebdavExplorer && viewItem =~ /^(root|directory)$/",
179+
"group": "3_workspace@1"
191180
}
192181
],
193182
"explorer/context": [

packages/b2c-vs-extension/src/webdav-tree/index.ts

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,6 @@ import {WEBDAV_SCHEME, WebDavFileSystemProvider} from './webdav-fs-provider.js';
99
import {WebDavTreeDataProvider} from './webdav-tree-provider.js';
1010
import {registerWebDavCommands} from './webdav-commands.js';
1111

12-
function syncMountedContext(): void {
13-
const mounted = (vscode.workspace.workspaceFolders ?? []).some((f) => f.uri.scheme === WEBDAV_SCHEME);
14-
vscode.commands.executeCommand('setContext', 'b2c-dx.webdav.mounted', mounted);
15-
}
16-
1712
export function registerWebDavTree(context: vscode.ExtensionContext): void {
1813
const configProvider = new WebDavConfigProvider();
1914
const fsProvider = new WebDavFileSystemProvider(configProvider);
@@ -31,9 +26,5 @@ export function registerWebDavTree(context: vscode.ExtensionContext): void {
3126

3227
const commandDisposables = registerWebDavCommands(context, configProvider, treeProvider, fsProvider);
3328

34-
// Sync the mounted context key on activation and when workspace folders change
35-
syncMountedContext();
36-
const folderWatcher = vscode.workspace.onDidChangeWorkspaceFolders(() => syncMountedContext());
37-
38-
context.subscriptions.push(fsRegistration, treeView, folderWatcher, ...commandDisposables);
29+
context.subscriptions.push(fsRegistration, treeView, ...commandDisposables);
3930
}

packages/b2c-vs-extension/src/webdav-tree/webdav-commands.ts

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import * as fs from 'fs';
77
import * as path from 'path';
88
import * as vscode from 'vscode';
99
import type {WebDavConfigProvider} from './webdav-config.js';
10-
import {type WebDavFileSystemProvider, WEBDAV_SCHEME, webdavPathToUri} from './webdav-fs-provider.js';
10+
import {type WebDavFileSystemProvider, webdavPathToUri} from './webdav-fs-provider.js';
1111
import type {WebDavTreeDataProvider, WebDavTreeItem} from './webdav-tree-provider.js';
1212

1313
export function registerWebDavCommands(
@@ -176,20 +176,14 @@ export function registerWebDavCommands(
176176
);
177177
});
178178

179-
const mountWorkspace = vscode.commands.registerCommand('b2c-dx.webdav.mountWorkspace', () => {
179+
const mountWorkspace = vscode.commands.registerCommand('b2c-dx.webdav.mountWorkspace', (node: WebDavTreeItem) => {
180+
if (!node) return;
181+
const uri = webdavPathToUri(node.webdavPath);
180182
vscode.workspace.updateWorkspaceFolders(vscode.workspace.workspaceFolders?.length ?? 0, 0, {
181-
uri: vscode.Uri.parse(`${WEBDAV_SCHEME}:/`),
182-
name: 'B2C Commerce WebDAV',
183+
uri,
184+
name: `WebDAV: ${node.webdavPath}`,
183185
});
184186
});
185187

186-
const unmountWorkspace = vscode.commands.registerCommand('b2c-dx.webdav.unmountWorkspace', () => {
187-
const folders = vscode.workspace.workspaceFolders ?? [];
188-
const idx = folders.findIndex((f) => f.uri.scheme === WEBDAV_SCHEME);
189-
if (idx >= 0) {
190-
vscode.workspace.updateWorkspaceFolders(idx, 1);
191-
}
192-
});
193-
194-
return [refresh, newFolder, newFile, uploadFile, deleteItem, download, openFile, mountWorkspace, unmountWorkspace];
188+
return [refresh, newFolder, newFile, uploadFile, deleteItem, download, openFile, mountWorkspace];
195189
}

0 commit comments

Comments
 (0)