web - show a warning for unsupported browsers

This commit is contained in:
Benjamin Pasero 2021-08-17 10:08:04 +02:00
parent bdee6209d7
commit fd688fb33e
No known key found for this signature in database
GPG key ID: E6380CC4C8219E65
2 changed files with 37 additions and 1 deletions

View file

@ -40,7 +40,7 @@ export abstract class AbstractFileDialogService implements IFileDialogService {
@IConfigurationService protected readonly configurationService: IConfigurationService,
@IFileService protected readonly fileService: IFileService,
@IOpenerService protected readonly openerService: IOpenerService,
@IDialogService private readonly dialogService: IDialogService,
@IDialogService protected readonly dialogService: IDialogService,
@IModeService private readonly modeService: IModeService,
@IWorkspacesService private readonly workspacesService: IWorkspacesService,
@ILabelService private readonly labelService: ILabelService,

View file

@ -13,6 +13,8 @@ import { HTMLFileSystemProvider } from 'vs/platform/files/browser/htmlFileSystem
import { localize } from 'vs/nls';
import { getMediaOrTextMime } from 'vs/base/common/mime';
import { basename } from 'vs/base/common/resources';
import { WebFileSystemAccess } from 'vs/base/browser/dom';
import Severity from 'vs/base/common/severity';
export class FileDialogService extends AbstractFileDialogService implements IFileDialogService {
@ -46,6 +48,10 @@ export class FileDialogService extends AbstractFileDialogService implements IFil
return this.pickFileAndOpenSimplified(schema, options, false);
}
if (!WebFileSystemAccess.supported(window)) {
return this.showUnsupportedBrowserWarning();
}
let fileHandle: FileSystemHandle | undefined = undefined;
try {
([fileHandle] = await window.showOpenFilePicker({ multiple: false }));
@ -95,6 +101,10 @@ export class FileDialogService extends AbstractFileDialogService implements IFil
return this.pickFileToSaveSimplified(schema, options);
}
if (!WebFileSystemAccess.supported(window)) {
return this.showUnsupportedBrowserWarning();
}
let fileHandle: FileSystemHandle | undefined = undefined;
try {
fileHandle = await window.showSaveFilePicker({ types: this.getFilePickerTypes(options.filters), ...{ suggestedName: basename(defaultUri) } });
@ -126,6 +136,10 @@ export class FileDialogService extends AbstractFileDialogService implements IFil
return this.showSaveDialogSimplified(schema, options);
}
if (!WebFileSystemAccess.supported(window)) {
return this.showUnsupportedBrowserWarning();
}
let fileHandle: FileSystemHandle | undefined = undefined;
try {
fileHandle = await window.showSaveFilePicker({ types: this.getFilePickerTypes(options.filters), ...options.defaultUri ? { suggestedName: basename(options.defaultUri) } : undefined });
@ -143,6 +157,10 @@ export class FileDialogService extends AbstractFileDialogService implements IFil
return this.showOpenDialogSimplified(schema, options);
}
if (!WebFileSystemAccess.supported(window)) {
return this.showUnsupportedBrowserWarning();
}
let uri: URI | undefined;
try {
if (options.canSelectFiles) {
@ -161,6 +179,24 @@ export class FileDialogService extends AbstractFileDialogService implements IFil
return uri ? [uri] : undefined;
}
private async showUnsupportedBrowserWarning(): Promise<undefined> {
const res = await this.dialogService.show(
Severity.Warning,
localize('unsupportedBrowserMessage', "Accessing local files is unsupported in your current browser."),
[localize('learnMore', "Learn More"), localize('cancel', "Cancel")],
{
detail: localize('unsupportedBrowserDetail', "Click 'Learn More' to see a list of supported browsers."),
cancelId: 1
}
);
if (res.choice === 0) {
this.openerService.open('https://go.microsoft.com/fwlink/?linkid=2151362');
}
return undefined;
}
private shouldUseSimplified(scheme: string): boolean {
return ![Schemas.file, Schemas.userData, Schemas.tmp].includes(scheme);
}