diff --git a/src/vs/workbench/browser/parts/banner/bannerPart.ts b/src/vs/workbench/browser/parts/banner/bannerPart.ts index dda7c88..e01f09e 100644 --- a/src/vs/workbench/browser/parts/banner/bannerPart.ts +++ b/src/vs/workbench/browser/parts/banner/bannerPart.ts @@ -11,3 +11,3 @@ import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/ import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { IStorageService } from 'vs/platform/storage/common/storage'; +import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage'; import { IThemeService } from 'vs/platform/theme/common/themeService'; @@ -30,2 +30,3 @@ import { widgetClose } from 'vs/platform/theme/common/iconRegistry'; import { BannerFocused } from 'vs/workbench/common/contextkeys'; +import { INeverShowAgainOptions, NeverShowAgainScope } from 'vs/platform/notification/common/notification'; @@ -67,3 +68,3 @@ export class BannerPart extends Part implements IBannerService { @IWorkbenchLayoutService layoutService: IWorkbenchLayoutService, - @IStorageService storageService: IStorageService, + @IStorageService private readonly storageService: IStorageService, @IContextKeyService private readonly contextKeyService: IContextKeyService, @@ -187,2 +188,14 @@ export class BannerPart extends Part implements IBannerService { + if (item.neverShowAgain) { + const scope = this.toStorageScope(item.neverShowAgain); + const id = item.neverShowAgain.id; + + // If the user already picked to not show the notification + // again, we return with a no-op notification here + if (this.storageService.getBoolean(id, scope)) { + this.close(item); + return; + } + } + // Clear previous item @@ -235,2 +248,15 @@ export class BannerPart extends Part implements IBannerService { + private toStorageScope(options: INeverShowAgainOptions): StorageScope { + switch (options.scope) { + case NeverShowAgainScope.APPLICATION: + return StorageScope.APPLICATION; + case NeverShowAgainScope.PROFILE: + return StorageScope.PROFILE; + case NeverShowAgainScope.WORKSPACE: + return StorageScope.WORKSPACE; + default: + return StorageScope.APPLICATION; + } + } + toJSON(): object { diff --git a/src/vs/workbench/services/banner/browser/bannerService.ts b/src/vs/workbench/services/banner/browser/bannerService.ts index 9c1ab0d..688b1dc 100644 --- a/src/vs/workbench/services/banner/browser/bannerService.ts +++ b/src/vs/workbench/services/banner/browser/bannerService.ts @@ -10,2 +10,3 @@ import { ILinkDescriptor } from 'vs/platform/opener/browser/link'; import { ThemeIcon } from 'vs/base/common/themables'; +import { INeverShowAgainOptions } from 'vs/platform/notification/common/notification'; @@ -18,2 +19,3 @@ export interface IBannerItem { readonly onClose?: () => void; + readonly neverShowAgain?: INeverShowAgainOptions; readonly closeLabel?: string;