Skip to content

Commit b96ce60

Browse files
committed
microsoft#103405 check if sync is on
1 parent a8cb99a commit b96ce60

File tree

10 files changed

+54
-70
lines changed

10 files changed

+54
-70
lines changed

src/vs/workbench/contrib/extensions/browser/extensionsActions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -909,7 +909,7 @@ export class EnableForWorkspaceAction extends ExtensionAction {
909909
if (this.extension && this.extension.local) {
910910
this.enabled = this.extension.state === ExtensionState.Installed
911911
&& !this.extensionEnablementService.isEnabled(this.extension.local)
912-
&& this.extensionEnablementService.canChangeEnablement(this.extension.local);
912+
&& this.extensionEnablementService.canChangeWorkspaceEnablement(this.extension.local);
913913
}
914914
}
915915

src/vs/workbench/contrib/userDataSync/browser/userDataAutoSyncService.ts

Lines changed: 0 additions & 42 deletions
This file was deleted.

src/vs/workbench/contrib/userDataSync/browser/userDataSync.contribution.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { Disposable } from 'vs/base/common/lifecycle';
1313
import { localize } from 'vs/nls';
1414
import { isWeb } from 'vs/base/common/platform';
1515
import { IConfigurationService, ConfigurationTarget } from 'vs/platform/configuration/common/configuration';
16+
import { UserDataSyncTrigger } from 'vs/workbench/contrib/userDataSync/browser/userDataSyncTrigger';
1617

1718
class UserDataSyncReportIssueContribution extends Disposable implements IWorkbenchContribution {
1819

@@ -67,6 +68,7 @@ export class UserDataSyncSettingsMigrationContribution implements IWorkbenchCont
6768
const workbenchRegistry = Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench);
6869
workbenchRegistry.registerWorkbenchContribution(UserDataSyncWorkbenchContribution, LifecyclePhase.Ready);
6970
workbenchRegistry.registerWorkbenchContribution(UserDataSyncSettingsMigrationContribution, LifecyclePhase.Eventually);
71+
workbenchRegistry.registerWorkbenchContribution(UserDataSyncTrigger, LifecyclePhase.Eventually);
7072

7173
if (isWeb) {
7274
workbenchRegistry.registerWorkbenchContribution(UserDataSyncReportIssueContribution, LifecyclePhase.Ready);

src/vs/workbench/contrib/userDataSync/browser/userDataSyncTrigger.ts

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import { Event, Emitter } from 'vs/base/common/event';
6+
import { Event } from 'vs/base/common/event';
77
import { Disposable } from 'vs/base/common/lifecycle';
88
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
99
import { SettingsEditor2Input, KeybindingsEditorInput, PreferencesEditorInput } from 'vs/workbench/services/preferences/common/preferencesEditorInput';
@@ -12,24 +12,36 @@ import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/
1212
import { VIEWLET_ID } from 'vs/workbench/contrib/extensions/common/extensions';
1313
import { IEditorInput } from 'vs/workbench/common/editor';
1414
import { IViewsService } from 'vs/workbench/common/views';
15+
import { IUserDataAutoSyncService } from 'vs/platform/userDataSync/common/userDataSync';
16+
import { IWorkbenchContribution } from 'vs/workbench/common/contributions';
17+
import { isWeb } from 'vs/base/common/platform';
18+
import { IHostService } from 'vs/workbench/services/host/browser/host';
1519

16-
export class UserDataSyncTrigger extends Disposable {
17-
18-
private readonly _onDidTriggerSync: Emitter<string> = this._register(new Emitter<string>());
19-
readonly onDidTriggerSync: Event<string> = this._onDidTriggerSync.event;
20+
export class UserDataSyncTrigger extends Disposable implements IWorkbenchContribution {
2021

2122
constructor(
2223
@IEditorService editorService: IEditorService,
2324
@IWorkbenchEnvironmentService private readonly workbenchEnvironmentService: IWorkbenchEnvironmentService,
2425
@IViewsService viewsService: IViewsService,
26+
@IUserDataAutoSyncService userDataAutoSyncService: IUserDataAutoSyncService,
27+
@IHostService hostService: IHostService,
2528
) {
2629
super();
27-
this._register(
28-
Event.filter(
29-
Event.any<string | undefined>(
30-
Event.map(editorService.onDidActiveEditorChange, () => this.getUserDataEditorInputSource(editorService.activeEditor)),
31-
Event.map(Event.filter(viewsService.onDidChangeViewContainerVisibility, e => e.id === VIEWLET_ID && e.visible), e => e.id)
32-
), source => source !== undefined)(source => this._onDidTriggerSync.fire(source!)));
30+
const event = Event.filter(
31+
Event.any<string | undefined>(
32+
Event.map(editorService.onDidActiveEditorChange, () => this.getUserDataEditorInputSource(editorService.activeEditor)),
33+
Event.map(Event.filter(viewsService.onDidChangeViewContainerVisibility, e => e.id === VIEWLET_ID && e.visible), e => e.id)
34+
), source => source !== undefined);
35+
if (isWeb) {
36+
this._register(Event.debounce<string, string[]>(
37+
Event.any<string>(
38+
Event.map(hostService.onDidChangeFocus, () => 'windowFocus'),
39+
Event.map(event, source => source!),
40+
), (last, source) => last ? [...last, source] : [source], 1000)
41+
(sources => userDataAutoSyncService.triggerSync(sources, true, false)));
42+
} else {
43+
this._register(event(source => userDataAutoSyncService.triggerSync([source!], true, false)));
44+
}
3345
}
3446

3547
private getUserDataEditorInputSource(editorInput: IEditorInput | undefined): string | undefined {

src/vs/workbench/services/extensionManagement/common/extensionEnablementService.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { IProductService } from 'vs/platform/product/common/productService';
2020
import { StorageManager } from 'vs/platform/extensionManagement/common/extensionEnablementService';
2121
import { webWorkerExtHostConfig } from 'vs/workbench/services/extensions/common/extensions';
2222
import { IUserDataSyncAccountService } from 'vs/platform/userDataSync/common/userDataSyncAccount';
23+
import { IUserDataAutoSyncService } from 'vs/platform/userDataSync/common/userDataSync';
2324

2425
const SOURCE = 'IWorkbenchExtensionEnablementService';
2526

@@ -41,6 +42,7 @@ export class ExtensionEnablementService extends Disposable implements IWorkbench
4142
@IConfigurationService private readonly configurationService: IConfigurationService,
4243
@IExtensionManagementServerService private readonly extensionManagementServerService: IExtensionManagementServerService,
4344
@IProductService private readonly productService: IProductService,
45+
@IUserDataAutoSyncService private readonly userDataAutoSyncService: IUserDataAutoSyncService,
4446
@IUserDataSyncAccountService private readonly userDataSyncAccountService: IUserDataSyncAccountService,
4547
) {
4648
super();
@@ -85,7 +87,7 @@ export class ExtensionEnablementService extends Disposable implements IWorkbench
8587
throw new Error(localize('cannot disable language pack extension', "Cannot disable {0} extension because it contributes language packs.", extension.manifest.displayName || extension.identifier.id));
8688
}
8789

88-
if (this.userDataSyncAccountService.account &&
90+
if (this.userDataAutoSyncService.isEnabled() && this.userDataSyncAccountService.account &&
8991
isAuthenticaionProviderExtension(extension.manifest) && extension.manifest.contributes!.authentication!.some(a => a.id === this.userDataSyncAccountService.account!.authenticationProviderId)) {
9092
throw new Error(localize('cannot disable auth extension', "Cannot disable {0} extension because Settings Sync depends on it.", extension.manifest.displayName || extension.identifier.id));
9193
}

src/vs/workbench/services/extensionManagement/test/browser/extensionEnablementService.test.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import { TestConfigurationService } from 'vs/platform/configuration/test/common/
2424
import { productService } from 'vs/workbench/test/browser/workbenchTestServices';
2525
import { GlobalExtensionEnablementService } from 'vs/platform/extensionManagement/common/extensionEnablementService';
2626
import { IUserDataSyncAccountService, UserDataSyncAccountService } from 'vs/platform/userDataSync/common/userDataSyncAccount';
27+
import { IUserDataAutoSyncService } from 'vs/platform/userDataSync/common/userDataSync';
2728

2829
function createStorageService(instantiationService: TestInstantiationService): IStorageService {
2930
let service = instantiationService.get(IStorageService);
@@ -53,6 +54,7 @@ export class TestExtensionEnablementService extends ExtensionEnablementService {
5354
instantiationService.get(IConfigurationService),
5455
extensionManagementServerService,
5556
productService,
57+
instantiationService.get(IUserDataAutoSyncService) || instantiationService.stub(IUserDataAutoSyncService, <Partial<IUserDataAutoSyncService>>{ isEnabled() { return false; } }),
5658
instantiationService.get(IUserDataSyncAccountService) || instantiationService.stub(IUserDataSyncAccountService, UserDataSyncAccountService)
5759
);
5860
}
@@ -385,7 +387,16 @@ suite('ExtensionEnablementService Test', () => {
385387
assert.equal(testObject.canChangeEnablement(aLocalExtension('pub.a', { authentication: [{ id: 'a', label: 'a' }] })), true);
386388
});
387389

388-
test('test canChangeEnablement return false for auth extension and user data sync account depends on it', () => {
390+
test('test canChangeEnablement return true for auth extension when user data sync account depends on it but auto sync is off', () => {
391+
instantiationService.stub(IUserDataSyncAccountService, <Partial<IUserDataSyncAccountService>>{
392+
account: { authenticationProviderId: 'a' }
393+
});
394+
testObject = new TestExtensionEnablementService(instantiationService);
395+
assert.equal(testObject.canChangeEnablement(aLocalExtension('pub.a', { authentication: [{ id: 'a', label: 'a' }] })), true);
396+
});
397+
398+
test('test canChangeEnablement return false for auth extension and user data sync account depends on it and auto sync is on', () => {
399+
instantiationService.stub(IUserDataAutoSyncService, <Partial<IUserDataAutoSyncService>>{ isEnabled() { return true; } });
389400
instantiationService.stub(IUserDataSyncAccountService, <Partial<IUserDataSyncAccountService>>{
390401
account: { authenticationProviderId: 'a' }
391402
});

src/vs/workbench/contrib/userDataSync/electron-browser/userDataAutoSyncService.ts renamed to src/vs/workbench/services/userDataSync/electron-browser/userDataAutoSyncService.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,12 @@ import { IUserDataAutoSyncService, UserDataSyncError, IUserDataSyncStoreManageme
77
import { ISharedProcessService } from 'vs/platform/ipc/electron-browser/sharedProcessService';
88
import { IChannel } from 'vs/base/parts/ipc/common/ipc';
99
import { Event } from 'vs/base/common/event';
10-
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
11-
import { UserDataSyncTrigger } from 'vs/workbench/contrib/userDataSync/browser/userDataSyncTrigger';
1210
import { UserDataAutoSyncEnablementService } from 'vs/platform/userDataSync/common/userDataAutoSyncService';
1311
import { IStorageService } from 'vs/platform/storage/common/storage';
1412
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
13+
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
1514

16-
export class UserDataAutoSyncService extends UserDataAutoSyncEnablementService implements IUserDataAutoSyncService {
15+
class UserDataAutoSyncService extends UserDataAutoSyncEnablementService implements IUserDataAutoSyncService {
1716

1817
declare readonly _serviceBrand: undefined;
1918

@@ -24,12 +23,10 @@ export class UserDataAutoSyncService extends UserDataAutoSyncEnablementService i
2423
@IStorageService storageService: IStorageService,
2524
@IEnvironmentService environmentService: IEnvironmentService,
2625
@IUserDataSyncStoreManagementService userDataSyncStoreManagementService: IUserDataSyncStoreManagementService,
27-
@IInstantiationService instantiationService: IInstantiationService,
2826
@ISharedProcessService sharedProcessService: ISharedProcessService,
2927
) {
3028
super(storageService, environmentService, userDataSyncStoreManagementService);
3129
this.channel = sharedProcessService.getChannel('userDataAutoSync');
32-
this._register(instantiationService.createInstance(UserDataSyncTrigger).onDidTriggerSync(source => this.triggerSync([source], true, false)));
3330
}
3431

3532
triggerSync(sources: string[], hasToLimitSync: boolean, disableCache: boolean): Promise<void> {
@@ -45,3 +42,5 @@ export class UserDataAutoSyncService extends UserDataAutoSyncEnablementService i
4542
}
4643

4744
}
45+
46+
registerSingleton(IUserDataAutoSyncService, UserDataAutoSyncService);

src/vs/workbench/contrib/userDataSync/electron-browser/userDataSyncStoreManagementService.ts renamed to src/vs/workbench/services/userDataSync/electron-browser/userDataSyncStoreManagementService.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ import { AbstractUserDataSyncStoreManagementService } from 'vs/platform/userData
1111
import { IProductService } from 'vs/platform/product/common/productService';
1212
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
1313
import { URI } from 'vs/base/common/uri';
14+
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
1415

15-
export class UserDataSyncStoreManagementService extends AbstractUserDataSyncStoreManagementService implements IUserDataSyncStoreManagementService {
16+
class UserDataSyncStoreManagementService extends AbstractUserDataSyncStoreManagementService implements IUserDataSyncStoreManagementService {
1617

1718
private readonly channel: IChannel;
1819

@@ -46,3 +47,5 @@ export class UserDataSyncStoreManagementService extends AbstractUserDataSyncStor
4647
}
4748

4849
}
50+
51+
registerSingleton(IUserDataSyncStoreManagementService, UserDataSyncStoreManagementService);

src/vs/workbench/workbench.desktop.main.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ import 'vs/workbench/services/workspaces/electron-browser/workspaceEditingServic
5555
import 'vs/workbench/services/userDataSync/electron-browser/userDataSyncMachinesService';
5656
import 'vs/workbench/services/userDataSync/electron-browser/userDataSyncService';
5757
import 'vs/workbench/services/userDataSync/electron-browser/userDataSyncAccountService';
58+
import 'vs/workbench/services/userDataSync/electron-browser/userDataSyncStoreManagementService';
59+
import 'vs/workbench/services/userDataSync/electron-browser/userDataAutoSyncService';
5860
import 'vs/workbench/services/sharedProcess/electron-browser/sharedProcessService';
5961
import 'vs/workbench/services/localizations/electron-browser/localizationsService';
6062
import 'vs/workbench/services/path/electron-browser/pathService';
@@ -63,17 +65,13 @@ import 'vs/workbench/services/experiment/electron-browser/experimentService';
6365
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
6466
import { ICredentialsService } from 'vs/platform/credentials/common/credentials';
6567
import { KeytarCredentialsService } from 'vs/platform/credentials/node/credentialsService';
66-
import { IUserDataAutoSyncService, IUserDataSyncStoreManagementService } from 'vs/platform/userDataSync/common/userDataSync';
67-
import { UserDataAutoSyncService } from 'vs/workbench/contrib/userDataSync/electron-browser/userDataAutoSyncService';
6868
import { ITunnelService } from 'vs/platform/remote/common/tunnel';
6969
import { TunnelService } from 'vs/platform/remote/node/tunnelService';
7070
import { ITimerService } from 'vs/workbench/services/timer/browser/timerService';
7171
import { TimerService } from 'vs/workbench/services/timer/electron-browser/timerService';
7272
import { IUserDataInitializationService, UserDataInitializationService } from 'vs/workbench/services/userData/browser/userDataInit';
7373

7474
registerSingleton(ICredentialsService, KeytarCredentialsService, true);
75-
registerSingleton(IUserDataSyncStoreManagementService, UserDataSyncStoreManagementService);
76-
registerSingleton(IUserDataAutoSyncService, UserDataAutoSyncService);
7775
registerSingleton(ITunnelService, TunnelService);
7876
registerSingleton(ITimerService, TimerService);
7977
registerSingleton(IUserDataInitializationService, UserDataInitializationService);
@@ -137,6 +135,5 @@ import 'vs/workbench/contrib/userDataSync/electron-browser/userDataSync.contribu
137135

138136
// Configuration Exporter
139137
import 'vs/workbench/contrib/configExporter/electron-browser/configurationExportHelper.contribution';
140-
import { UserDataSyncStoreManagementService } from 'vs/workbench/contrib/userDataSync/electron-browser/userDataSyncStoreManagementService';
141138

142139
//#endregion

src/vs/workbench/workbench.web.main.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ import { UserDataSyncStoreService, UserDataSyncStoreManagementService } from 'vs
7171
import { UserDataSyncBackupStoreService } from 'vs/platform/userDataSync/common/userDataSyncBackupStoreService';
7272
import { UserDataSyncService } from 'vs/platform/userDataSync/common/userDataSyncService';
7373
import { IUserDataSyncAccountService, UserDataSyncAccountService } from 'vs/platform/userDataSync/common/userDataSyncAccount';
74-
import { UserDataAutoSyncService } from 'vs/workbench/contrib/userDataSync/browser/userDataAutoSyncService';
74+
import { UserDataAutoSyncService } from 'vs/platform/userDataSync/common/userDataAutoSyncService';
7575
import { AccessibilityService } from 'vs/platform/accessibility/common/accessibilityService';
7676
import { ITitleService } from 'vs/workbench/services/title/common/titleService';
7777
import { TitlebarPart } from 'vs/workbench/browser/parts/titlebar/titlebarPart';
@@ -90,8 +90,8 @@ registerSingleton(IUserDataSyncMachinesService, UserDataSyncMachinesService);
9090
registerSingleton(IUserDataSyncBackupStoreService, UserDataSyncBackupStoreService);
9191
registerSingleton(IStorageKeysSyncRegistryService, StorageKeysSyncRegistryService);
9292
registerSingleton(IUserDataSyncAccountService, UserDataSyncAccountService);
93-
registerSingleton(IUserDataAutoSyncService, UserDataAutoSyncService);
94-
registerSingleton(IUserDataSyncService, UserDataSyncService);
93+
registerSingleton(IUserDataSyncService, UserDataSyncService, true);
94+
registerSingleton(IUserDataAutoSyncService, UserDataAutoSyncService, true);
9595
registerSingleton(ITitleService, TitlebarPart);
9696
registerSingleton(IExtensionTipsService, ExtensionTipsService);
9797
registerSingleton(ITimerService, TimerService);

0 commit comments

Comments
 (0)