@theia/filesystem 1.24.0 → 1.25.0-next.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/browser/file-dialog/file-dialog-service.d.ts +2 -0
- package/lib/browser/file-dialog/file-dialog-service.d.ts.map +1 -1
- package/lib/browser/file-dialog/file-dialog-service.js +6 -2
- package/lib/browser/file-dialog/file-dialog-service.js.map +1 -1
- package/lib/browser/filesystem-frontend-module.d.ts.map +1 -1
- package/lib/browser/filesystem-frontend-module.js +5 -1
- package/lib/browser/filesystem-frontend-module.js.map +1 -1
- package/lib/browser/filesystem-save-resource-service.d.ts +30 -0
- package/lib/browser/filesystem-save-resource-service.d.ts.map +1 -0
- package/lib/browser/filesystem-save-resource-service.js +143 -0
- package/lib/browser/filesystem-save-resource-service.js.map +1 -0
- package/package.json +3 -3
- package/src/browser/file-dialog/file-dialog-service.ts +3 -1
- package/src/browser/filesystem-frontend-module.ts +6 -1
- package/src/browser/filesystem-save-resource-service.ts +124 -0
|
@@ -6,6 +6,7 @@ import { DirNode } from '../file-tree';
|
|
|
6
6
|
import { OpenFileDialogFactory, OpenFileDialogProps, SaveFileDialogFactory, SaveFileDialogProps } from './file-dialog';
|
|
7
7
|
import { FileService } from '../file-service';
|
|
8
8
|
import { EnvVariablesServer } from '@theia/core/lib/common/env-variables';
|
|
9
|
+
import { UserWorkingDirectoryProvider } from '@theia/core/lib/browser/user-working-directory-provider';
|
|
9
10
|
export declare const FileDialogService: unique symbol;
|
|
10
11
|
export interface FileDialogService {
|
|
11
12
|
showOpenDialog(props: OpenFileDialogProps & {
|
|
@@ -21,6 +22,7 @@ export declare class DefaultFileDialogService implements FileDialogService {
|
|
|
21
22
|
protected readonly openFileDialogFactory: OpenFileDialogFactory;
|
|
22
23
|
protected readonly labelProvider: LabelProvider;
|
|
23
24
|
protected readonly saveFileDialogFactory: SaveFileDialogFactory;
|
|
25
|
+
protected readonly rootProvider: UserWorkingDirectoryProvider;
|
|
24
26
|
showOpenDialog(props: OpenFileDialogProps & {
|
|
25
27
|
canSelectMany: true;
|
|
26
28
|
}, folder?: FileStat): Promise<MaybeArray<URI> | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-dialog-service.d.ts","sourceRoot":"","sources":["../../../src/browser/file-dialog/file-dialog-service.ts"],"names":[],"mappings":"AAiBA,OAAO,GAAG,MAAM,4BAA4B,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACvH,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"file-dialog-service.d.ts","sourceRoot":"","sources":["../../../src/browser/file-dialog/file-dialog-service.ts"],"names":[],"mappings":"AAiBA,OAAO,GAAG,MAAM,4BAA4B,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACvH,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,4BAA4B,EAAE,MAAM,yDAAyD,CAAC;AAEvG,eAAO,MAAM,iBAAiB,eAA8B,CAAC;AAC7D,MAAM,WAAW,iBAAiB;IAE9B,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG;QAAE,aAAa,EAAE,IAAI,CAAA;KAAE,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;IAC9H,cAAc,CAAC,KAAK,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC;IACxF,cAAc,CAAC,KAAK,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;IAEpG,cAAc,CAAC,KAAK,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC,CAAA;CAE1F;AAED,qBACa,wBAAyB,YAAW,iBAAiB;IAG9D,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAGpD,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAEb,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IACxE,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACxC,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IACzD,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,4BAA4B,CAAC;IAE9F,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG;QAAE,aAAa,EAAE,IAAI,CAAA;KAAE,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAC7H,cAAc,CAAC,KAAK,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;IAkBvF,cAAc,CAAC,KAAK,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;cAW7E,WAAW,CAAC,YAAY,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;CAcrF"}
|
|
@@ -26,12 +26,12 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
26
26
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
27
|
exports.DefaultFileDialogService = exports.FileDialogService = void 0;
|
|
28
28
|
const inversify_1 = require("@theia/core/shared/inversify");
|
|
29
|
-
const uri_1 = require("@theia/core/lib/common/uri");
|
|
30
29
|
const browser_1 = require("@theia/core/lib/browser");
|
|
31
30
|
const file_tree_1 = require("../file-tree");
|
|
32
31
|
const file_dialog_1 = require("./file-dialog");
|
|
33
32
|
const file_service_1 = require("../file-service");
|
|
34
33
|
const env_variables_1 = require("@theia/core/lib/common/env-variables");
|
|
34
|
+
const user_working_directory_provider_1 = require("@theia/core/lib/browser/user-working-directory-provider");
|
|
35
35
|
exports.FileDialogService = Symbol('FileDialogService');
|
|
36
36
|
let DefaultFileDialogService = class DefaultFileDialogService {
|
|
37
37
|
async showOpenDialog(props, folder) {
|
|
@@ -63,7 +63,7 @@ let DefaultFileDialogService = class DefaultFileDialogService {
|
|
|
63
63
|
async getRootNode(folderToOpen) {
|
|
64
64
|
const folderExists = folderToOpen && await this.fileService.exists(folderToOpen.resource);
|
|
65
65
|
const folder = folderToOpen && folderExists ? folderToOpen : {
|
|
66
|
-
resource:
|
|
66
|
+
resource: await this.rootProvider.getUserWorkingDir(),
|
|
67
67
|
isDirectory: true
|
|
68
68
|
};
|
|
69
69
|
const folderUri = folder.resource;
|
|
@@ -96,6 +96,10 @@ __decorate([
|
|
|
96
96
|
(0, inversify_1.inject)(file_dialog_1.SaveFileDialogFactory),
|
|
97
97
|
__metadata("design:type", Function)
|
|
98
98
|
], DefaultFileDialogService.prototype, "saveFileDialogFactory", void 0);
|
|
99
|
+
__decorate([
|
|
100
|
+
(0, inversify_1.inject)(user_working_directory_provider_1.UserWorkingDirectoryProvider),
|
|
101
|
+
__metadata("design:type", user_working_directory_provider_1.UserWorkingDirectoryProvider)
|
|
102
|
+
], DefaultFileDialogService.prototype, "rootProvider", void 0);
|
|
99
103
|
DefaultFileDialogService = __decorate([
|
|
100
104
|
(0, inversify_1.injectable)()
|
|
101
105
|
], DefaultFileDialogService);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-dialog-service.js","sourceRoot":"","sources":["../../../src/browser/file-dialog/file-dialog-service.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,0CAA0C;AAC1C,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,2EAA2E;AAC3E,gFAAgF;;;;;;;;;;;;AAEhF,4DAAkE;
|
|
1
|
+
{"version":3,"file":"file-dialog-service.js","sourceRoot":"","sources":["../../../src/browser/file-dialog/file-dialog-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filesystem-frontend-module.d.ts","sourceRoot":"","sources":["../../src/browser/filesystem-frontend-module.ts"],"names":[],"mappings":"AAgBA,OAAO,mCAAmC,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;;
|
|
1
|
+
{"version":3,"file":"filesystem-frontend-module.d.ts","sourceRoot":"","sources":["../../src/browser/filesystem-frontend-module.ts"],"names":[],"mappings":"AAgBA,OAAO,mCAAmC,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;;AAyB3E,wBA4LG;AAEH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,GAAG,IAAI,CAG5D"}
|
|
@@ -38,7 +38,9 @@ const filesystem_watcher_error_handler_1 = require("./filesystem-watcher-error-h
|
|
|
38
38
|
const encodings_1 = require("@theia/core/lib/common/encodings");
|
|
39
39
|
const filepath_breadcrumbs_contribution_1 = require("./breadcrumbs/filepath-breadcrumbs-contribution");
|
|
40
40
|
const filepath_breadcrumbs_container_1 = require("./breadcrumbs/filepath-breadcrumbs-container");
|
|
41
|
-
|
|
41
|
+
const filesystem_save_resource_service_1 = require("./filesystem-save-resource-service");
|
|
42
|
+
const save_resource_service_1 = require("@theia/core/lib/browser/save-resource-service");
|
|
43
|
+
exports.default = new inversify_1.ContainerModule((bind, unbind, isBound, rebind) => {
|
|
42
44
|
(0, filesystem_preferences_1.bindFileSystemPreferences)(bind);
|
|
43
45
|
(0, contribution_provider_1.bindContributionProvider)(bind, file_service_1.FileServiceContribution);
|
|
44
46
|
bind(file_service_1.FileService).toSelf().inSingletonScope();
|
|
@@ -216,6 +218,8 @@ exports.default = new inversify_1.ContainerModule(bind => {
|
|
|
216
218
|
bind(filepath_breadcrumbs_container_1.BreadcrumbsFileTreeWidget).toDynamicValue(ctx => (0, filepath_breadcrumbs_container_1.createFileTreeBreadcrumbsWidget)(ctx.container));
|
|
217
219
|
bind(filepath_breadcrumbs_contribution_1.FilepathBreadcrumbsContribution).toSelf().inSingletonScope();
|
|
218
220
|
bind(browser_1.BreadcrumbsContribution).toService(filepath_breadcrumbs_contribution_1.FilepathBreadcrumbsContribution);
|
|
221
|
+
bind(filesystem_save_resource_service_1.FilesystemSaveResourceService).toSelf().inSingletonScope();
|
|
222
|
+
rebind(save_resource_service_1.SaveResourceService).toService(filesystem_save_resource_service_1.FilesystemSaveResourceService);
|
|
219
223
|
});
|
|
220
224
|
function bindFileResource(bind) {
|
|
221
225
|
bind(file_resource_1.FileResourceResolver).toSelf().inSingletonScope();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filesystem-frontend-module.js","sourceRoot":"","sources":["../../src/browser/filesystem-frontend-module.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,8CAA8C;AAC9C,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,2EAA2E;AAC3E,gFAAgF;;;AAEhF,6CAA2C;AAE3C,4DAA2E;AAC3E,mDAA+E;AAC/E,qDAA2J;AAC3J,mDAAuD;AACvD,qEAAqE;AACrE,6DAAyD;AACzD,yFAAoF;AACpF,+DAA0D;AAC1D,mFAA6E;AAC7E,iDAAsE;AACtE,uFAA6J;AAC7J,qDAAiH;AACjH,oDAA6C;AAC7C,2CAA4H;AAE5H,wEAA0E;AAC1E,wFAAwF;AACxF,yFAAmF;AACnF,yFAAmF;AACnF,gEAAwD;AACxD,uGAAkG;AAClG,iGAA0H;
|
|
1
|
+
{"version":3,"file":"filesystem-frontend-module.js","sourceRoot":"","sources":["../../src/browser/filesystem-frontend-module.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Navigatable, SaveableSource, SaveOptions, Widget, OpenerService } from '@theia/core/lib/browser';
|
|
2
|
+
import { SaveResourceService } from '@theia/core/lib/browser/save-resource-service';
|
|
3
|
+
import URI from '@theia/core/lib/common/uri';
|
|
4
|
+
import { FileService } from './file-service';
|
|
5
|
+
import { FileDialogService } from './file-dialog';
|
|
6
|
+
export declare class FilesystemSaveResourceService extends SaveResourceService {
|
|
7
|
+
protected readonly fileService: FileService;
|
|
8
|
+
protected readonly fileDialogService: FileDialogService;
|
|
9
|
+
protected readonly openerService: OpenerService;
|
|
10
|
+
/**
|
|
11
|
+
* This method ensures a few things about `widget`:
|
|
12
|
+
* - `widget.getResourceUri()` actually returns a URI.
|
|
13
|
+
* - `widget.saveable.createSnapshot` is defined.
|
|
14
|
+
* - `widget.saveable.revert` is defined.
|
|
15
|
+
*/
|
|
16
|
+
canSaveAs(widget: Widget | undefined): widget is Widget & SaveableSource & Navigatable;
|
|
17
|
+
/**
|
|
18
|
+
* Save `sourceWidget` to a new file picked by the user.
|
|
19
|
+
*/
|
|
20
|
+
saveAs(sourceWidget: Widget & SaveableSource & Navigatable, options?: SaveOptions): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* @param sourceWidget widget to save as `target`.
|
|
23
|
+
* @param target The new URI for the widget.
|
|
24
|
+
* @param overwrite
|
|
25
|
+
*/
|
|
26
|
+
private copyAndSave;
|
|
27
|
+
confirmOverwrite(uri: URI): Promise<boolean>;
|
|
28
|
+
private isElectron;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=filesystem-save-resource-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem-save-resource-service.d.ts","sourceRoot":"","sources":["../../src/browser/filesystem-save-resource-service.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,WAAW,EAAY,cAAc,EAAE,WAAW,EAAE,MAAM,EAAQ,aAAa,EAA6C,MAAM,yBAAyB,CAAC;AACrK,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AACpF,OAAO,GAAG,MAAM,4BAA4B,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,qBACa,6BAA8B,SAAQ,mBAAmB;IAE7C,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IACtC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAC5D,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IAEvE;;;;;OAKG;IACM,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,IAAI,MAAM,GAAG,cAAc,GAAG,WAAW;IAS/F;;OAEG;IACY,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,cAAc,GAAG,WAAW,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BhH;;;;OAIG;YACW,WAAW;IAsBnB,gBAAgB,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IAalD,OAAO,CAAC,UAAU;CAGrB"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2022 Ericsson and others.
|
|
4
|
+
//
|
|
5
|
+
// This program and the accompanying materials are made available under the
|
|
6
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
+
//
|
|
9
|
+
// This Source Code may also be made available under the following Secondary
|
|
10
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
+
// with the GNU Classpath Exception which is available at
|
|
13
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
+
//
|
|
15
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
16
|
+
// *****************************************************************************
|
|
17
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
18
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
19
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
20
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
21
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
22
|
+
};
|
|
23
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
24
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
25
|
+
};
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.FilesystemSaveResourceService = void 0;
|
|
28
|
+
const core_1 = require("@theia/core");
|
|
29
|
+
const inversify_1 = require("@theia/core/shared/inversify");
|
|
30
|
+
const browser_1 = require("@theia/core/lib/browser");
|
|
31
|
+
const save_resource_service_1 = require("@theia/core/lib/browser/save-resource-service");
|
|
32
|
+
const file_service_1 = require("./file-service");
|
|
33
|
+
const file_dialog_1 = require("./file-dialog");
|
|
34
|
+
let FilesystemSaveResourceService = class FilesystemSaveResourceService extends save_resource_service_1.SaveResourceService {
|
|
35
|
+
/**
|
|
36
|
+
* This method ensures a few things about `widget`:
|
|
37
|
+
* - `widget.getResourceUri()` actually returns a URI.
|
|
38
|
+
* - `widget.saveable.createSnapshot` is defined.
|
|
39
|
+
* - `widget.saveable.revert` is defined.
|
|
40
|
+
*/
|
|
41
|
+
canSaveAs(widget) {
|
|
42
|
+
return widget !== undefined
|
|
43
|
+
&& browser_1.Saveable.isSource(widget)
|
|
44
|
+
&& typeof widget.saveable.createSnapshot === 'function'
|
|
45
|
+
&& typeof widget.saveable.revert === 'function'
|
|
46
|
+
&& browser_1.Navigatable.is(widget)
|
|
47
|
+
&& widget.getResourceUri() !== undefined;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Save `sourceWidget` to a new file picked by the user.
|
|
51
|
+
*/
|
|
52
|
+
async saveAs(sourceWidget, options) {
|
|
53
|
+
let exist = false;
|
|
54
|
+
let overwrite = false;
|
|
55
|
+
let selected;
|
|
56
|
+
const canSave = this.canSaveNotSaveAs(sourceWidget);
|
|
57
|
+
const uri = sourceWidget.getResourceUri();
|
|
58
|
+
do {
|
|
59
|
+
selected = await this.fileDialogService.showSaveDialog({
|
|
60
|
+
title: browser_1.CommonCommands.SAVE_AS.label,
|
|
61
|
+
filters: {},
|
|
62
|
+
inputValue: uri.path.base
|
|
63
|
+
});
|
|
64
|
+
if (selected) {
|
|
65
|
+
exist = await this.fileService.exists(selected);
|
|
66
|
+
if (exist) {
|
|
67
|
+
overwrite = await this.confirmOverwrite(selected);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
} while ((selected && exist && !overwrite) || ((selected === null || selected === void 0 ? void 0 : selected.isEqual(uri)) && !canSave));
|
|
71
|
+
if (selected && selected.isEqual(uri)) {
|
|
72
|
+
await this.save(sourceWidget, options);
|
|
73
|
+
}
|
|
74
|
+
else if (selected) {
|
|
75
|
+
try {
|
|
76
|
+
await this.copyAndSave(sourceWidget, selected, overwrite);
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
console.warn(e);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* @param sourceWidget widget to save as `target`.
|
|
85
|
+
* @param target The new URI for the widget.
|
|
86
|
+
* @param overwrite
|
|
87
|
+
*/
|
|
88
|
+
async copyAndSave(sourceWidget, target, overwrite) {
|
|
89
|
+
const snapshot = sourceWidget.saveable.createSnapshot();
|
|
90
|
+
if (!await this.fileService.exists(target)) {
|
|
91
|
+
const sourceUri = sourceWidget.getResourceUri();
|
|
92
|
+
if (this.fileService.canHandleResource(sourceUri)) {
|
|
93
|
+
await this.fileService.copy(sourceUri, target, { overwrite });
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
await this.fileService.createFile(target);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
const targetWidget = await (0, browser_1.open)(this.openerService, target, { widgetOptions: { ref: sourceWidget } });
|
|
100
|
+
const targetSaveable = browser_1.Saveable.get(targetWidget);
|
|
101
|
+
if (targetWidget && targetSaveable && targetSaveable.applySnapshot) {
|
|
102
|
+
targetSaveable.applySnapshot(snapshot);
|
|
103
|
+
await sourceWidget.saveable.revert();
|
|
104
|
+
sourceWidget.close();
|
|
105
|
+
browser_1.Saveable.save(targetWidget, { formatType: 1 /* ON */ });
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
this.messageService.error(core_1.nls.localize('theia/workspace/failApply', 'Could not apply changes to new file'));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
async confirmOverwrite(uri) {
|
|
112
|
+
// Electron already handles the confirmation so do not prompt again.
|
|
113
|
+
if (this.isElectron()) {
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
// Prompt users for confirmation before overwriting.
|
|
117
|
+
const confirmed = await new browser_1.ConfirmDialog({
|
|
118
|
+
title: core_1.nls.localizeByDefault('Overwrite'),
|
|
119
|
+
msg: core_1.nls.localizeByDefault('{0} already exists. Are you sure you want to overwrite it?', uri.toString())
|
|
120
|
+
}).open();
|
|
121
|
+
return !!confirmed;
|
|
122
|
+
}
|
|
123
|
+
isElectron() {
|
|
124
|
+
return core_1.environment.electron.is();
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
__decorate([
|
|
128
|
+
(0, inversify_1.inject)(file_service_1.FileService),
|
|
129
|
+
__metadata("design:type", file_service_1.FileService)
|
|
130
|
+
], FilesystemSaveResourceService.prototype, "fileService", void 0);
|
|
131
|
+
__decorate([
|
|
132
|
+
(0, inversify_1.inject)(file_dialog_1.FileDialogService),
|
|
133
|
+
__metadata("design:type", Object)
|
|
134
|
+
], FilesystemSaveResourceService.prototype, "fileDialogService", void 0);
|
|
135
|
+
__decorate([
|
|
136
|
+
(0, inversify_1.inject)(browser_1.OpenerService),
|
|
137
|
+
__metadata("design:type", Object)
|
|
138
|
+
], FilesystemSaveResourceService.prototype, "openerService", void 0);
|
|
139
|
+
FilesystemSaveResourceService = __decorate([
|
|
140
|
+
(0, inversify_1.injectable)()
|
|
141
|
+
], FilesystemSaveResourceService);
|
|
142
|
+
exports.FilesystemSaveResourceService = FilesystemSaveResourceService;
|
|
143
|
+
//# sourceMappingURL=filesystem-save-resource-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem-save-resource-service.js","sourceRoot":"","sources":["../../src/browser/filesystem-save-resource-service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theia/filesystem",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.25.0-next.2+ce495c5fb38",
|
|
4
4
|
"description": "Theia - FileSystem Extension",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@theia/core": "1.
|
|
6
|
+
"@theia/core": "1.25.0-next.2+ce495c5fb38",
|
|
7
7
|
"@types/body-parser": "^1.17.0",
|
|
8
8
|
"@types/multer": "^1.4.7",
|
|
9
9
|
"@types/rimraf": "^2.0.2",
|
|
@@ -68,5 +68,5 @@
|
|
|
68
68
|
"nyc": {
|
|
69
69
|
"extends": "../../configs/nyc.json"
|
|
70
70
|
},
|
|
71
|
-
"gitHead": "
|
|
71
|
+
"gitHead": "ce495c5fb3845dd48ccb525e43fdf24a34d04a16"
|
|
72
72
|
}
|
|
@@ -23,6 +23,7 @@ import { DirNode } from '../file-tree';
|
|
|
23
23
|
import { OpenFileDialogFactory, OpenFileDialogProps, SaveFileDialogFactory, SaveFileDialogProps } from './file-dialog';
|
|
24
24
|
import { FileService } from '../file-service';
|
|
25
25
|
import { EnvVariablesServer } from '@theia/core/lib/common/env-variables';
|
|
26
|
+
import { UserWorkingDirectoryProvider } from '@theia/core/lib/browser/user-working-directory-provider';
|
|
26
27
|
|
|
27
28
|
export const FileDialogService = Symbol('FileDialogService');
|
|
28
29
|
export interface FileDialogService {
|
|
@@ -47,6 +48,7 @@ export class DefaultFileDialogService implements FileDialogService {
|
|
|
47
48
|
@inject(OpenFileDialogFactory) protected readonly openFileDialogFactory: OpenFileDialogFactory;
|
|
48
49
|
@inject(LabelProvider) protected readonly labelProvider: LabelProvider;
|
|
49
50
|
@inject(SaveFileDialogFactory) protected readonly saveFileDialogFactory: SaveFileDialogFactory;
|
|
51
|
+
@inject(UserWorkingDirectoryProvider) protected readonly rootProvider: UserWorkingDirectoryProvider;
|
|
50
52
|
|
|
51
53
|
async showOpenDialog(props: OpenFileDialogProps & { canSelectMany: true }, folder?: FileStat): Promise<MaybeArray<URI> | undefined>;
|
|
52
54
|
async showOpenDialog(props: OpenFileDialogProps, folder?: FileStat): Promise<URI | undefined>;
|
|
@@ -81,7 +83,7 @@ export class DefaultFileDialogService implements FileDialogService {
|
|
|
81
83
|
protected async getRootNode(folderToOpen?: FileStat): Promise<DirNode | undefined> {
|
|
82
84
|
const folderExists = folderToOpen && await this.fileService.exists(folderToOpen.resource);
|
|
83
85
|
const folder = folderToOpen && folderExists ? folderToOpen : {
|
|
84
|
-
resource:
|
|
86
|
+
resource: await this.rootProvider.getUserWorkingDir(),
|
|
85
87
|
isDirectory: true
|
|
86
88
|
};
|
|
87
89
|
const folderUri = folder.resource;
|
|
@@ -38,8 +38,10 @@ import { FileSystemWatcherErrorHandler } from './filesystem-watcher-error-handle
|
|
|
38
38
|
import { UTF8 } from '@theia/core/lib/common/encodings';
|
|
39
39
|
import { FilepathBreadcrumbsContribution } from './breadcrumbs/filepath-breadcrumbs-contribution';
|
|
40
40
|
import { BreadcrumbsFileTreeWidget, createFileTreeBreadcrumbsWidget } from './breadcrumbs/filepath-breadcrumbs-container';
|
|
41
|
+
import { FilesystemSaveResourceService } from './filesystem-save-resource-service';
|
|
42
|
+
import { SaveResourceService } from '@theia/core/lib/browser/save-resource-service';
|
|
41
43
|
|
|
42
|
-
export default new ContainerModule(bind => {
|
|
44
|
+
export default new ContainerModule((bind, unbind, isBound, rebind) => {
|
|
43
45
|
bindFileSystemPreferences(bind);
|
|
44
46
|
|
|
45
47
|
bindContributionProvider(bind, FileServiceContribution);
|
|
@@ -224,6 +226,9 @@ export default new ContainerModule(bind => {
|
|
|
224
226
|
);
|
|
225
227
|
bind(FilepathBreadcrumbsContribution).toSelf().inSingletonScope();
|
|
226
228
|
bind(BreadcrumbsContribution).toService(FilepathBreadcrumbsContribution);
|
|
229
|
+
|
|
230
|
+
bind(FilesystemSaveResourceService).toSelf().inSingletonScope();
|
|
231
|
+
rebind(SaveResourceService).toService(FilesystemSaveResourceService);
|
|
227
232
|
});
|
|
228
233
|
|
|
229
234
|
export function bindFileResource(bind: interfaces.Bind): void {
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2022 Ericsson and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
import { environment, nls } from '@theia/core';
|
|
18
|
+
import { inject, injectable } from '@theia/core/shared/inversify';
|
|
19
|
+
import { Navigatable, Saveable, SaveableSource, SaveOptions, Widget, open, OpenerService, ConfirmDialog, FormatType, CommonCommands } from '@theia/core/lib/browser';
|
|
20
|
+
import { SaveResourceService } from '@theia/core/lib/browser/save-resource-service';
|
|
21
|
+
import URI from '@theia/core/lib/common/uri';
|
|
22
|
+
import { FileService } from './file-service';
|
|
23
|
+
import { FileDialogService } from './file-dialog';
|
|
24
|
+
|
|
25
|
+
@injectable()
|
|
26
|
+
export class FilesystemSaveResourceService extends SaveResourceService {
|
|
27
|
+
|
|
28
|
+
@inject(FileService) protected readonly fileService: FileService;
|
|
29
|
+
@inject(FileDialogService) protected readonly fileDialogService: FileDialogService;
|
|
30
|
+
@inject(OpenerService) protected readonly openerService: OpenerService;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* This method ensures a few things about `widget`:
|
|
34
|
+
* - `widget.getResourceUri()` actually returns a URI.
|
|
35
|
+
* - `widget.saveable.createSnapshot` is defined.
|
|
36
|
+
* - `widget.saveable.revert` is defined.
|
|
37
|
+
*/
|
|
38
|
+
override canSaveAs(widget: Widget | undefined): widget is Widget & SaveableSource & Navigatable {
|
|
39
|
+
return widget !== undefined
|
|
40
|
+
&& Saveable.isSource(widget)
|
|
41
|
+
&& typeof widget.saveable.createSnapshot === 'function'
|
|
42
|
+
&& typeof widget.saveable.revert === 'function'
|
|
43
|
+
&& Navigatable.is(widget)
|
|
44
|
+
&& widget.getResourceUri() !== undefined;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Save `sourceWidget` to a new file picked by the user.
|
|
49
|
+
*/
|
|
50
|
+
override async saveAs(sourceWidget: Widget & SaveableSource & Navigatable, options?: SaveOptions): Promise<void> {
|
|
51
|
+
let exist: boolean = false;
|
|
52
|
+
let overwrite: boolean = false;
|
|
53
|
+
let selected: URI | undefined;
|
|
54
|
+
const canSave = this.canSaveNotSaveAs(sourceWidget);
|
|
55
|
+
const uri: URI = sourceWidget.getResourceUri()!;
|
|
56
|
+
do {
|
|
57
|
+
selected = await this.fileDialogService.showSaveDialog(
|
|
58
|
+
{
|
|
59
|
+
title: CommonCommands.SAVE_AS.label!,
|
|
60
|
+
filters: {},
|
|
61
|
+
inputValue: uri.path.base
|
|
62
|
+
});
|
|
63
|
+
if (selected) {
|
|
64
|
+
exist = await this.fileService.exists(selected);
|
|
65
|
+
if (exist) {
|
|
66
|
+
overwrite = await this.confirmOverwrite(selected);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
} while ((selected && exist && !overwrite) || (selected?.isEqual(uri) && !canSave));
|
|
70
|
+
if (selected && selected.isEqual(uri)) {
|
|
71
|
+
await this.save(sourceWidget, options);
|
|
72
|
+
} else if (selected) {
|
|
73
|
+
try {
|
|
74
|
+
await this.copyAndSave(sourceWidget, selected, overwrite);
|
|
75
|
+
} catch (e) {
|
|
76
|
+
console.warn(e);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* @param sourceWidget widget to save as `target`.
|
|
83
|
+
* @param target The new URI for the widget.
|
|
84
|
+
* @param overwrite
|
|
85
|
+
*/
|
|
86
|
+
private async copyAndSave(sourceWidget: Widget & SaveableSource & Navigatable, target: URI, overwrite: boolean): Promise<void> {
|
|
87
|
+
const snapshot = sourceWidget.saveable.createSnapshot!();
|
|
88
|
+
if (!await this.fileService.exists(target)) {
|
|
89
|
+
const sourceUri = sourceWidget.getResourceUri()!;
|
|
90
|
+
if (this.fileService.canHandleResource(sourceUri)) {
|
|
91
|
+
await this.fileService.copy(sourceUri, target, { overwrite });
|
|
92
|
+
} else {
|
|
93
|
+
await this.fileService.createFile(target);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const targetWidget = await open(this.openerService, target, { widgetOptions: { ref: sourceWidget } });
|
|
97
|
+
const targetSaveable = Saveable.get(targetWidget);
|
|
98
|
+
if (targetWidget && targetSaveable && targetSaveable.applySnapshot) {
|
|
99
|
+
targetSaveable.applySnapshot(snapshot);
|
|
100
|
+
await sourceWidget.saveable.revert!();
|
|
101
|
+
sourceWidget.close();
|
|
102
|
+
Saveable.save(targetWidget, { formatType: FormatType.ON });
|
|
103
|
+
} else {
|
|
104
|
+
this.messageService.error(nls.localize('theia/workspace/failApply', 'Could not apply changes to new file'));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
async confirmOverwrite(uri: URI): Promise<boolean> {
|
|
109
|
+
// Electron already handles the confirmation so do not prompt again.
|
|
110
|
+
if (this.isElectron()) {
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
// Prompt users for confirmation before overwriting.
|
|
114
|
+
const confirmed = await new ConfirmDialog({
|
|
115
|
+
title: nls.localizeByDefault('Overwrite'),
|
|
116
|
+
msg: nls.localizeByDefault('{0} already exists. Are you sure you want to overwrite it?', uri.toString())
|
|
117
|
+
}).open();
|
|
118
|
+
return !!confirmed;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
private isElectron(): boolean {
|
|
122
|
+
return environment.electron.is();
|
|
123
|
+
}
|
|
124
|
+
}
|