Skip to content

Commit ef210f2

Browse files
committed
get store details from settings
1 parent afb0217 commit ef210f2

7 files changed

Lines changed: 55 additions & 70 deletions

File tree

src/vs/platform/product/common/productService.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -102,12 +102,6 @@ export interface IProductConfiguration {
102102

103103
readonly msftInternalDomains?: string[];
104104
readonly linkProtectionTrustedDomains?: readonly string[];
105-
106-
readonly settingsSyncStore?: {
107-
url: string;
108-
name: string;
109-
account: string;
110-
};
111105
}
112106

113107
export interface IExeBasedExtensionTip {

src/vs/platform/userDataSync/common/userDataSync.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,12 @@ import { IDisposable } from 'vs/base/common/lifecycle';
1414
import { IJSONContributionRegistry, Extensions as JSONExtensions } from 'vs/platform/jsonschemas/common/jsonContributionRegistry';
1515
import { IJSONSchema } from 'vs/base/common/jsonSchema';
1616
import { ILogService } from 'vs/platform/log/common/log';
17+
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
18+
19+
const CONFIGURATION_SYNC_STORE_KEY = 'configurationSync.store';
1720

1821
export const DEFAULT_IGNORED_SETTINGS = [
22+
CONFIGURATION_SYNC_STORE_KEY,
1923
'configurationSync.enable',
2024
'configurationSync.enableSettings',
2125
'configurationSync.enableExtensions',
@@ -98,12 +102,23 @@ export class UserDataSyncStoreError extends Error {
98102

99103
}
100104

105+
export interface IUserDataSyncStore {
106+
url: string;
107+
name: string;
108+
account: string;
109+
}
110+
111+
export function getUserDataSyncStore(configurationService: IConfigurationService): IUserDataSyncStore | undefined {
112+
const value = configurationService.getValue<IUserDataSyncStore>(CONFIGURATION_SYNC_STORE_KEY);
113+
return value && value.url && value.name && value.account ? value : undefined;
114+
}
115+
101116
export const IUserDataSyncStoreService = createDecorator<IUserDataSyncStoreService>('IUserDataSyncStoreService');
102117

103118
export interface IUserDataSyncStoreService {
104119
_serviceBrand: undefined;
105120

106-
readonly enabled: boolean;
121+
readonly userDataSyncStore: IUserDataSyncStore | undefined;
107122

108123
read(key: string, oldValue: IUserData | null): Promise<IUserData>;
109124
write(key: string, content: string, ref: string | null): Promise<string>;

src/vs/platform/userDataSync/common/userDataSyncService.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export class UserDataSyncService extends Disposable implements IUserDataSyncServ
4444
this.synchronisers = [this.settingsSynchroniser, this.extensionsSynchroniser];
4545
this.updateStatus();
4646

47-
if (this.userDataSyncStoreService.enabled) {
47+
if (this.userDataSyncStoreService.userDataSyncStore) {
4848
this._register(Event.any(...this.synchronisers.map(s => Event.map(s.onDidChangeStatus, () => undefined)))(() => this.updateStatus()));
4949
this._register(authTokenService.onDidChangeStatus(() => this.onDidChangeAuthTokenStatus()));
5050
}
@@ -53,7 +53,7 @@ export class UserDataSyncService extends Disposable implements IUserDataSyncServ
5353
}
5454

5555
async sync(_continue?: boolean): Promise<boolean> {
56-
if (!this.userDataSyncStoreService.enabled) {
56+
if (!this.userDataSyncStoreService.userDataSyncStore) {
5757
throw new Error('Not enabled');
5858
}
5959
if (this.authTokenService.status === AuthTokenStatus.SignedOut) {
@@ -68,7 +68,7 @@ export class UserDataSyncService extends Disposable implements IUserDataSyncServ
6868
}
6969

7070
stop(): void {
71-
if (!this.userDataSyncStoreService.enabled) {
71+
if (!this.userDataSyncStoreService.userDataSyncStore) {
7272
throw new Error('Not enabled');
7373
}
7474
for (const synchroniser of this.synchronisers) {
@@ -93,7 +93,7 @@ export class UserDataSyncService extends Disposable implements IUserDataSyncServ
9393
}
9494

9595
private computeStatus(): SyncStatus {
96-
if (!this.userDataSyncStoreService.enabled) {
96+
if (!this.userDataSyncStoreService.userDataSyncStore) {
9797
return SyncStatus.Uninitialized;
9898
}
9999
if (this.synchronisers.some(s => s.status === SyncStatus.HasConflicts)) {

src/vs/platform/userDataSync/common/userDataSyncStoreService.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,35 +4,36 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { Disposable, } from 'vs/base/common/lifecycle';
7-
import { IUserData, IUserDataSyncStoreService, UserDataSyncStoreErrorCode, UserDataSyncStoreError } from 'vs/platform/userDataSync/common/userDataSync';
8-
import { IProductService } from 'vs/platform/product/common/productService';
7+
import { IUserData, IUserDataSyncStoreService, UserDataSyncStoreErrorCode, UserDataSyncStoreError, IUserDataSyncStore, getUserDataSyncStore } from 'vs/platform/userDataSync/common/userDataSync';
98
import { IRequestService, asText, isSuccess } from 'vs/platform/request/common/request';
109
import { URI } from 'vs/base/common/uri';
1110
import { joinPath } from 'vs/base/common/resources';
1211
import { CancellationToken } from 'vs/base/common/cancellation';
1312
import { IHeaders, IRequestOptions, IRequestContext } from 'vs/base/parts/request/common/request';
1413
import { IAuthTokenService } from 'vs/platform/auth/common/auth';
14+
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
1515

1616
export class UserDataSyncStoreService extends Disposable implements IUserDataSyncStoreService {
1717

1818
_serviceBrand: any;
1919

20-
get enabled(): boolean { return !!this.productService.settingsSyncStore; }
20+
readonly userDataSyncStore: IUserDataSyncStore | undefined;
2121

2222
constructor(
23-
@IProductService private readonly productService: IProductService,
23+
@IConfigurationService configurationService: IConfigurationService,
2424
@IRequestService private readonly requestService: IRequestService,
2525
@IAuthTokenService private readonly authTokenService: IAuthTokenService,
2626
) {
2727
super();
28+
this.userDataSyncStore = getUserDataSyncStore(configurationService);
2829
}
2930

3031
async read(key: string, oldValue: IUserData | null): Promise<IUserData> {
31-
if (!this.enabled) {
32+
if (!this.userDataSyncStore) {
3233
throw new Error('No settings sync store url configured.');
3334
}
3435

35-
const url = joinPath(URI.parse(this.productService.settingsSyncStore!.url), 'resource', key, 'latest').toString();
36+
const url = joinPath(URI.parse(this.userDataSyncStore.url), 'resource', key, 'latest').toString();
3637
const headers: IHeaders = {};
3738
if (oldValue) {
3839
headers['If-None-Match'] = oldValue.ref;
@@ -58,11 +59,11 @@ export class UserDataSyncStoreService extends Disposable implements IUserDataSyn
5859
}
5960

6061
async write(key: string, data: string, ref: string | null): Promise<string> {
61-
if (!this.enabled) {
62+
if (!this.userDataSyncStore) {
6263
throw new Error('No settings sync store url configured.');
6364
}
6465

65-
const url = joinPath(URI.parse(this.productService.settingsSyncStore!.url), 'resource', key).toString();
66+
const url = joinPath(URI.parse(this.userDataSyncStore.url), 'resource', key).toString();
6667
const headers: IHeaders = { 'Content-Type': 'text/plain' };
6768
if (ref) {
6869
headers['If-Match'] = ref;

src/vs/workbench/contrib/logs/common/logs.contribution.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import { LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle';
2222
import { isWeb } from 'vs/base/common/platform';
2323
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
2424
import { LogsDataCleaner } from 'vs/workbench/contrib/logs/common/logsDataCleaner';
25-
import { IProductService } from 'vs/platform/product/common/productService';
2625

2726
const workbenchActionsRegistry = Registry.as<IWorkbenchActionRegistry>(WorkbenchActionExtensions.WorkbenchActions);
2827
const devCategory = nls.localize('developer', "Developer");
@@ -35,7 +34,6 @@ class LogOutputChannels extends Disposable implements IWorkbenchContribution {
3534
@ILogService private readonly logService: ILogService,
3635
@IFileService private readonly fileService: IFileService,
3736
@IInstantiationService private readonly instantiationService: IInstantiationService,
38-
@IProductService private readonly productService: IProductService
3937
) {
4038
super();
4139
this.registerCommonContributions();
@@ -47,9 +45,7 @@ class LogOutputChannels extends Disposable implements IWorkbenchContribution {
4745
}
4846

4947
private registerCommonContributions(): void {
50-
if (this.productService.settingsSyncStore) {
51-
this.registerLogChannel(Constants.userDataSyncLogChannelId, nls.localize('userDataSyncLog', "Configuration Sync"), this.environmentService.userDataSyncLogResource);
52-
}
48+
this.registerLogChannel(Constants.userDataSyncLogChannelId, nls.localize('userDataSyncLog', "Configuration Sync"), this.environmentService.userDataSyncLogResource);
5349
this.registerLogChannel(Constants.rendererLogChannelId, nls.localize('rendererLog', "Window"), this.environmentService.logFile);
5450
}
5551

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

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

6-
import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions, IWorkbenchContribution } from 'vs/workbench/common/contributions';
7-
import { registerConfiguration } from 'vs/platform/userDataSync/common/userDataSync';
8-
import { Disposable } from 'vs/base/common/lifecycle';
6+
import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions';
97
import { Registry } from 'vs/platform/registry/common/platform';
108
import { LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle';
11-
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
12-
import { isWeb } from 'vs/base/common/platform';
13-
import { UserDataAutoSync } from 'vs/platform/userDataSync/common/userDataSyncService';
14-
import { IProductService } from 'vs/platform/product/common/productService';
159
import { UserDataSyncWorkbenchContribution } from 'vs/workbench/contrib/userDataSync/browser/userDataSync';
1610

17-
class UserDataSyncConfigurationContribution implements IWorkbenchContribution {
18-
19-
constructor(
20-
@IProductService productService: IProductService
21-
) {
22-
if (productService.settingsSyncStore) {
23-
registerConfiguration();
24-
}
25-
}
26-
}
27-
28-
class UserDataAutoSyncContribution extends Disposable implements IWorkbenchContribution {
29-
30-
constructor(
31-
@IInstantiationService instantiationService: IInstantiationService
32-
) {
33-
super();
34-
if (isWeb) {
35-
instantiationService.createInstance(UserDataAutoSync);
36-
}
37-
}
38-
}
39-
40-
4111
const workbenchRegistry = Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench);
42-
workbenchRegistry.registerWorkbenchContribution(UserDataSyncConfigurationContribution, LifecyclePhase.Starting);
43-
workbenchRegistry.registerWorkbenchContribution(UserDataSyncWorkbenchContribution, LifecyclePhase.Restored);
44-
workbenchRegistry.registerWorkbenchContribution(UserDataAutoSyncContribution, LifecyclePhase.Restored);
12+
workbenchRegistry.registerWorkbenchContribution(UserDataSyncWorkbenchContribution, LifecyclePhase.Ready);

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

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { IWorkbenchContribution } from 'vs/workbench/common/contributions';
7-
import { IUserDataSyncService, SyncStatus, SyncSource, CONTEXT_SYNC_STATE } from 'vs/platform/userDataSync/common/userDataSync';
7+
import { IUserDataSyncService, SyncStatus, SyncSource, CONTEXT_SYNC_STATE, IUserDataSyncStore, registerConfiguration, getUserDataSyncStore } from 'vs/platform/userDataSync/common/userDataSync';
88
import { localize } from 'vs/nls';
99
import { Disposable, MutableDisposable, toDisposable, DisposableStore } from 'vs/base/common/lifecycle';
1010
import { CommandsRegistry } from 'vs/platform/commands/common/commands';
@@ -29,7 +29,9 @@ import { IDialogService } from 'vs/platform/dialogs/common/dialogs';
2929
import { FalseContext } from 'vs/platform/contextkey/common/contextkeys';
3030
import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
3131
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
32-
import { IProductService } from 'vs/platform/product/common/productService';
32+
import { isWeb } from 'vs/base/common/platform';
33+
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
34+
import { UserDataAutoSync } from 'vs/platform/userDataSync/common/userDataSyncService';
3335

3436
const CONTEXT_AUTH_TOKEN_STATE = new RawContextKey<string>('authTokenStatus', AuthTokenStatus.SignedOut);
3537
const SYNC_PUSH_LIGHT_ICON_URI = URI.parse(registerAndGetAmdImageURL(`vs/workbench/contrib/userDataSync/browser/media/check-light.svg`));
@@ -39,6 +41,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
3941

4042
private static readonly ENABLEMENT_SETTING = 'configurationSync.enable';
4143

44+
private readonly userDataSyncStore: IUserDataSyncStore | undefined;
4245
private readonly syncStatusContext: IContextKey<string>;
4346
private readonly authTokenContext: IContextKey<string>;
4447
private readonly badgeDisposable = this._register(new MutableDisposable());
@@ -59,18 +62,26 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
5962
@IDialogService private readonly dialogService: IDialogService,
6063
@IStorageService private readonly storageService: IStorageService,
6164
@IQuickInputService private readonly quickInputService: IQuickInputService,
62-
@IProductService private readonly productService: IProductService,
65+
@IInstantiationService instantiationService: IInstantiationService,
6366
) {
6467
super();
68+
this.userDataSyncStore = getUserDataSyncStore(configurationService);
6569
this.syncStatusContext = CONTEXT_SYNC_STATE.bindTo(contextKeyService);
6670
this.authTokenContext = CONTEXT_AUTH_TOKEN_STATE.bindTo(contextKeyService);
6771

68-
this.onDidChangeAuthTokenStatus(this.authTokenService.status);
69-
this.onDidChangeSyncStatus(this.userDataSyncService.status);
70-
this._register(Event.debounce(authTokenService.onDidChangeStatus, () => undefined, 500)(() => this.onDidChangeAuthTokenStatus(this.authTokenService.status)));
71-
this._register(Event.debounce(userDataSyncService.onDidChangeStatus, () => undefined, 500)(() => this.onDidChangeSyncStatus(this.userDataSyncService.status)));
72-
this._register(Event.filter(this.configurationService.onDidChangeConfiguration, e => e.affectsConfiguration(UserDataSyncWorkbenchContribution.ENABLEMENT_SETTING))(() => this.onDidChangeEnablement()));
73-
this.registerActions();
72+
if (this.userDataSyncStore) {
73+
registerConfiguration();
74+
this.onDidChangeAuthTokenStatus(this.authTokenService.status);
75+
this.onDidChangeSyncStatus(this.userDataSyncService.status);
76+
this._register(Event.debounce(authTokenService.onDidChangeStatus, () => undefined, 500)(() => this.onDidChangeAuthTokenStatus(this.authTokenService.status)));
77+
this._register(Event.debounce(userDataSyncService.onDidChangeStatus, () => undefined, 500)(() => this.onDidChangeSyncStatus(this.userDataSyncService.status)));
78+
this._register(Event.filter(this.configurationService.onDidChangeConfiguration, e => e.affectsConfiguration(UserDataSyncWorkbenchContribution.ENABLEMENT_SETTING))(() => this.onDidChangeEnablement()));
79+
this.registerActions();
80+
81+
if (isWeb) {
82+
this._register(instantiationService.createInstance(UserDataAutoSync));
83+
}
84+
}
7485
}
7586

7687
private onDidChangeAuthTokenStatus(status: AuthTokenStatus) {
@@ -112,7 +123,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
112123
const enabled = this.configurationService.getValue<boolean>(UserDataSyncWorkbenchContribution.ENABLEMENT_SETTING);
113124
if (enabled) {
114125
if (this.authTokenService.status === AuthTokenStatus.SignedOut) {
115-
const handle = this.notificationService.prompt(Severity.Info, localize('ask to sign in', "Please sign in with your {0} account to sync configuration across all your machines", this.productService.settingsSyncStore!.account),
126+
const handle = this.notificationService.prompt(Severity.Info, localize('ask to sign in', "Please sign in with your {0} account to sync configuration across all your machines", this.userDataSyncStore!.account),
116127
[
117128
{
118129
label: localize('Sign in', "Sign in"),
@@ -154,8 +165,8 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
154165
if (this.authTokenService.status === AuthTokenStatus.SignedOut) {
155166
const result = await this.dialogService.confirm({
156167
type: 'info',
157-
message: localize('sign in to account', "Sign in to {0}", this.productService.settingsSyncStore!.name),
158-
detail: localize('ask to sign in', "Please sign in with your {0} account to sync configuration across all your machines", this.productService.settingsSyncStore!.account),
168+
message: localize('sign in to account', "Sign in to {0}", this.userDataSyncStore!.name),
169+
detail: localize('ask to sign in', "Please sign in with your {0} account to sync configuration across all your machines", this.userDataSyncStore!.account),
159170
primaryButton: localize('Sign in', "Sign in")
160171
});
161172
if (!result.confirmed) {

0 commit comments

Comments
 (0)