提交 2bb2507f 编写于 作者: R Rachel Macfarlane

Show active account usage in account menu, fixes #94635

上级 9982b22d
...@@ -38,6 +38,25 @@ interface AllowedExtension { ...@@ -38,6 +38,25 @@ interface AllowedExtension {
name: string; name: string;
} }
const accountUsages = new Map<string, { [accountName: string]: string[] }>();
function addAccountUsage(providerId: string, accountName: string, extensionOrFeatureName: string) {
const providerAccountUsage = accountUsages.get(providerId);
if (!providerAccountUsage) {
accountUsages.set(providerId, { [accountName]: [extensionOrFeatureName] });
} else {
if (providerAccountUsage[accountName]) {
if (!providerAccountUsage[accountName].includes(extensionOrFeatureName)) {
providerAccountUsage[accountName].push(extensionOrFeatureName);
}
} else {
providerAccountUsage[accountName] = [extensionOrFeatureName];
}
accountUsages.set(providerId, providerAccountUsage);
}
}
function readAllowedExtensions(storageService: IStorageService, providerId: string, accountName: string): AllowedExtension[] { function readAllowedExtensions(storageService: IStorageService, providerId: string, accountName: string): AllowedExtension[] {
let trustedExtensions: AllowedExtension[] = []; let trustedExtensions: AllowedExtension[] = [];
try { try {
...@@ -98,6 +117,24 @@ export class MainThreadAuthenticationProvider extends Disposable { ...@@ -98,6 +117,24 @@ export class MainThreadAuthenticationProvider extends Disposable {
quickPick.show(); quickPick.show();
} }
private showUsage(quickInputService: IQuickInputService, accountName: string) {
const quickPick = quickInputService.createQuickPick();
const providerUsage = accountUsages.get(this.id);
const accountUsage = (providerUsage || {})[accountName] || [];
quickPick.items = accountUsage.map(extensionOrFeature => {
return {
label: extensionOrFeature
};
});
quickPick.onDidHide(() => {
quickPick.dispose();
});
quickPick.show();
}
private async registerCommandsAndContextMenuItems(): Promise<void> { private async registerCommandsAndContextMenuItems(): Promise<void> {
const sessions = await this._proxy.$getSessions(this.id); const sessions = await this._proxy.$getSessions(this.id);
...@@ -153,9 +190,10 @@ export class MainThreadAuthenticationProvider extends Disposable { ...@@ -153,9 +190,10 @@ export class MainThreadAuthenticationProvider extends Disposable {
const storageService = accessor.get(IStorageService); const storageService = accessor.get(IStorageService);
const quickPick = quickInputService.createQuickPick(); const quickPick = quickInputService.createQuickPick();
const showUsage = nls.localize('showUsage', "Show Extensions and Features Using This Account");
const manage = nls.localize('manageTrustedExtensions', "Manage Trusted Extensions"); const manage = nls.localize('manageTrustedExtensions', "Manage Trusted Extensions");
const signOut = nls.localize('signOut', "Sign Out"); const signOut = nls.localize('signOut', "Sign Out");
const items = ([{ label: manage }, { label: signOut }]); const items = ([{ label: showUsage }, { label: manage }, { label: signOut }]);
quickPick.items = items; quickPick.items = items;
...@@ -170,6 +208,10 @@ export class MainThreadAuthenticationProvider extends Disposable { ...@@ -170,6 +208,10 @@ export class MainThreadAuthenticationProvider extends Disposable {
this.manageTrustedExtensions(quickInputService, storageService, session.accountName); this.manageTrustedExtensions(quickInputService, storageService, session.accountName);
} }
if (selected.label === showUsage) {
this.showUsage(quickInputService, session.accountName);
}
quickPick.dispose(); quickPick.dispose();
}); });
...@@ -189,7 +231,10 @@ export class MainThreadAuthenticationProvider extends Disposable { ...@@ -189,7 +231,10 @@ export class MainThreadAuthenticationProvider extends Disposable {
return { return {
id: session.id, id: session.id,
accountName: session.accountName, accountName: session.accountName,
getAccessToken: () => this._proxy.$getSessionAccessToken(this.id, session.id) getAccessToken: () => {
addAccountUsage(this.id, session.accountName, nls.localize('sync', "Preferences Sync"));
return this._proxy.$getSessionAccessToken(this.id, session.id);
}
}; };
}); });
} }
...@@ -281,6 +326,8 @@ export class MainThreadAuthentication extends Disposable implements MainThreadAu ...@@ -281,6 +326,8 @@ export class MainThreadAuthentication extends Disposable implements MainThreadAu
} }
async $getSessionsPrompt(providerId: string, accountName: string, providerName: string, extensionId: string, extensionName: string): Promise<boolean> { async $getSessionsPrompt(providerId: string, accountName: string, providerName: string, extensionId: string, extensionName: string): Promise<boolean> {
addAccountUsage(providerId, accountName, extensionName);
const allowList = readAllowedExtensions(this.storageService, providerId, accountName); const allowList = readAllowedExtensions(this.storageService, providerId, accountName);
const extensionData = allowList.find(extension => extension.id === extensionId); const extensionData = allowList.find(extension => extension.id === extensionId);
if (extensionData) { if (extensionData) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册