mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-19 17:22:48 -05:00
Add extension API for using the same file browser dialog that's used for Restore (#24151)
Co-authored-by: Charles Gagnon <chgagnon@microsoft.com>
This commit is contained in:
@@ -24,3 +24,4 @@ import './mainThreadResourceProvider';
|
||||
import './mainThreadErrorDiagnostics';
|
||||
import './mainThreadTasks';
|
||||
import './mainThreadWorkspace';
|
||||
import './mainThreadWindow';
|
||||
|
||||
36
src/sql/workbench/api/browser/mainThreadWindow.ts
Normal file
36
src/sql/workbench/api/browser/mainThreadWindow.ts
Normal file
@@ -0,0 +1,36 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import type * as azdata from 'azdata';
|
||||
import { MainThreadWindowShape } from 'sql/workbench/api/common/sqlExtHost.protocol';
|
||||
import { IFileBrowserDialogController } from 'sql/workbench/services/fileBrowser/common/fileBrowserDialogController';
|
||||
import { Disposable } from 'vs/base/common/lifecycle';
|
||||
import { SqlMainContext } from 'vs/workbench/api/common/extHost.protocol';
|
||||
import { IExtHostContext, extHostNamedCustomer } from 'vs/workbench/services/extensions/common/extHostCustomers';
|
||||
|
||||
@extHostNamedCustomer(SqlMainContext.MainThreadWindow)
|
||||
export class MainThreadWindow extends Disposable implements MainThreadWindowShape {
|
||||
|
||||
constructor(
|
||||
extHostContext: IExtHostContext,
|
||||
@IFileBrowserDialogController private _fileBrowserDialogService: IFileBrowserDialogController
|
||||
) {
|
||||
super();
|
||||
}
|
||||
|
||||
public async $openServerFileBrowserDialog(connectionUri: string, targetPath: string, fileFilters: azdata.window.FileFilters[]): Promise<string | undefined> {
|
||||
let completion = new Promise<string | undefined>((resolve, reject) => {
|
||||
try {
|
||||
const handleOnClosed = (path: string | undefined) => {
|
||||
resolve(path);
|
||||
};
|
||||
this._fileBrowserDialogService.showDialog(connectionUri, targetPath, fileFilters, '', true, handleOnClosed);
|
||||
} catch (error) {
|
||||
reject(error);
|
||||
}
|
||||
});
|
||||
return await completion;
|
||||
}
|
||||
}
|
||||
23
src/sql/workbench/api/common/extHostWindow.ts
Normal file
23
src/sql/workbench/api/common/extHostWindow.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import type * as azdata from 'azdata';
|
||||
import { IMainContext } from 'vs/workbench/api/common/extHost.protocol';
|
||||
|
||||
import { ExtHostWindowShape, MainThreadWindowShape } from 'sql/workbench/api/common/sqlExtHost.protocol';
|
||||
import { SqlMainContext } from 'vs/workbench/api/common/extHost.protocol';
|
||||
|
||||
export class ExtHostWindow implements ExtHostWindowShape {
|
||||
|
||||
private readonly _proxy: MainThreadWindowShape;
|
||||
|
||||
constructor(_mainContext: IMainContext) {
|
||||
this._proxy = _mainContext.getProxy(SqlMainContext.MainThreadWindow);
|
||||
}
|
||||
|
||||
$openServerFileBrowserDialog(connectionUri: string, targetPath: string, fileFilters: azdata.window.FileFilters[]): Promise<string | undefined> {
|
||||
return this._proxy.$openServerFileBrowserDialog(connectionUri, targetPath, fileFilters);
|
||||
}
|
||||
}
|
||||
@@ -42,6 +42,7 @@ import { ExtHostAzureBlob } from 'sql/workbench/api/common/extHostAzureBlob';
|
||||
import { ExtHostAzureAccount } from 'sql/workbench/api/common/extHostAzureAccount';
|
||||
import { IExtHostExtensionService } from 'vs/workbench/api/common/extHostExtensionService';
|
||||
import { AuthenticationType } from 'sql/platform/connection/common/constants';
|
||||
import { ExtHostWindow } from 'sql/workbench/api/common/extHostWindow';
|
||||
|
||||
export interface IAzdataExtensionApiFactory {
|
||||
(extension: IExtensionDescription): typeof azdata;
|
||||
@@ -102,6 +103,7 @@ export function createAdsApiFactory(accessor: ServicesAccessor): IAdsExtensionAp
|
||||
const extHostNotebook = rpcProtocol.set(SqlExtHostContext.ExtHostNotebook, new ExtHostNotebook(rpcProtocol));
|
||||
const extHostExtensionManagement = rpcProtocol.set(SqlExtHostContext.ExtHostExtensionManagement, new ExtHostExtensionManagement(rpcProtocol));
|
||||
const extHostWorkspace = rpcProtocol.set(SqlExtHostContext.ExtHostWorkspace, new ExtHostWorkspace(rpcProtocol));
|
||||
const extHostWindow = rpcProtocol.set(SqlExtHostContext.ExtHostWindow, new ExtHostWindow(rpcProtocol));
|
||||
return {
|
||||
azdata: function (extension: IExtensionDescription): typeof azdata {
|
||||
// namespace: connection
|
||||
@@ -480,6 +482,9 @@ export function createAdsApiFactory(accessor: ServicesAccessor): IAdsExtensionAp
|
||||
MessageLevel: sqlExtHostTypes.MessageLevel,
|
||||
openCustomErrorDialog(options: sqlExtHostTypes.IErrorDialogOptions): Thenable<string | undefined> {
|
||||
return extHostModelViewDialog.openCustomErrorDialog(options);
|
||||
},
|
||||
openServerFileBrowserDialog(connectionUri: string, targetPath: string, fileFilters: azdata.window.FileFilters[]): Thenable<string | undefined> {
|
||||
return extHostWindow.$openServerFileBrowserDialog(connectionUri, targetPath, fileFilters);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -827,12 +827,20 @@ export interface ExtHostWorkspaceShape {
|
||||
$saveAndEnterWorkspace(workspaceFile: vscode.Uri): Promise<void>;
|
||||
}
|
||||
|
||||
export interface ExtHostWindowShape {
|
||||
$openServerFileBrowserDialog(connectionUri: string, targetPath: string, fileFilters: azdata.window.FileFilters[]): Promise<string | undefined>;
|
||||
}
|
||||
|
||||
export interface MainThreadWorkspaceShape {
|
||||
$createAndEnterWorkspace(folder: vscode.Uri, workspaceFile: vscode.Uri): Promise<void>;
|
||||
$enterWorkspace(workspaceFile: vscode.Uri): Promise<void>;
|
||||
$saveAndEnterWorkspace(workspaceFile: vscode.Uri): Promise<void>;
|
||||
}
|
||||
|
||||
export interface MainThreadWindowShape {
|
||||
$openServerFileBrowserDialog(connectionUri: string, targetPath: string, fileFilters: azdata.window.FileFilters[]): Promise<string | undefined>;
|
||||
}
|
||||
|
||||
export interface MainThreadBackgroundTaskManagementShape extends IDisposable {
|
||||
$registerTask(taskInfo: azdata.TaskInfo): void;
|
||||
$updateTask(taskProgressInfo: azdata.TaskProgressInfo): void;
|
||||
|
||||
Reference in New Issue
Block a user