Skip to content

Commit 7ce9a74

Browse files
committed
remove user data service
1 parent 6e0979d commit 7ce9a74

27 files changed

Lines changed: 647 additions & 672 deletions

File tree

src/vs/platform/configuration/common/configuration.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ export interface IConfigurationChangeEvent {
6565
export interface IConfigurationService {
6666
_serviceBrand: any;
6767

68-
userSettingsResource: URI;
6968
onDidChangeConfiguration: Event<IConfigurationChangeEvent>;
7069

7170
getConfigurationData(): IConfigurationData | null;

src/vs/platform/environment/common/environment.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ export interface IEnvironmentService {
9797
appNameLong: string;
9898
appQuality?: string;
9999
appSettingsHome: URI;
100+
settingsResource: URI;
101+
keybindingsResource: URI;
100102
keyboardLayoutResource: URI;
101103

102104
machineSettingsHome: URI;

src/vs/platform/environment/node/environmentService.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,9 @@ export class EnvironmentService implements IEnvironmentService {
114114
@memoize
115115
get appSettingsHome(): URI { return URI.file(path.join(this.userDataPath, 'User')); }
116116

117+
@memoize
118+
get settingsResource(): URI { return resources.joinPath(this.appSettingsHome, 'settings.json'); }
119+
117120
@memoize
118121
get machineSettingsHome(): URI { return URI.file(path.join(this.userDataPath, 'Machine')); }
119122

@@ -132,6 +135,9 @@ export class EnvironmentService implements IEnvironmentService {
132135
@memoize
133136
get settingsSearchUrl(): string | undefined { return product.settingsSearchUrl; }
134137

138+
@memoize
139+
get keybindingsResource(): URI { return resources.joinPath(this.appSettingsHome, 'keybindings.json'); }
140+
135141
@memoize
136142
get keyboardLayoutResource(): URI { return resources.joinPath(this.appSettingsHome, 'keyboardLayout.json'); }
137143

src/vs/platform/telemetry/test/electron-browser/telemetryService.test.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import * as Errors from 'vs/base/common/errors';
1111
import * as sinon from 'sinon';
1212
import { getConfigurationValue } from 'vs/platform/configuration/common/configuration';
1313
import { ITelemetryData } from 'vs/platform/telemetry/common/telemetry';
14-
import { URI } from 'vs/base/common/uri';
1514

1615
class TestTelemetryAppender implements ITelemetryAppender {
1716

@@ -770,7 +769,6 @@ suite('TelemetryService', () => {
770769
appender: testAppender
771770
}, {
772771
_serviceBrand: undefined,
773-
userSettingsResource: URI.file('settings.json'),
774772
getValue() {
775773
return {
776774
enableTelemetry: enableTelemetry

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

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,11 @@ import { SignService } from 'vs/platform/sign/browser/signService';
3535
import { hash } from 'vs/base/common/hash';
3636
import { IWorkbenchConstructionOptions } from 'vs/workbench/workbench.web.api';
3737
import { ProductService } from 'vs/platform/product/browser/productService';
38-
import { FileUserDataService } from 'vs/workbench/services/userData/common/fileUserDataService';
39-
import { IUserDataService } from 'vs/workbench/services/userData/common/userData';
38+
import { FileUserDataProvider } from 'vs/workbench/services/userData/common/fileUserDataProvider';
4039
import { UserDataFileSystemProvider } from 'vs/workbench//services/userData/common/userDataFileSystemProvider';
41-
import { CustomUserDataService } from '../services/userData/common/customUserDataService';
42-
import { joinPath } from 'vs/base/common/resources';
43-
import { InMemoryUserDataProvider } from '../services/userData/common/inMemoryUserDataProvider';
40+
import { joinPath, dirname } from 'vs/base/common/resources';
41+
import { InMemoryUserDataProvider } from 'vs/workbench/services/userData/common/inMemoryUserDataProvider';
42+
import { IUserDataProvider } from 'vs/workbench/services/userData/common/userData';
4443

4544
class CodeRendererMain extends Disposable {
4645

@@ -92,7 +91,8 @@ class CodeRendererMain extends Disposable {
9291
serviceCollection.set(ILogService, logService);
9392

9493
// Environment
95-
const environmentService = new BrowserWorkbenchEnvironmentService(this.configuration);
94+
const remoteUserDataUri = this.getRemoteUserDataUri();
95+
const environmentService = new BrowserWorkbenchEnvironmentService(this.configuration, remoteUserDataUri);
9696
serviceCollection.set(IWorkbenchEnvironmentService, environmentService);
9797

9898
// Product
@@ -123,15 +123,13 @@ class CodeRendererMain extends Disposable {
123123
fileService.registerProvider(Schemas.vscodeRemote, remoteFileSystemProvider);
124124
}
125125

126-
// User Data Service
127-
const userDataService = this.createUserDataService(fileService);
128-
serviceCollection.set(IUserDataService, userDataService);
129-
fileService.registerProvider(Schemas.userData, new UserDataFileSystemProvider(userDataService));
126+
// User Data Provider
127+
fileService.registerProvider(Schemas.userData, new UserDataFileSystemProvider(dirname(environmentService.settingsResource), this.getUserDataPovider(fileService, remoteUserDataUri)));
130128

131129
const payload = await this.resolveWorkspaceInitializationPayload();
132130

133131
await Promise.all([
134-
this.createWorkspaceService(payload, environmentService, fileService, userDataService, remoteAgentService, logService).then(service => {
132+
this.createWorkspaceService(payload, environmentService, fileService, remoteAgentService, logService).then(service => {
135133

136134
// Workspace
137135
serviceCollection.set(IWorkspaceContextService, service);
@@ -146,8 +144,8 @@ class CodeRendererMain extends Disposable {
146144
return { serviceCollection, logService };
147145
}
148146

149-
private async createWorkspaceService(payload: IWorkspaceInitializationPayload, environmentService: IWorkbenchEnvironmentService, fileService: FileService, userDataService: IUserDataService, remoteAgentService: IRemoteAgentService, logService: ILogService): Promise<WorkspaceService> {
150-
const workspaceService = new WorkspaceService({ remoteAuthority: this.configuration.remoteAuthority, configurationCache: new ConfigurationCache() }, fileService, userDataService, remoteAgentService);
147+
private async createWorkspaceService(payload: IWorkspaceInitializationPayload, environmentService: IWorkbenchEnvironmentService, fileService: FileService, remoteAgentService: IRemoteAgentService, logService: ILogService): Promise<WorkspaceService> {
148+
const workspaceService = new WorkspaceService({ remoteAuthority: this.configuration.remoteAuthority, configurationCache: new ConfigurationCache() }, environmentService, fileService, remoteAgentService);
151149

152150
try {
153151
await workspaceService.initialize(payload);
@@ -176,16 +174,13 @@ class CodeRendererMain extends Disposable {
176174
return { id: 'empty-window' };
177175
}
178176

179-
private createUserDataService(fileService: IFileService): IUserDataService {
177+
private getUserDataPovider(fileService: IFileService, remoteUserDataUri: URI | null): IUserDataProvider {
180178
if (this.configuration.userDataProvider) {
181-
return this._register(new CustomUserDataService(this.configuration.userDataProvider));
182-
} else if (this.configuration.remoteAuthority) {
183-
const remoteUserDataUri = this.getRemoteUserDataUri();
184-
if (remoteUserDataUri) {
185-
return this._register(new FileUserDataService(remoteUserDataUri, fileService));
186-
}
179+
return this.configuration.userDataProvider;
180+
} else if (this.configuration.remoteAuthority && remoteUserDataUri) {
181+
return this._register(new FileUserDataProvider(remoteUserDataUri, fileService));
187182
}
188-
return this._register(new CustomUserDataService(new InMemoryUserDataProvider()));
183+
return this._register(new InMemoryUserDataProvider());
189184
}
190185

191186
private getRemoteUserDataUri(): URI | null {

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,6 @@ import { ExplorerRootContext, ExplorerFolderContext } from 'vs/workbench/contrib
3939
import { ILabelService } from 'vs/platform/label/common/label';
4040
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
4141
import { REMOTE_HOST_SCHEME } from 'vs/platform/remote/common/remoteHosts';
42-
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
43-
import { IKeybindingEditingService } from 'vs/workbench/services/keybinding/common/keybindingEditing';
4442

4543
Registry.as<IEditorRegistry>(EditorExtensions.Editors).registerEditor(
4644
new EditorDescriptor(
@@ -372,8 +370,6 @@ class PreferencesActionsContribution extends Disposable implements IWorkbenchCon
372370

373371
constructor(
374372
@IWorkbenchEnvironmentService environmentService: IWorkbenchEnvironmentService,
375-
@IKeybindingEditingService keybindingEditingService: IKeybindingEditingService,
376-
@IConfigurationService configurationService: IConfigurationService,
377373
@IPreferencesService private readonly preferencesService: IPreferencesService,
378374
@IWorkspaceContextService private readonly workpsaceContextService: IWorkspaceContextService,
379375
@ILabelService labelService: ILabelService,
@@ -389,7 +385,7 @@ class PreferencesActionsContribution extends Disposable implements IWorkbenchCon
389385
dark: URI.parse(require.toUrl(`vs/workbench/contrib/preferences/browser/media/preferences-editor-inverse.svg`))
390386
}
391387
},
392-
when: ResourceContextKey.Resource.isEqualTo(keybindingEditingService.userKeybindingsResource.toString()),
388+
when: ResourceContextKey.Resource.isEqualTo(environmentService.keybindingsResource.toString()),
393389
group: 'navigation',
394390
order: 1
395391
});
@@ -405,7 +401,7 @@ class PreferencesActionsContribution extends Disposable implements IWorkbenchCon
405401
dark: URI.parse(require.toUrl(`vs/workbench/contrib/preferences/browser/media/preferences-editor-inverse.svg`))
406402
}
407403
},
408-
when: ResourceContextKey.Resource.isEqualTo(configurationService.userSettingsResource.toString()),
404+
when: ResourceContextKey.Resource.isEqualTo(environmentService.settingsResource.toString()),
409405
group: 'navigation',
410406
order: 1
411407
});

src/vs/workbench/contrib/preferences/common/preferencesContribution.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { IModeService } from 'vs/editor/common/services/modeService';
1414
import { ITextModelService } from 'vs/editor/common/services/resolverService';
1515
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
1616
import { IEditorOptions, ITextEditorOptions } from 'vs/platform/editor/common/editor';
17+
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
1718
import * as JSONContributionRegistry from 'vs/platform/jsonschemas/common/jsonContributionRegistry';
1819
import { Registry } from 'vs/platform/registry/common/platform';
1920
import { IWorkspaceContextService, WorkbenchState } from 'vs/platform/workspace/common/workspace';
@@ -35,6 +36,7 @@ export class PreferencesContribution implements IWorkbenchContribution {
3536
@IPreferencesService private readonly preferencesService: IPreferencesService,
3637
@IModeService private readonly modeService: IModeService,
3738
@IEditorService private readonly editorService: IEditorService,
39+
@IEnvironmentService private readonly environmentService: IEnvironmentService,
3840
@IWorkspaceContextService private readonly workspaceService: IWorkspaceContextService,
3941
@IConfigurationService private readonly configurationService: IConfigurationService
4042
) {
@@ -77,7 +79,7 @@ export class PreferencesContribution implements IWorkbenchContribution {
7779
}
7880

7981
// Global User Settings File
80-
if (isEqual(resource, this.configurationService.userSettingsResource, !isLinux)) {
82+
if (isEqual(resource, this.environmentService.settingsResource, !isLinux)) {
8183
return { override: this.preferencesService.openGlobalSettings(true, options, group) };
8284
}
8385

src/vs/workbench/electron-browser/main.ts

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,9 @@ import { ConfigurationCache } from 'vs/workbench/services/configuration/node/con
5050
import { SpdLogService } from 'vs/platform/log/node/spdlogService';
5151
import { SignService } from 'vs/platform/sign/node/signService';
5252
import { ISignService } from 'vs/platform/sign/common/sign';
53-
import { IUserDataService } from 'vs/workbench/services/userData/common/userData';
54-
import { FileUserDataService } from 'vs/workbench/services/userData/common/fileUserDataService';
53+
import { FileUserDataProvider } from 'vs/workbench/services/userData/common/fileUserDataProvider';
5554
import { UserDataFileSystemProvider } from 'vs/workbench/services/userData/common/userDataFileSystemProvider';
55+
import { dirname } from 'vs/base/common/resources';
5656

5757
class CodeRendererMain extends Disposable {
5858

@@ -208,15 +208,13 @@ class CodeRendererMain extends Disposable {
208208
fileService.registerProvider(Schemas.vscodeRemote, remoteFileSystemProvider);
209209
}
210210

211-
// User Data Service
212-
const userDataService = this._register(new FileUserDataService(environmentService.appSettingsHome, fileService));
213-
serviceCollection.set(IUserDataService, userDataService);
214-
fileService.registerProvider(Schemas.userData, new UserDataFileSystemProvider(userDataService));
211+
// User Data Provider
212+
fileService.registerProvider(Schemas.userData, new UserDataFileSystemProvider(dirname(environmentService.settingsResource), new FileUserDataProvider(environmentService.appSettingsHome, fileService)));
215213

216214
const payload = await this.resolveWorkspaceInitializationPayload(environmentService);
217215

218216
const services = await Promise.all([
219-
this.createWorkspaceService(payload, environmentService, fileService, userDataService, remoteAgentService, logService).then(service => {
217+
this.createWorkspaceService(payload, environmentService, fileService, remoteAgentService, logService).then(service => {
220218

221219
// Workspace
222220
serviceCollection.set(IWorkspaceContextService, service);
@@ -312,8 +310,8 @@ class CodeRendererMain extends Disposable {
312310
return;
313311
}
314312

315-
private async createWorkspaceService(payload: IWorkspaceInitializationPayload, environmentService: IWorkbenchEnvironmentService, fileService: FileService, userDataService: IUserDataService, remoteAgentService: IRemoteAgentService, logService: ILogService): Promise<WorkspaceService> {
316-
const workspaceService = new WorkspaceService({ remoteAuthority: this.configuration.remoteAuthority, configurationCache: new ConfigurationCache(environmentService) }, fileService, userDataService, remoteAgentService);
313+
private async createWorkspaceService(payload: IWorkspaceInitializationPayload, environmentService: IWorkbenchEnvironmentService, fileService: FileService, remoteAgentService: IRemoteAgentService, logService: ILogService): Promise<WorkspaceService> {
314+
const workspaceService = new WorkspaceService({ remoteAuthority: this.configuration.remoteAuthority, configurationCache: new ConfigurationCache(environmentService) }, environmentService, fileService, remoteAgentService);
317315

318316
try {
319317
await workspaceService.initialize(payload);

src/vs/workbench/services/configuration/browser/configuration.ts

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ import { Event, Emitter } from 'vs/base/common/event';
99
import * as errors from 'vs/base/common/errors';
1010
import { Disposable, IDisposable, dispose, toDisposable } from 'vs/base/common/lifecycle';
1111
import { RunOnceScheduler } from 'vs/base/common/async';
12-
import { FileChangeType, FileChangesEvent } from 'vs/platform/files/common/files';
12+
import { FileChangeType, FileChangesEvent, IFileService } from 'vs/platform/files/common/files';
1313
import { ConfigurationModel, ConfigurationModelParser } from 'vs/platform/configuration/common/configurationModels';
1414
import { WorkspaceConfigurationModelParser, StandaloneConfigurationModelParser } from 'vs/workbench/services/configuration/common/configurationModels';
15-
import { FOLDER_SETTINGS_PATH, TASKS_CONFIGURATION_KEY, FOLDER_SETTINGS_NAME, LAUNCH_CONFIGURATION_KEY, IConfigurationCache, ConfigurationKey, REMOTE_MACHINE_SCOPES, FOLDER_SCOPES, WORKSPACE_SCOPES, USER_CONFIGURATION_KEY, ConfigurationFileService } from 'vs/workbench/services/configuration/common/configuration';
15+
import { FOLDER_SETTINGS_PATH, TASKS_CONFIGURATION_KEY, FOLDER_SETTINGS_NAME, LAUNCH_CONFIGURATION_KEY, IConfigurationCache, ConfigurationKey, REMOTE_MACHINE_SCOPES, FOLDER_SCOPES, WORKSPACE_SCOPES, ConfigurationFileService } from 'vs/workbench/services/configuration/common/configuration';
1616
import { IStoredWorkspaceFolder, IWorkspaceIdentifier } from 'vs/platform/workspaces/common/workspaces';
1717
import { JSONEditingService } from 'vs/workbench/services/configuration/common/jsonEditingService';
1818
import { WorkbenchState, IWorkspaceFolder } from 'vs/platform/workspace/common/workspace';
@@ -23,27 +23,24 @@ import { Schemas } from 'vs/base/common/network';
2323
import { IConfigurationModel } from 'vs/platform/configuration/common/configuration';
2424
import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService';
2525
import { hash } from 'vs/base/common/hash';
26-
import { IUserDataService } from 'vs/workbench/services/userData/common/userData';
2726

2827
export class UserConfiguration extends Disposable {
2928

30-
readonly resource: URI;
31-
3229
private readonly parser: ConfigurationModelParser;
3330
private readonly reloadConfigurationScheduler: RunOnceScheduler;
3431
protected readonly _onDidChangeConfiguration: Emitter<ConfigurationModel> = this._register(new Emitter<ConfigurationModel>());
3532
readonly onDidChangeConfiguration: Event<ConfigurationModel> = this._onDidChangeConfiguration.event;
3633

3734
constructor(
35+
private readonly userSettingsResource: URI,
3836
private readonly scopes: ConfigurationScope[] | undefined,
39-
private readonly userDataService: IUserDataService
37+
private readonly fileService: IFileService
4038
) {
4139
super();
4240

43-
this.resource = userDataService.toResource(USER_CONFIGURATION_KEY);
44-
this.parser = new ConfigurationModelParser(USER_CONFIGURATION_KEY, this.scopes);
41+
this.parser = new ConfigurationModelParser(this.userSettingsResource.toString(), this.scopes);
4542
this.reloadConfigurationScheduler = this._register(new RunOnceScheduler(() => this.reload().then(configurationModel => this._onDidChangeConfiguration.fire(configurationModel)), 50));
46-
this._register(Event.filter(this.userDataService.onDidChange, e => e.contains(USER_CONFIGURATION_KEY))(() => this.reloadConfigurationScheduler.schedule()));
43+
this._register(Event.filter(this.fileService.onFileChanges, e => e.contains(this.userSettingsResource))(() => this.reloadConfigurationScheduler.schedule()));
4744
}
4845

4946
async initialize(): Promise<ConfigurationModel> {
@@ -52,8 +49,8 @@ export class UserConfiguration extends Disposable {
5249

5350
async reload(): Promise<ConfigurationModel> {
5451
try {
55-
const content = (await this.userDataService.read(USER_CONFIGURATION_KEY)) || '{}';
56-
this.parser.parseContent(content);
52+
const content = await this.fileService.readFile(this.userSettingsResource);
53+
this.parser.parseContent(content.value.toString() || '{}');
5754
return this.parser.configurationModel;
5855
} catch (e) {
5956
return new ConfigurationModel();

0 commit comments

Comments
 (0)