Browse Source

Unifies webview plus check & avoids creation

main
Eric Amodio 1 year ago
parent
commit
5ecb87af2b
12 changed files with 25 additions and 32 deletions
  1. +0
    -12
      src/plus/webviews/focus/focusWebview.ts
  2. +1
    -0
      src/plus/webviews/focus/registration.ts
  3. +0
    -3
      src/plus/webviews/graph/graphWebview.ts
  4. +2
    -0
      src/plus/webviews/graph/registration.ts
  5. +2
    -0
      src/plus/webviews/timeline/registration.ts
  6. +2
    -5
      src/plus/webviews/timeline/timelineWebview.ts
  7. +1
    -0
      src/webviews/commitDetails/registration.ts
  8. +1
    -11
      src/webviews/home/homeWebview.ts
  9. +1
    -0
      src/webviews/home/registration.ts
  10. +1
    -0
      src/webviews/settings/registration.ts
  11. +13
    -1
      src/webviews/webviewsController.ts
  12. +1
    -0
      src/webviews/welcome/registration.ts

+ 0
- 12
src/plus/webviews/focus/focusWebview.ts View File

@ -1,4 +1,3 @@
import type { ViewColumn } from 'vscode';
import { Disposable, Uri, window } from 'vscode';
import type { GHPRPullRequest } from '../../../commands';
import { Commands, ContextKeys } from '../../../constants';
@ -29,7 +28,6 @@ import { onIpc } from '../../../webviews/protocol';
import type { WebviewController, WebviewProvider } from '../../../webviews/webviewController';
import type { WebviewIds, WebviewViewIds } from '../../../webviews/webviewsController';
import type { SubscriptionChangeEvent } from '../../subscription/subscriptionService';
import { ensurePlusFeaturesEnabled } from '../../subscription/utils';
import type { OpenWorktreeParams, State, SwitchToBranchParams } from './protocol';
import {
DidChangeStateNotificationType,
@ -73,16 +71,6 @@ export class FocusWebviewProvider implements WebviewProvider {
this._disposable.dispose();
}
async canShowWebviewPanel(
_firstTime: boolean,
_options: { column?: ViewColumn; preserveFocus?: boolean },
..._args: unknown[]
): Promise<boolean> {
if (!(await ensurePlusFeaturesEnabled())) return false;
return true;
}
registerCommands(): Disposable[] {
return [registerCommand(Commands.RefreshFocus, () => this.host.refresh(true))];
}

+ 1
- 0
src/plus/webviews/focus/registration.ts View File

@ -9,6 +9,7 @@ export function registerFocusWebviewPanel(controller: WebviewsController) {
title: 'Focus View',
contextKeyPrefix: `${ContextKeys.WebviewPrefix}focus`,
trackingFeature: 'focusWebview',
plusFeature: true,
resolveWebviewProvider: async function (container, id, host) {
const { FocusWebviewProvider } = await import(/* webpackChunkName: "focus" */ './focusWebview');
return new FocusWebviewProvider(container, id, host);

+ 0
- 3
src/plus/webviews/graph/graphWebview.ts View File

@ -75,7 +75,6 @@ import { onIpc } from '../../../webviews/protocol';
import type { WebviewController, WebviewProvider } from '../../../webviews/webviewController';
import type { WebviewIds, WebviewViewIds } from '../../../webviews/webviewsController';
import type { SubscriptionChangeEvent } from '../../subscription/subscriptionService';
import { ensurePlusFeaturesEnabled } from '../../subscription/utils';
import type {
DimMergeCommitsParams,
DismissBannerParams,
@ -249,8 +248,6 @@ export class GraphWebviewProvider implements WebviewProvider {
...args: unknown[]
): Promise<boolean> {
this._firstSelection = true;
if (!(await ensurePlusFeaturesEnabled())) return false;
if (options.column == null) {
options.column = ViewColumn.Active;
}

+ 2
- 0
src/plus/webviews/graph/registration.ts View File

@ -16,6 +16,7 @@ export function registerGraphWebviewPanel(controller: WebviewsController) {
title: 'Commit Graph',
contextKeyPrefix: `${ContextKeys.WebviewPrefix}graph`,
trackingFeature: 'graphWebview',
plusFeature: true,
panelOptions: {
retainContextWhenHidden: true,
enableFindWidget: false,
@ -33,6 +34,7 @@ export function registerGraphWebviewView(controller: WebviewsController) {
title: 'Commit Graph',
contextKeyPrefix: `${ContextKeys.WebviewViewPrefix}graph`,
trackingFeature: 'graphView',
plusFeature: true,
resolveWebviewProvider: async function (container, id, host) {
const { GraphWebviewProvider } = await import(/* webpackChunkName: "graph" */ './graphWebview');
return new GraphWebviewProvider(container, id, host);

+ 2
- 0
src/plus/webviews/timeline/registration.ts View File

@ -9,6 +9,7 @@ export function registerTimelineWebviewPanel(controller: WebviewsController) {
title: 'Visual File History',
contextKeyPrefix: `${ContextKeys.WebviewPrefix}timeline`,
trackingFeature: 'timelineWebview',
plusFeature: true,
resolveWebviewProvider: async function (container, id, host) {
const { TimelineWebviewProvider } = await import(/* webpackChunkName: "timeline" */ './timelineWebview');
return new TimelineWebviewProvider(container, id, host);
@ -22,6 +23,7 @@ export function registerTimelineWebviewView(controller: WebviewsController) {
title: 'Visual File History',
contextKeyPrefix: `${ContextKeys.WebviewViewPrefix}timeline`,
trackingFeature: 'timelineView',
plusFeature: true,
resolveWebviewProvider: async function (container, id, host) {
const { TimelineWebviewProvider } = await import(/* webpackChunkName: "timeline" */ './timelineWebview');
return new TimelineWebviewProvider(container, id, host);

+ 2
- 5
src/plus/webviews/timeline/timelineWebview.ts View File

@ -22,7 +22,6 @@ import { onIpc } from '../../../webviews/protocol';
import type { WebviewController, WebviewProvider } from '../../../webviews/webviewController';
import type { WebviewIds, WebviewViewIds } from '../../../webviews/webviewsController';
import type { SubscriptionChangeEvent } from '../../subscription/subscriptionService';
import { ensurePlusFeaturesEnabled } from '../../subscription/utils';
import type { Commit, Period, State } from './protocol';
import { DidChangeNotificationType, OpenDataPointCommandType, UpdatePeriodCommandType } from './protocol';
@ -81,13 +80,11 @@ export class TimelineWebviewProvider implements WebviewProvider {
this._disposable.dispose();
}
async canShowWebviewPanel(
canShowWebviewPanel(
firstTime: boolean,
_options: { column?: ViewColumn; preserveFocus?: boolean },
...args: unknown[]
): Promise<boolean> {
if (!(await ensurePlusFeaturesEnabled())) return false;
): boolean {
const [uri] = args;
if (uri != null && uri instanceof Uri) {
this.updatePendingUri(uri);

+ 1
- 0
src/webviews/commitDetails/registration.ts View File

@ -9,6 +9,7 @@ export function registerCommitDetailsWebviewView(controller: WebviewsController)
title: 'Commit Details',
contextKeyPrefix: `${ContextKeys.WebviewViewPrefix}commitDetails`,
trackingFeature: 'commitDetailsView',
plusFeature: false,
resolveWebviewProvider: async function (container, id, host) {
const { CommitDetailsWebviewProvider } = await import(
/* webpackChunkName: "commitDetails" */ './commitDetailsWebview'

+ 1
- 11
src/webviews/home/homeWebview.ts View File

@ -1,4 +1,4 @@
import type { ConfigurationChangeEvent, ViewColumn } from 'vscode';
import type { ConfigurationChangeEvent } from 'vscode';
import { Disposable, window } from 'vscode';
import { getAvatarUriFromGravatarEmail } from '../../avatars';
import { ViewsLayout } from '../../commands/setViewsLayout';
@ -7,7 +7,6 @@ import type { Container } from '../../container';
import { getContext, onDidChangeContext } from '../../context';
import type { RepositoriesVisibility } from '../../git/gitProviderService';
import type { SubscriptionChangeEvent } from '../../plus/subscription/subscriptionService';
import { ensurePlusFeaturesEnabled } from '../../plus/subscription/utils';
import type { StorageChangeEvent } from '../../storage';
import type { Subscription } from '../../subscription';
import { executeCoreCommand, registerCommand } from '../../system/command';
@ -58,15 +57,6 @@ export class HomeWebviewProvider implements WebviewProvider {
this._disposable.dispose();
}
async canShowWebviewPanel(
_firstTime: boolean,
_options: { column?: ViewColumn; preserveFocus?: boolean },
..._args: unknown[]
): Promise<boolean> {
if (!(await ensurePlusFeaturesEnabled())) return false;
return true;
}
private onConfigurationChanged(e: ConfigurationChangeEvent) {
if (!configuration.changed(e, 'plusFeatures.enabled')) {
return;

+ 1
- 0
src/webviews/home/registration.ts View File

@ -8,6 +8,7 @@ export function registerHomeWebviewView(controller: WebviewsController) {
title: 'Home',
contextKeyPrefix: `${ContextKeys.WebviewViewPrefix}home`,
trackingFeature: 'homeView',
plusFeature: false,
resolveWebviewProvider: async function (container, id, host) {
const { HomeWebviewProvider } = await import(/* webpackChunkName: "home" */ './homeWebview');
return new HomeWebviewProvider(container, id, host);

+ 1
- 0
src/webviews/settings/registration.ts View File

@ -11,6 +11,7 @@ export function registerSettingsWebviewPanel(controller: WebviewsController) {
title: 'GitLens Settings',
contextKeyPrefix: `${ContextKeys.WebviewPrefix}settings`,
trackingFeature: 'settingsWebview',
plusFeature: false,
resolveWebviewProvider: async function (container, id, host) {
const { SettingsWebviewProvider } = await import(/* webpackChunkName: "settings" */ './settingsWebview');
return new SettingsWebviewProvider(container, id, host);

+ 13
- 1
src/webviews/webviewsController.ts View File

@ -8,6 +8,7 @@ import type {
import { Disposable, Uri, ViewColumn, window } from 'vscode';
import type { Commands, ContextKeys } from '../constants';
import type { Container } from '../container';
import { ensurePlusFeaturesEnabled } from '../plus/subscription/utils';
import { executeCommand, registerCommand } from '../system/command';
import type { TrackedUsageFeatures } from '../telemetry/usageTracker';
import type { WebviewProvider } from './webviewController';
@ -23,6 +24,7 @@ export interface WebviewPanelDescriptor {
readonly title: string;
readonly contextKeyPrefix: `${ContextKeys.WebviewPrefix}${WebviewIds}`;
readonly trackingFeature: TrackedUsageFeatures;
readonly plusFeature: boolean;
readonly options?: WebviewOptions;
readonly panelOptions?: WebviewPanelOptions;
resolveWebviewProvider(
@ -37,6 +39,7 @@ export interface WebviewViewDescriptor {
readonly title: string;
readonly contextKeyPrefix: `${ContextKeys.WebviewViewPrefix}${WebviewViewIds}`;
readonly trackingFeature: TrackedUsageFeatures;
readonly plusFeature: boolean;
readonly options?: WebviewOptions;
resolveWebviewProvider(
container: Container,
@ -97,8 +100,13 @@ export class WebviewsController implements Disposable {
resolveWebviewView: async (
webviewView: WebviewView,
_context: WebviewViewResolveContext<SerializedState>,
_token: CancellationToken,
token: CancellationToken,
) => {
if (metadata.descriptor.plusFeature) {
if (!(await ensurePlusFeaturesEnabled())) return;
if (token.isCancellationRequested) return;
}
webviewView.webview.options = {
...descriptor.options,
enableCommandUris: true,
@ -176,6 +184,10 @@ export class WebviewsController implements Disposable {
): Promise<void> {
const { webview, descriptor } = metadata;
if (descriptor.plusFeature) {
if (!(await ensurePlusFeaturesEnabled())) return;
}
void container.usage.track(`${descriptor.trackingFeature}:shown`);
let column = options?.column ?? ViewColumn.Beside;

+ 1
- 0
src/webviews/welcome/registration.ts View File

@ -9,6 +9,7 @@ export function registerWelcomeWebviewPanel(controller: WebviewsController) {
title: 'Welcome to GitLens',
contextKeyPrefix: `${ContextKeys.WebviewPrefix}welcome`,
trackingFeature: 'welcomeWebview',
plusFeature: false,
resolveWebviewProvider: async function (container, id, host) {
const { WelcomeWebviewProvider } = await import(/* webpackChunkName: "welcome" */ './welcomeWebview');
return new WelcomeWebviewProvider(container, id, host);

Loading…
Cancel
Save