mirror of
https://github.com/microsoft/vscode.git
synced 2026-09-25 00:44:05 +01:00
Move switch settings sync service during turn on
This commit is contained in:
@@ -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<string>('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<void> {
|
||||
const userDataSyncStore = this.userDataSyncStoreManagementService.userDataSyncStore;
|
||||
if (userDataSyncStore?.canSwitch && ![userDataSyncStore.insidersUrl, userDataSyncStore.stableUrl].includes(userDataSyncStore.url)) {
|
||||
return new Promise<void>((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<void> {
|
||||
return new Promise<void>((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);
|
||||
|
||||
@@ -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<void> {
|
||||
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<void> {
|
||||
const viewContainer = this.viewDescriptorService.getViewContainerById(SYNC_VIEW_CONTAINER_ID);
|
||||
if (viewContainer) {
|
||||
|
||||
@@ -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<void>;
|
||||
turnoff(everyWhere: boolean): Promise<void>;
|
||||
signIn(): Promise<void>;
|
||||
switchSyncService(type: UserDataSyncStoreType): Promise<void>;
|
||||
|
||||
resetSyncedData(): Promise<void>;
|
||||
showSyncActivity(): Promise<void>;
|
||||
|
||||
Reference in New Issue
Block a user