From 6663bb658ea24f4e182594d7e3669cfa8a526c2c Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Thu, 17 Sep 2020 00:41:24 +0200 Subject: [PATCH] Move switch settings sync service during turn on --- .../userDataSync/browser/userDataSync.ts | 113 +++++++----------- .../browser/userDataSyncWorkbenchService.ts | 28 +---- .../userDataSync/common/userDataSync.ts | 3 +- 3 files changed, 45 insertions(+), 99 deletions(-) diff --git a/src/vs/workbench/contrib/userDataSync/browser/userDataSync.ts b/src/vs/workbench/contrib/userDataSync/browser/userDataSync.ts index ec3c96b7a56..52a0041eafa 100644 --- a/src/vs/workbench/contrib/userDataSync/browser/userDataSync.ts +++ b/src/vs/workbench/contrib/userDataSync/browser/userDataSync.ts @@ -30,7 +30,7 @@ import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { IUserDataAutoSyncService, IUserDataSyncService, registerConfiguration, SyncResource, SyncStatus, UserDataSyncError, UserDataSyncErrorCode, USER_DATA_SYNC_SCHEME, IUserDataSyncResourceEnablementService, - getSyncResourceFromLocalPreview, IResourcePreview, IUserDataSyncStoreManagementService, UserDataSyncStoreType + getSyncResourceFromLocalPreview, IResourcePreview, IUserDataSyncStoreManagementService, UserDataSyncStoreType, IUserDataSyncStore } from 'vs/platform/userDataSync/common/userDataSync'; import { FloatingClickWidget } from 'vs/workbench/browser/parts/editor/editorWidgets'; import { IWorkbenchContribution } from 'vs/workbench/common/contributions'; @@ -54,7 +54,6 @@ import { Codicon } from 'vs/base/common/codicons'; import { ViewContainerLocation, IViewContainersRegistry, Extensions, ViewContainer } from 'vs/workbench/common/views'; import { UserDataSyncViewPaneContainer, UserDataSyncDataViews } from 'vs/workbench/contrib/userDataSync/browser/userDataSyncViews'; import { IUserDataSyncWorkbenchService, getSyncAreaLabel, AccountStatus, CONTEXT_SYNC_STATE, CONTEXT_SYNC_ENABLEMENT, CONTEXT_ACCOUNT_STATE, CONFIGURE_SYNC_COMMAND_ID, SHOW_SYNC_LOG_COMMAND_ID, SYNC_VIEW_CONTAINER_ID, SYNC_TITLE } from 'vs/workbench/services/userDataSync/common/userDataSync'; -import { isNative } from 'vs/base/common/platform'; const CONTEXT_CONFLICTS_SOURCES = new RawContextKey('conflictsSources', ''); @@ -443,6 +442,9 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo if (!turnOn) { return; } + if (this.userDataSyncStoreManagementService.userDataSyncStore?.canSwitch) { + await this.selectSettingsSyncService(this.userDataSyncStoreManagementService.userDataSyncStore); + } await this.userDataSyncWorkbenchService.turnOn(); this.storageService.store('sync.donotAskPreviewConfirmation', true, StorageScope.GLOBAL); } catch (e) { @@ -674,52 +676,46 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo return this.outputService.showChannel(Constants.userDataSyncLogChannelId); } - private async switchSyncService(): Promise { - const userDataSyncStore = this.userDataSyncStoreManagementService.userDataSyncStore; - if (userDataSyncStore?.canSwitch && ![userDataSyncStore.insidersUrl, userDataSyncStore.stableUrl].includes(userDataSyncStore.url)) { - return new Promise((c, e) => { - const disposables: DisposableStore = new DisposableStore(); - const quickPick = disposables.add(this.quickInputService.createQuickPick<{ id: UserDataSyncStoreType, label: string, description?: string }>()); - quickPick.title = localize('switchSyncService.title', "Select Settings Sync Service..."); - quickPick.placeholder = localize('choose sync service', "Choose settings sync Service to use"); - quickPick.description = isNative ? - localize('choose sync service description', "Switching settings sync service requires restarting {0}", this.productService.nameLong) : - localize('choose sync service description web', "Switching settings sync service requires reloading {0}", this.productService.nameLong); - quickPick.hideInput = true; - const getDescription = (url: URI): string | undefined => { - const isCurrent = isEqual(url, userDataSyncStore.url); - const isDefault = isEqual(url, userDataSyncStore.defaultUrl); - if (isCurrent && isDefault) { - return localize('default and current', "Default & Current"); - } - if (isDefault) { - return localize('default', "Default"); - } - if (isCurrent) { - return localize('current', "Current"); - } - return undefined; - }; - quickPick.items = [ - { - id: 'insiders', - label: localize('insiders', "Insiders"), - description: getDescription(userDataSyncStore.insidersUrl!) - }, - { - id: 'stable', - label: localize('stable', "Stable"), - description: getDescription(userDataSyncStore.stableUrl!) - } - ]; - disposables.add(quickPick.onDidAccept(() => { - this.userDataSyncWorkbenchService.switchSyncService(quickPick.selectedItems[0].id); + private async selectSettingsSyncService(userDataSyncStore: IUserDataSyncStore): Promise { + return new Promise((c, e) => { + const disposables: DisposableStore = new DisposableStore(); + const quickPick = disposables.add(this.quickInputService.createQuickPick<{ id: UserDataSyncStoreType, label: string, description?: string }>()); + quickPick.title = localize('switchSyncService.title', "{0}: Select Service", SYNC_TITLE); + quickPick.description = localize('switchSyncService.description', "Ensure you are using the same settings sync service when syncing with multiple environments"); + quickPick.hideInput = true; + quickPick.ignoreFocusOut = true; + const getDescription = (url: URI): string | undefined => { + const isDefault = isEqual(url, userDataSyncStore.defaultUrl); + if (isDefault) { + return localize('default', "Default"); + } + return undefined; + }; + quickPick.items = [ + { + id: 'insiders', + label: localize('insiders', "Insiders"), + description: getDescription(userDataSyncStore.insidersUrl) + }, + { + id: 'stable', + label: localize('stable', "Stable"), + description: getDescription(userDataSyncStore.stableUrl) + } + ]; + disposables.add(quickPick.onDidAccept(async () => { + try { + await this.userDataSyncStoreManagementService.switch(quickPick.selectedItems[0].id); + c(); + } catch (error) { + e(error); + } finally { quickPick.hide(); - })); - disposables.add(quickPick.onDidHide(() => disposables.dispose())); - quickPick.show(); - }); - } + } + })); + disposables.add(quickPick.onDidHide(() => disposables.dispose())); + quickPick.show(); + }); } private registerActions(): void { @@ -738,7 +734,6 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo this.registerSyncNowAction(); this.registerConfigureSyncAction(); this.registerShowSettingsAction(); - this.registerSwitchSyncServiceAction(); this.registerShowLogAction(); } @@ -1117,28 +1112,6 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo })); } - private registerSwitchSyncServiceAction(): void { - const that = this; - const userDataSyncStore = this.userDataSyncStoreManagementService.userDataSyncStore; - if (userDataSyncStore?.canSwitch && ![userDataSyncStore.insidersUrl, userDataSyncStore.stableUrl].includes(userDataSyncStore.url)) { - this._register(registerAction2(class ShowSyncSettingsAction extends Action2 { - constructor() { - super({ - id: 'workbench.userDataSync.actions.switchSyncService', - title: { value: localize('workbench.userDataSync.actions.switchSyncService', "{0}: Select Service...", SYNC_TITLE), original: 'Settings Sync: Select Service...' }, - menu: { - id: MenuId.CommandPalette, - when: ContextKeyExpr.and(CONTEXT_SYNC_STATE.notEqualsTo(SyncStatus.Uninitialized)), - }, - }); - } - run(accessor: ServicesAccessor): any { - return that.switchSyncService(); - } - })); - } - } - private registerViews(): void { const container = this.registerViewContainer(); this.registerDataViews(container); diff --git a/src/vs/workbench/services/userDataSync/browser/userDataSyncWorkbenchService.ts b/src/vs/workbench/services/userDataSync/browser/userDataSyncWorkbenchService.ts index 1f4df831651..e8b4924fe5a 100644 --- a/src/vs/workbench/services/userDataSync/browser/userDataSyncWorkbenchService.ts +++ b/src/vs/workbench/services/userDataSync/browser/userDataSyncWorkbenchService.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IUserDataSyncService, IAuthenticationProvider, isAuthenticationProvider, IUserDataAutoSyncService, SyncResource, IResourcePreview, ISyncResourcePreview, Change, IManualSyncTask, IUserDataSyncStoreManagementService, UserDataSyncStoreType, SyncStatus } from 'vs/platform/userDataSync/common/userDataSync'; +import { IUserDataSyncService, IAuthenticationProvider, isAuthenticationProvider, IUserDataAutoSyncService, SyncResource, IResourcePreview, ISyncResourcePreview, Change, IManualSyncTask, IUserDataSyncStoreManagementService, SyncStatus } from 'vs/platform/userDataSync/common/userDataSync'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { registerSingleton } from 'vs/platform/instantiation/common/extensions'; import { IUserDataSyncWorkbenchService, IUserDataSyncAccount, AccountStatus, CONTEXT_SYNC_ENABLEMENT, CONTEXT_SYNC_STATE, CONTEXT_ACCOUNT_STATE, SHOW_SYNC_LOG_COMMAND_ID, getSyncAreaLabel, IUserDataSyncPreview, IUserDataSyncResource, CONTEXT_ENABLE_SYNC_MERGES_VIEW, SYNC_MERGES_VIEW_ID, CONTEXT_ENABLE_ACTIVITY_VIEWS, SYNC_VIEW_CONTAINER_ID, SYNC_TITLE } from 'vs/workbench/services/userDataSync/common/userDataSync'; @@ -29,8 +29,6 @@ import { IProgressService, ProgressLocation } from 'vs/platform/progress/common/ import { isEqual } from 'vs/base/common/resources'; import { URI } from 'vs/base/common/uri'; import { IViewsService, ViewContainerLocation, IViewDescriptorService } from 'vs/workbench/common/views'; -import { isNative } from 'vs/base/common/platform'; -import { IHostService } from 'vs/workbench/services/host/browser/host'; import { ILifecycleService } from 'vs/platform/lifecycle/common/lifecycle'; type UserAccountClassification = { @@ -108,7 +106,6 @@ export class UserDataSyncWorkbenchService extends Disposable implements IUserDat @IViewsService private readonly viewsService: IViewsService, @IViewDescriptorService private readonly viewDescriptorService: IViewDescriptorService, @IUserDataSyncStoreManagementService private readonly userDataSyncStoreManagementService: IUserDataSyncStoreManagementService, - @IHostService private readonly hostService: IHostService, @ILifecycleService private readonly lifecycleService: ILifecycleService, ) { super(); @@ -444,29 +441,6 @@ export class UserDataSyncWorkbenchService extends Disposable implements IUserDat await this.viewsService.openViewContainer(SYNC_VIEW_CONTAINER_ID); } - async switchSyncService(type: UserDataSyncStoreType): Promise { - if (!this.userDataSyncStoreManagementService.userDataSyncStore - || !this.userDataSyncStoreManagementService.userDataSyncStore.canSwitch) { - return; - } - await this.userDataSyncStoreManagementService.switch(type); - const res = await this.dialogService.confirm({ - type: 'info', - message: isNative ? - localize('relaunchMessage', "Switching settings sync service requires a restart to take effect.") : - localize('relaunchMessageWeb', "Switching settings sync service requires a reload to take effect."), - detail: isNative ? - localize('relaunchDetail', "Press the restart button to restart {0} and switch.", this.productService.nameLong) : - localize('relaunchDetailWeb', "Press the reload button to reload {0} and switch.", this.productService.nameLong), - primaryButton: isNative ? - localize('restart', "&&Restart") : - localize('restartWeb', "&&Reload"), - }); - if (res.confirmed) { - this.hostService.restart(); - } - } - private async waitForActiveSyncViews(): Promise { const viewContainer = this.viewDescriptorService.getViewContainerById(SYNC_VIEW_CONTAINER_ID); if (viewContainer) { diff --git a/src/vs/workbench/services/userDataSync/common/userDataSync.ts b/src/vs/workbench/services/userDataSync/common/userDataSync.ts index aaaad9acf40..4e0e54f6252 100644 --- a/src/vs/workbench/services/userDataSync/common/userDataSync.ts +++ b/src/vs/workbench/services/userDataSync/common/userDataSync.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IAuthenticationProvider, SyncStatus, SyncResource, Change, MergeState, UserDataSyncStoreType } from 'vs/platform/userDataSync/common/userDataSync'; +import { IAuthenticationProvider, SyncStatus, SyncResource, Change, MergeState } from 'vs/platform/userDataSync/common/userDataSync'; import { Event } from 'vs/base/common/event'; import { RawContextKey } from 'vs/platform/contextkey/common/contextkey'; import { localize } from 'vs/nls'; @@ -58,7 +58,6 @@ export interface IUserDataSyncWorkbenchService { turnOn(): Promise; turnoff(everyWhere: boolean): Promise; signIn(): Promise; - switchSyncService(type: UserDataSyncStoreType): Promise; resetSyncedData(): Promise; showSyncActivity(): Promise;