mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 18:46:40 -05:00
Merge from vscode e6a45f4242ebddb7aa9a229f85555e8a3bd987e2 (#9253)
* Merge from vscode e6a45f4242ebddb7aa9a229f85555e8a3bd987e2 * skip failing tests * remove github-authentication extensions * ignore github compile steps * ignore github compile steps * check in compiled files
This commit is contained in:
@@ -11,8 +11,8 @@ import { AbstractExtensionService } from 'vs/workbench/services/extensions/commo
|
||||
import * as nls from 'vs/nls';
|
||||
import { runWhenIdle } from 'vs/base/common/async';
|
||||
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
|
||||
import { IExtensionManagementService } from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { IWorkbenchExtensionEnablementService } from 'vs/workbench/services/extensionManagement/common/extensionManagement';
|
||||
import { IExtensionManagementService, IExtensionGalleryService } from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { IWorkbenchExtensionEnablementService, EnablementState } from 'vs/workbench/services/extensionManagement/common/extensionManagement';
|
||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||
import { IInitDataProvider, RemoteExtensionHostClient } from 'vs/workbench/services/extensions/common/remoteExtensionHostClient';
|
||||
import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService';
|
||||
@@ -41,6 +41,7 @@ import { Action } from 'vs/base/common/actions';
|
||||
import { SyncActionDescriptor } from 'vs/platform/actions/common/actions';
|
||||
import { Registry } from 'vs/platform/registry/common/platform';
|
||||
import { Extensions as ActionExtensions, IWorkbenchActionRegistry } from 'vs/workbench/common/actions';
|
||||
import { getRemoteName } from 'vs/platform/remote/common/remoteHosts';
|
||||
|
||||
class DeltaExtensionsQueueItem {
|
||||
constructor(
|
||||
@@ -73,7 +74,8 @@ export class ExtensionService extends AbstractExtensionService implements IExten
|
||||
@IElectronService private readonly _electronService: IElectronService,
|
||||
@IHostService private readonly _hostService: IHostService,
|
||||
@IElectronEnvironmentService private readonly _electronEnvironmentService: IElectronEnvironmentService,
|
||||
@IRemoteExplorerService private readonly _remoteExplorerService: IRemoteExplorerService
|
||||
@IRemoteExplorerService private readonly _remoteExplorerService: IRemoteExplorerService,
|
||||
@IExtensionGalleryService private readonly _extensionGalleryService: IExtensionGalleryService,
|
||||
) {
|
||||
super(
|
||||
instantiationService,
|
||||
@@ -446,13 +448,13 @@ export class ExtensionService extends AbstractExtensionService implements IExten
|
||||
const remoteAuthority = this._environmentService.configuration.remoteAuthority;
|
||||
const extensionHost = this._extensionHostProcessManagers[0];
|
||||
|
||||
let localExtensions = flatten(await Promise.all([this._extensionScanner.scannedExtensions, this._staticExtensions.getExtensions()]));
|
||||
const allExtensions = flatten(await Promise.all([this._extensionScanner.scannedExtensions, this._staticExtensions.getExtensions()]));
|
||||
|
||||
// enable or disable proposed API per extension
|
||||
this._checkEnableProposedApi(localExtensions);
|
||||
this._checkEnableProposedApi(allExtensions);
|
||||
|
||||
// remove disabled extensions
|
||||
localExtensions = remove(localExtensions, extension => this._isDisabled(extension));
|
||||
let localExtensions = remove(allExtensions, extension => this._isDisabled(extension));
|
||||
|
||||
if (remoteAuthority) {
|
||||
let resolvedAuthority: ResolverResult;
|
||||
@@ -460,13 +462,16 @@ export class ExtensionService extends AbstractExtensionService implements IExten
|
||||
try {
|
||||
resolvedAuthority = await extensionHost.resolveAuthority(remoteAuthority);
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
const plusIndex = remoteAuthority.indexOf('+');
|
||||
const authorityFriendlyName = plusIndex > 0 ? remoteAuthority.substr(0, plusIndex) : remoteAuthority;
|
||||
if (!RemoteAuthorityResolverError.isHandledNotAvailable(err)) {
|
||||
this._notificationService.notify({ severity: Severity.Error, message: nls.localize('resolveAuthorityFailure', "Resolving the authority `{0}` failed", authorityFriendlyName) });
|
||||
const remoteName = getRemoteName(remoteAuthority);
|
||||
if (RemoteAuthorityResolverError.isNoResolverFound(err)) {
|
||||
this._handleNoResolverFound(remoteName, allExtensions);
|
||||
} else {
|
||||
console.log(`Not showing a notification for the error`);
|
||||
console.log(err);
|
||||
if (RemoteAuthorityResolverError.isHandledNotAvailable(err)) {
|
||||
console.log(`Not showing a notification for the error`);
|
||||
} else {
|
||||
this._notificationService.notify({ severity: Severity.Error, message: nls.localize('resolveAuthorityFailure', "Resolving the authority `{0}` failed", remoteName) });
|
||||
}
|
||||
}
|
||||
|
||||
this._remoteAuthorityResolverService.setResolvedAuthorityError(remoteAuthority, err);
|
||||
@@ -583,6 +588,66 @@ export class ExtensionService extends AbstractExtensionService implements IExten
|
||||
this._electronService.closeWindow();
|
||||
}
|
||||
}
|
||||
|
||||
private async _handleNoResolverFound(remoteName: string, allExtensions: IExtensionDescription[]): Promise<void> {
|
||||
const recommendation = this._productService.remoteExtensionTips?.[remoteName];
|
||||
if (!recommendation) {
|
||||
return;
|
||||
}
|
||||
const sendTelemetry = (userReaction: 'install' | 'enable' | 'cancel') => {
|
||||
/* __GDPR__
|
||||
"remoteExtensionRecommendations:popup" : {
|
||||
"userReaction" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
|
||||
"extensionId": { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight" }
|
||||
}
|
||||
*/
|
||||
this._telemetryService.publicLog('remoteExtensionRecommendations:popup', { userReaction, extensionId: resolverExtensionId });
|
||||
};
|
||||
|
||||
const resolverExtensionId = recommendation.extensionId;
|
||||
const extension = allExtensions.filter(e => e.identifier.value === resolverExtensionId)[0];
|
||||
if (extension) {
|
||||
if (this._isDisabled(extension)) {
|
||||
const message = nls.localize('enableResolver', "Extension '{0}' is required to open the remote window.\nOk to enable?", recommendation.friendlyName);
|
||||
this._notificationService.prompt(Severity.Info, message,
|
||||
[{
|
||||
label: nls.localize('enable', 'Enable and Reload'),
|
||||
run: async () => {
|
||||
sendTelemetry('enable');
|
||||
await this._extensionEnablementService.setEnablement([toExtension(extension)], EnablementState.EnabledGlobally);
|
||||
await this._hostService.reload();
|
||||
}
|
||||
}],
|
||||
{ sticky: true }
|
||||
);
|
||||
}
|
||||
} else {
|
||||
// Install the Extension and reload the window to handle.
|
||||
const message = nls.localize('installResolver', "Extension '{0}' is required to open the remote window.\nOk to install?", recommendation.friendlyName);
|
||||
this._notificationService.prompt(Severity.Info, message,
|
||||
[{
|
||||
label: nls.localize('install', 'Install and Reload'),
|
||||
run: async () => {
|
||||
sendTelemetry('install');
|
||||
const galleryExtension = await this._extensionGalleryService.getCompatibleExtension({ id: resolverExtensionId });
|
||||
if (galleryExtension) {
|
||||
await this._extensionManagementService.installFromGallery(galleryExtension);
|
||||
await this._hostService.reload();
|
||||
} else {
|
||||
this._notificationService.error(nls.localize('resolverExtensionNotFound', "`{0}` not found on marketplace"));
|
||||
}
|
||||
|
||||
}
|
||||
}],
|
||||
{
|
||||
sticky: true,
|
||||
onCancel: () => sendTelemetry('cancel')
|
||||
}
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function remove(arr: IExtensionDescription[], predicate: (item: IExtensionDescription) => boolean): IExtensionDescription[];
|
||||
|
||||
Reference in New Issue
Block a user