mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 18:46:40 -05:00
Directly install missing provider extensions (#20771)
* Directly install missing provider extensions * Update interface
This commit is contained in:
@@ -23,6 +23,8 @@ export const clientCapabilities = {
|
|||||||
/**
|
/**
|
||||||
* The map containing the connection provider names and the owning extensions.
|
* The map containing the connection provider names and the owning extensions.
|
||||||
* This is to workaround the issue that we don't have the ability to store and query the information from extension gallery.
|
* This is to workaround the issue that we don't have the ability to store and query the information from extension gallery.
|
||||||
|
* IMPORTANT : Every extension in this list is assumed to be directly installable (not 3rd party). If that changes then
|
||||||
|
* handleUnsupportedProvider needs to be updated to handle those cases.
|
||||||
*/
|
*/
|
||||||
export const ConnectionProviderAndExtensionMap = new Map<string, string>([
|
export const ConnectionProviderAndExtensionMap = new Map<string, string>([
|
||||||
['PGSQL', 'microsoft.azuredatastudio-postgresql'],
|
['PGSQL', 'microsoft.azuredatastudio-postgresql'],
|
||||||
|
|||||||
@@ -324,10 +324,10 @@ export interface IConnectionManagementService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle the unsupported provider scenario.
|
* Handle the unsupported provider scenario.
|
||||||
* @param providerName The provider name.
|
* @param providerId The provider ID
|
||||||
* @returns Promise with a boolean value indicating whether the user has accepted the suggestion.
|
* @returns Promise with a boolean value indicating whether the user has accepted the suggestion.
|
||||||
*/
|
*/
|
||||||
handleUnsupportedProvider(providerName: string): Promise<boolean>;
|
handleUnsupportedProvider(providerId: string): Promise<boolean>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum RunQueryOnConnectionMode {
|
export enum RunQueryOnConnectionMode {
|
||||||
|
|||||||
@@ -1658,17 +1658,28 @@ export class ConnectionManagementService extends Disposable implements IConnecti
|
|||||||
return connections;
|
return connections;
|
||||||
}
|
}
|
||||||
|
|
||||||
async handleUnsupportedProvider(providerName: string): Promise<boolean> {
|
public async handleUnsupportedProvider(providerId: string): Promise<boolean> {
|
||||||
const extensionId = ConnectionProviderAndExtensionMap.get(providerName);
|
const extensionId = ConnectionProviderAndExtensionMap.get(providerId);
|
||||||
const message = extensionId ? nls.localize('connection.extensionNotInstalled', "The extension '{0}' is required in order to connect to this resource. Do you want to install it?", extensionId) :
|
const message = extensionId ? nls.localize('connection.extensionNotInstalled', "The extension '{0}' is required in order to connect to this resource. Do you want to install it?", extensionId) :
|
||||||
nls.localize('connectionDialog.connectionProviderNotSupported', "The extension that supports provider type '{0}' is not currently installed. Do you want to view the extensions?", providerName);
|
nls.localize('connectionDialog.connectionProviderNotSupported', "The extension that supports provider type '{0}' is not currently installed. Do you want to view the extensions?", providerId);
|
||||||
const result = await this._dialogService.confirm({
|
const result = await this._dialogService.confirm({
|
||||||
message: message,
|
message: message,
|
||||||
type: 'question'
|
type: 'question'
|
||||||
});
|
});
|
||||||
if (result.confirmed) {
|
if (result.confirmed) {
|
||||||
if (extensionId) {
|
if (extensionId) {
|
||||||
await this._commandService.executeCommand('extension.open', extensionId);
|
const providerRegistered = new Promise<void>(resolve => {
|
||||||
|
const eventHandler = this._capabilitiesService.onCapabilitiesRegistered(e => {
|
||||||
|
if (e.id === providerId) {
|
||||||
|
resolve();
|
||||||
|
eventHandler.dispose();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
// Install the extension and then wait for the provider to be registered to ensure that everything is ready for the caller to use
|
||||||
|
await this._commandService.executeCommand('workbench.extensions.installExtension', extensionId);
|
||||||
|
await providerRegistered;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
await this._paneCompositePartService.openPaneComposite(ExtensionsViewletID, ViewContainerLocation.Sidebar);
|
await this._paneCompositePartService.openPaneComposite(ExtensionsViewletID, ViewContainerLocation.Sidebar);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user