support switching settings sync services in web

synchronise setting sync service type in web
show necessary prompts when services are changed
This commit is contained in:
Sandeep Somavarapu
2021-02-17 19:00:21 +01:00
parent 84534d243c
commit 108616d359
15 changed files with 252 additions and 70 deletions

View File

@@ -31,6 +31,9 @@ import { URI } from 'vs/base/common/uri';
import { IViewsService, ViewContainerLocation, IViewDescriptorService } from 'vs/workbench/common/views';
import { ILifecycleService } from 'vs/workbench/services/lifecycle/common/lifecycle';
import { isWeb } from 'vs/base/common/platform';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { UserDataSyncStoreClient } from 'vs/platform/userDataSync/common/userDataSyncStoreService';
import { UserDataSyncStoreTypeSynchronizer } from 'vs/platform/userDataSync/common/globalStateSync';
type UserAccountClassification = {
id: { classification: 'EndUserPseudonymizedInformation', purpose: 'BusinessInsight' };
@@ -109,6 +112,7 @@ export class UserDataSyncWorkbenchService extends Disposable implements IUserDat
@IViewDescriptorService private readonly viewDescriptorService: IViewDescriptorService,
@IUserDataSyncStoreManagementService private readonly userDataSyncStoreManagementService: IUserDataSyncStoreManagementService,
@ILifecycleService private readonly lifecycleService: ILifecycleService,
@IInstantiationService private readonly instantiationService: IInstantiationService,
) {
super();
this.syncEnablementContext = CONTEXT_SYNC_ENABLEMENT.bindTo(contextKeyService);
@@ -280,6 +284,11 @@ export class UserDataSyncWorkbenchService extends Disposable implements IUserDat
}
await this.userDataAutoSyncService.turnOn();
if (this.userDataSyncStoreManagementService.userDataSyncStore?.canSwitch) {
await this.synchroniseUserDataSyncStoreType();
}
this.notificationService.info(localize('sync turned on', "{0} is turned on", title));
}
@@ -287,6 +296,25 @@ export class UserDataSyncWorkbenchService extends Disposable implements IUserDat
return this.userDataAutoSyncService.turnOff(everywhere);
}
async synchroniseUserDataSyncStoreType(): Promise<void> {
if (!this.userDataSyncAccountService.account) {
throw new Error('Cannot update because you are signed out from settings sync. Please sign in and try again.');
}
if (!isWeb || !this.userDataSyncStoreManagementService.userDataSyncStore) {
// Not supported
return;
}
const userDataSyncStoreUrl = this.userDataSyncStoreManagementService.userDataSyncStore.type === 'insiders' ? this.userDataSyncStoreManagementService.userDataSyncStore.stableUrl : this.userDataSyncStoreManagementService.userDataSyncStore.insidersUrl;
const userDataSyncStoreClient = this.instantiationService.createInstance(UserDataSyncStoreClient, userDataSyncStoreUrl);
userDataSyncStoreClient.setAuthToken(this.userDataSyncAccountService.account.token, this.userDataSyncAccountService.account.authenticationProviderId);
await this.instantiationService.createInstance(UserDataSyncStoreTypeSynchronizer, userDataSyncStoreClient).sync(this.userDataSyncStoreManagementService.userDataSyncStore.type);
}
syncNow(): Promise<void> {
return this.userDataAutoSyncService.triggerSync(['Sync Now'], false, true);
}
private async onBeforeShutdown(manualSyncTask: IManualSyncTask): Promise<boolean> {
const result = await this.dialogService.confirm({
type: 'warning',

View File

@@ -63,6 +63,9 @@ export interface IUserDataSyncWorkbenchService {
resetSyncedData(): Promise<void>;
showSyncActivity(): Promise<void>;
syncNow(): Promise<void>;
synchroniseUserDataSyncStoreType(): Promise<void>;
}
export function getSyncAreaLabel(source: SyncResource): string {