Accounts: Enable notification for accounts change (#2432)

* Enable notification for accounts change

* Fixed bugs in extHostAccountManagement.test.ts

* Fixed as commented:
1. Removed AccountWithProviderHandle
2. Use a private dictionary _accounts in ExtHostAccountManagement to cache all accounts and corresponding provider handles.
3. getSecurityToken gets provider handle from _accounts for specified account.
4. Added / changed unit tests for getAllAccounts & getSecurityToken
This commit is contained in:
Vincent Feng
2018-09-07 08:23:28 +08:00
committed by GitHub
parent 197e1c651f
commit 005c28dd3a
6 changed files with 177 additions and 47 deletions

View File

@@ -16,6 +16,7 @@ import {
} from 'sql/workbench/api/node/sqlExtHost.protocol';
import { IExtHostContext } from 'vs/workbench/api/node/extHost.protocol';
import { extHostNamedCustomer } from 'vs/workbench/api/electron-browser/extHostCustomers';
import { UpdateAccountListEventParams } from 'sql/services/accountManagement/eventTypes';
@extHostNamedCustomer(SqlMainContext.MainThreadAccountManagement)
export class MainThreadAccountManagement implements MainThreadAccountManagementShape {
@@ -32,6 +33,20 @@ export class MainThreadAccountManagement implements MainThreadAccountManagementS
this._proxy = extHostContext.getProxy(SqlExtHostContext.ExtHostAccountManagement);
}
this._toDispose = [];
this._accountManagementService.updateAccountListEvent((e: UpdateAccountListEventParams) => {
if (!e) {
return;
}
const providerMetadataIndex = Object.values(this._providerMetadata).findIndex((providerMetadata: sqlops.AccountProviderMetadata) => providerMetadata.id === e.providerId);
if (providerMetadataIndex === -1) {
return;
}
const providerHandle = parseInt(Object.keys(this._providerMetadata)[providerMetadataIndex]);
this._proxy.$accountsChanged(providerHandle, e.accountList);
});
}
public $beginAutoOAuthDeviceCode(providerId: string, title: string, message: string, userCode: string, uri: string): Thenable<void> {
@@ -62,7 +77,7 @@ export class MainThreadAccountManagement implements MainThreadAccountManagementS
return self._proxy.$clear(handle, accountKey);
},
getSecurityToken(account: sqlops.Account): Thenable<{}> {
return self._proxy.$getSecurityToken(handle, account);
return self._proxy.$getSecurityToken(account);
},
initialize(restoredAccounts: sqlops.Account[]): Thenable<sqlops.Account[]> {
return self._proxy.$initialize(handle, restoredAccounts);