Skip to content

Commit 233e723

Browse files
author
Benjamin Pasero
committed
sandbox - make moveToTrash an electron service thing
1 parent 9eb9907 commit 233e723

10 files changed

Lines changed: 32 additions & 14 deletions

File tree

src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ import { DiagnosticsService, IDiagnosticsService } from 'vs/platform/diagnostics
4646
import { DiagnosticsChannel } from 'vs/platform/diagnostics/node/diagnosticsIpc';
4747
import { FileService } from 'vs/platform/files/common/fileService';
4848
import { IFileService } from 'vs/platform/files/common/files';
49-
import { DiskFileSystemProvider } from 'vs/platform/files/electron-browser/diskFileSystemProvider';
49+
import { DiskFileSystemProvider } from 'vs/platform/files/node/diskFileSystemProvider';
5050
import { Schemas } from 'vs/base/common/network';
5151
import { IProductService } from 'vs/platform/product/common/productService';
5252
import { IUserDataSyncService, IUserDataSyncStoreService, registerConfiguration, IUserDataSyncLogService, IUserDataSyncUtilService, IUserDataSyncEnablementService, IUserDataSyncBackupStoreService } from 'vs/platform/userDataSync/common/userDataSync';

src/vs/platform/electron/electron-main/electronMainService.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,10 @@ export class ElectronMainService implements IElectronMainService {
293293
}
294294
}
295295

296+
async moveItemToTrash(windowId: number | undefined, fullPath: string, deleteOnFail?: boolean): Promise<boolean> {
297+
return shell.moveItemToTrash(fullPath, deleteOnFail);
298+
}
299+
296300
//#endregion
297301

298302
//#region macOS Touchbar

src/vs/platform/electron/node/electron.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ export interface IElectronService {
6161
setDocumentEdited(edited: boolean): Promise<void>;
6262
openExternal(url: string): Promise<boolean>;
6363
updateTouchBar(items: ISerializableCommandAction[][]): Promise<void>;
64+
moveItemToTrash(fullPath: string, deleteOnFail?: boolean): Promise<boolean>;
6465

6566
// macOS Touchbar
6667
newWindowTab(): Promise<void>;

src/vs/platform/files/electron-browser/diskFileSystemProvider.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,24 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import { shell } from 'electron';
7-
import { DiskFileSystemProvider as NodeDiskFileSystemProvider } from 'vs/platform/files/node/diskFileSystemProvider';
6+
import { DiskFileSystemProvider as NodeDiskFileSystemProvider, IDiskFileSystemProviderOptions } from 'vs/platform/files/node/diskFileSystemProvider';
87
import { FileDeleteOptions, FileSystemProviderCapabilities } from 'vs/platform/files/common/files';
98
import { isWindows } from 'vs/base/common/platform';
109
import { localize } from 'vs/nls';
1110
import { basename } from 'vs/base/common/path';
11+
import { ILogService } from 'vs/platform/log/common/log';
12+
import { IElectronService } from 'vs/platform/electron/node/electron';
1213

1314
export class DiskFileSystemProvider extends NodeDiskFileSystemProvider {
1415

16+
constructor(
17+
logService: ILogService,
18+
private electronService: IElectronService,
19+
options?: IDiskFileSystemProviderOptions
20+
) {
21+
super(logService, options);
22+
}
23+
1524
get capabilities(): FileSystemProviderCapabilities {
1625
if (!this._capabilities) {
1726
this._capabilities = super.capabilities | FileSystemProviderCapabilities.Trash;
@@ -25,9 +34,9 @@ export class DiskFileSystemProvider extends NodeDiskFileSystemProvider {
2534
return super.doDelete(filePath, opts);
2635
}
2736

28-
const result = shell.moveItemToTrash(filePath);
37+
const result = await this.electronService.moveItemToTrash(filePath);
2938
if (!result) {
3039
throw new Error(isWindows ? localize('binFailed', "Failed to move '{0}' to the recycle bin", basename(filePath)) : localize('trashFailed', "Failed to move '{0}' to the trash", basename(filePath)));
3140
}
3241
}
33-
}
42+
}

src/vs/platform/files/test/electron-browser/diskFileService.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import * as assert from 'assert';
77
import { tmpdir } from 'os';
88
import { FileService } from 'vs/platform/files/common/fileService';
99
import { Schemas } from 'vs/base/common/network';
10-
import { DiskFileSystemProvider } from 'vs/platform/files/electron-browser/diskFileSystemProvider';
10+
import { DiskFileSystemProvider } from 'vs/platform/files/node/diskFileSystemProvider';
1111
import { getRandomTestPath } from 'vs/base/test/node/testUtils';
1212
import { generateUuid } from 'vs/base/common/uuid';
1313
import { join, basename, dirname, posix } from 'vs/base/common/path';

src/vs/workbench/electron-browser/desktop.main.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ import product from 'vs/platform/product/common/product';
5050
import { NativeResourceIdentityService } from 'vs/platform/resource/node/resourceIdentityServiceImpl';
5151
import { IResourceIdentityService } from 'vs/platform/resource/common/resourceIdentityService';
5252
import { DesktopLogService } from 'vs/workbench/services/log/electron-browser/logService';
53+
import { ElectronService } from 'vs/workbench/services/electron/electron-browser/electronService';
54+
import { IElectronService } from 'vs/platform/electron/node/electron';
5355

5456
class DesktopMain extends Disposable {
5557

@@ -192,14 +194,19 @@ class DesktopMain extends Disposable {
192194
const signService = new SignService();
193195
serviceCollection.set(ISignService, signService);
194196

197+
// Remote Agent
195198
const remoteAgentService = this._register(new RemoteAgentService(this.environmentService, remoteAuthorityResolverService, signService, logService));
196199
serviceCollection.set(IRemoteAgentService, remoteAgentService);
197200

201+
// Electron
202+
const electronService = new ElectronService(mainProcessService) as IElectronService;
203+
serviceCollection.set(IElectronService, electronService);
204+
198205
// Files
199206
const fileService = this._register(new FileService(logService));
200207
serviceCollection.set(IFileService, fileService);
201208

202-
const diskFileSystemProvider = this._register(new DiskFileSystemProvider(logService));
209+
const diskFileSystemProvider = this._register(new DiskFileSystemProvider(logService, electronService));
203210
fileService.registerProvider(Schemas.file, diskFileSystemProvider);
204211

205212
// User Data Provider

src/vs/workbench/services/electron/electron-browser/electronService.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,16 @@
66
import { IElectronService } from 'vs/platform/electron/node/electron';
77
import { IMainProcessService } from 'vs/platform/ipc/common/mainProcessService';
88
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
9-
import { INativeWorkbenchEnvironmentService } from 'vs/workbench/services/environment/electron-browser/environmentService';
109
import { createChannelSender } from 'vs/base/parts/ipc/common/ipc';
11-
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
1210

1311
export class ElectronService {
1412

1513
_serviceBrand: undefined;
1614

1715
constructor(
18-
@IMainProcessService mainProcessService: IMainProcessService,
19-
@IWorkbenchEnvironmentService environmentService: INativeWorkbenchEnvironmentService
16+
@IMainProcessService mainProcessService: IMainProcessService
2017
) {
21-
return createChannelSender<IElectronService>(mainProcessService.getChannel('electron'), { context: environmentService.configuration.windowId });
18+
return createChannelSender<IElectronService>(mainProcessService.getChannel('electron'), { context: mainProcessService.windowId });
2219
}
2320
}
2421

src/vs/workbench/services/userData/test/electron-browser/fileUserDataProvider.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { URI } from 'vs/base/common/uri';
1616
import { FileUserDataProvider } from 'vs/workbench/services/userData/common/fileUserDataProvider';
1717
import { joinPath, dirname } from 'vs/base/common/resources';
1818
import { VSBuffer } from 'vs/base/common/buffer';
19-
import { DiskFileSystemProvider } from 'vs/platform/files/electron-browser/diskFileSystemProvider';
19+
import { DiskFileSystemProvider } from 'vs/platform/files/node/diskFileSystemProvider';
2020
import { BACKUPS } from 'vs/platform/environment/common/environment';
2121
import { DisposableStore, IDisposable, Disposable } from 'vs/base/common/lifecycle';
2222
import { BrowserWorkbenchEnvironmentService } from 'vs/workbench/services/environment/browser/environmentService';

src/vs/workbench/test/electron-browser/workbenchTestServices.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ export class TestElectronService implements IElectronService {
200200
async setDocumentEdited(edited: boolean): Promise<void> { }
201201
async openExternal(url: string): Promise<boolean> { return false; }
202202
async updateTouchBar(): Promise<void> { }
203+
async moveItemToTrash(): Promise<boolean> { return false; }
203204
async newWindowTab(): Promise<void> { }
204205
async showPreviousWindowTab(): Promise<void> { }
205206
async showNextWindowTab(): Promise<void> { }

src/vs/workbench/workbench.desktop.main.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ import 'vs/workbench/services/host/electron-browser/desktopHostService';
5959
import 'vs/workbench/services/request/electron-browser/requestService';
6060
import 'vs/workbench/services/lifecycle/electron-browser/lifecycleService';
6161
import 'vs/workbench/services/sharedProcess/electron-browser/sharedProcessService';
62-
import 'vs/workbench/services/electron/electron-browser/electronService';
6362
import 'vs/workbench/services/localizations/electron-browser/localizationsService';
6463
import 'vs/workbench/services/clipboard/electron-browser/clipboardService';
6564
import 'vs/workbench/services/extensionResourceLoader/electron-browser/extensionResourceLoaderService';

0 commit comments

Comments
 (0)