Skip to content

Commit e415446

Browse files
authored
Error when refreshing notifications view (#6861)
Fixes #6854
1 parent f904201 commit e415446

4 files changed

Lines changed: 28 additions & 20 deletions

File tree

src/common/settingsUtils.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,16 @@ export function getReviewMode(): { merged: boolean, closed: boolean } {
1818
return { merged: true, closed: true };
1919
}
2020
return desktopDefaults;
21+
}
22+
23+
export function initBasedOnSettingChange(namespace: string, key: string, isEnabled: () => boolean, initializer: () => void, disposables: vscode.Disposable[]): void {
24+
const eventDisposable = vscode.workspace.onDidChangeConfiguration((e) => {
25+
if (e.affectsConfiguration(`${namespace}.${key}`)) {
26+
if (isEnabled()) {
27+
initializer();
28+
eventDisposable.dispose();
29+
}
30+
}
31+
});
32+
disposables.push(eventDisposable);
2133
}

src/extension.ts

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import * as PersistentState from './common/persistentState';
1616
import { parseRepositoryRemotes } from './common/remote';
1717
import { Resource } from './common/resources';
1818
import { BRANCH_PUBLISH, EXPERIMENTAL_CHAT, EXPERIMENTAL_NOTIFICATIONS, FILE_LIST_LAYOUT, GIT, OPEN_DIFF_ON_CLICK, PR_SETTINGS_NAMESPACE, SHOW_INLINE_OPEN_FILE_ACTION } from './common/settingKeys';
19+
import { initBasedOnSettingChange } from './common/settingsUtils';
1920
import { TemporaryState } from './common/temporaryState';
2021
import { Schemes, handler as uriHandler } from './common/uri';
2122
import { EXTENSION_ID, FOCUS_REVIEW_MODE } from './constants';
@@ -222,10 +223,15 @@ async function init(
222223
context.subscriptions.push(issuesFeatures);
223224
await issuesFeatures.initialize();
224225

225-
const notificationsViewEnabled = vscode.workspace.getConfiguration(PR_SETTINGS_NAMESPACE).get<boolean>(EXPERIMENTAL_NOTIFICATIONS, false);
226-
if (notificationsViewEnabled) {
226+
const notificationsViewEnabled = () => vscode.workspace.getConfiguration(PR_SETTINGS_NAMESPACE).get<boolean>(EXPERIMENTAL_NOTIFICATIONS, false);
227+
const initNotifications = () => {
227228
const notificationsFeatures = new NotificationsFeatureRegister(credentialStore, reposManager, telemetry);
228229
context.subscriptions.push(notificationsFeatures);
230+
};
231+
if (notificationsViewEnabled()) {
232+
initNotifications();
233+
} else {
234+
initBasedOnSettingChange(PR_SETTINGS_NAMESPACE, EXPERIMENTAL_NOTIFICATIONS, notificationsViewEnabled, initNotifications, context.subscriptions);
229235
}
230236

231237
context.subscriptions.push(new GitLensIntegration());
@@ -255,15 +261,7 @@ function initChat(context: vscode.ExtensionContext, credentialStore: CredentialS
255261
if (chatEnabled()) {
256262
createParticipant();
257263
} else {
258-
const disposable = vscode.workspace.onDidChangeConfiguration(e => {
259-
if (e.affectsConfiguration(`${PR_SETTINGS_NAMESPACE}.${EXPERIMENTAL_CHAT}`)) {
260-
if (chatEnabled()) {
261-
disposable.dispose();
262-
createParticipant();
263-
}
264-
}
265-
});
266-
context.subscriptions.push(disposable);
264+
initBasedOnSettingChange(PR_SETTINGS_NAMESPACE, EXPERIMENTAL_CHAT, chatEnabled, createParticipant, context.subscriptions);
267265
}
268266
}
269267

src/github/credentials.ts

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { Disposable } from '../common/lifecycle';
1414
import Logger from '../common/logger';
1515
import * as PersistentState from '../common/persistentState';
1616
import { GITHUB_ENTERPRISE, URI } from '../common/settingKeys';
17+
import { initBasedOnSettingChange } from '../common/settingsUtils';
1718
import { ITelemetry } from '../common/telemetry';
1819
import { agent } from '../env/node/net';
1920
import { IAccount } from './interface';
@@ -221,18 +222,14 @@ export class CredentialStore extends Disposable {
221222

222223
private async doCreate(options: vscode.AuthenticationGetSessionOptions, additionalScopes: boolean = false): Promise<AuthResult> {
223224
let enterprise: AuthResult | undefined;
224-
const initializeEnterprise = () => this.initialize(AuthProvider.githubEnterprise, options, additionalScopes ? SCOPES_WITH_ADDITIONAL : undefined, additionalScopes);
225+
const initializeEnterprise = async () => {
226+
enterprise = await this.initialize(AuthProvider.githubEnterprise, options, additionalScopes ? SCOPES_WITH_ADDITIONAL : undefined, additionalScopes);
227+
};
225228
if (hasEnterpriseUri()) {
226-
enterprise = await initializeEnterprise();
229+
await initializeEnterprise();
227230
} else {
228231
// Listen for changes to the enterprise URI and try again if it changes.
229-
const disposable = vscode.workspace.onDidChangeConfiguration(async e => {
230-
if (e.affectsConfiguration(`${GITHUB_ENTERPRISE}.${URI}`) && hasEnterpriseUri()) {
231-
enterprise = await initializeEnterprise();
232-
disposable.dispose();
233-
}
234-
});
235-
this.context.subscriptions.push(disposable);
232+
initBasedOnSettingChange(GITHUB_ENTERPRISE, URI, hasEnterpriseUri, initializeEnterprise, this.context.subscriptions);
236233
}
237234
let github: AuthResult | undefined;
238235
if (!enterprise) {

src/notifications/notificationsFeatureRegistar.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export class NotificationsFeatureRegister extends Disposable {
3838
this._register(vscode.window.createTreeView<any>('notifications:github', {
3939
treeDataProvider: notificationsManager
4040
}));
41+
notificationsManager.refresh();
4142

4243
// Commands
4344
this._register(

0 commit comments

Comments
 (0)