mirror of
https://github.com/microsoft/vscode.git
synced 2026-09-20 19:14:10 +01:00
sqlite - delegating storage service
This commit is contained in:
@@ -9,6 +9,7 @@ import { ILogService } from 'vs/platform/log/common/log';
|
||||
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
|
||||
import { IWorkspaceStorageChangeEvent, INextStorageService, StorageScope } from 'vs/platform/storage2/common/storage2';
|
||||
import { Storage, IStorageLoggingOptions } from 'vs/base/node/storage';
|
||||
import { IStorageService, StorageScope as LocalStorageScope } from 'vs/platform/storage/common/storage';
|
||||
|
||||
export class NextStorageService extends Disposable implements INextStorageService {
|
||||
_serviceBrand: any;
|
||||
@@ -81,4 +82,75 @@ export class NextStorageService extends Disposable implements INextStorageServic
|
||||
private getStorage(scope: StorageScope): Storage {
|
||||
return scope === StorageScope.GLOBAL ? this.globalStorage : this.workspaceStorage;
|
||||
}
|
||||
}
|
||||
|
||||
export class NextDelegatingStorageService extends Disposable implements INextStorageService {
|
||||
_serviceBrand: any;
|
||||
|
||||
private _onDidChangeStorage: Emitter<IWorkspaceStorageChangeEvent> = this._register(new Emitter<IWorkspaceStorageChangeEvent>());
|
||||
get onDidChangeStorage(): Event<IWorkspaceStorageChangeEvent> { return this._onDidChangeStorage.event; }
|
||||
|
||||
constructor(
|
||||
@INextStorageService private nextStorageService: NextStorageService,
|
||||
@IStorageService private storageService: IStorageService,
|
||||
@ILogService private logService: ILogService,
|
||||
@IEnvironmentService environmentService: IEnvironmentService
|
||||
) {
|
||||
super();
|
||||
|
||||
this._register(this.nextStorageService.onDidChangeStorage(e => this._onDidChangeStorage.fire(e)));
|
||||
}
|
||||
|
||||
get(key: string, scope: StorageScope, fallbackValue?: any): string {
|
||||
const dbValue = this.nextStorageService.get(key, scope, fallbackValue);
|
||||
const localStorageValue = this.storageService.get(key, this.convertScope(scope), fallbackValue);
|
||||
|
||||
this.assertStorageValue(key, scope, dbValue, localStorageValue);
|
||||
|
||||
return localStorageValue;
|
||||
}
|
||||
|
||||
getBoolean(key: string, scope: StorageScope, fallbackValue?: boolean): boolean {
|
||||
const dbValue = this.nextStorageService.getBoolean(key, scope, fallbackValue);
|
||||
const localStorageValue = this.storageService.getBoolean(key, this.convertScope(scope), fallbackValue);
|
||||
|
||||
this.assertStorageValue(key, scope, dbValue, localStorageValue);
|
||||
|
||||
return localStorageValue;
|
||||
}
|
||||
|
||||
getInteger(key: string, scope: StorageScope, fallbackValue?: number): number {
|
||||
const dbValue = this.nextStorageService.getInteger(key, scope, fallbackValue);
|
||||
const localStorageValue = this.storageService.getInteger(key, this.convertScope(scope), fallbackValue);
|
||||
|
||||
this.assertStorageValue(key, scope, dbValue, localStorageValue);
|
||||
|
||||
return localStorageValue;
|
||||
}
|
||||
|
||||
private assertStorageValue(key: string, scope: StorageScope, dbValue: any, storageValue: any): void {
|
||||
if (dbValue !== storageValue) {
|
||||
this.logService.error(`Unexpected storage value (key: ${key}, scope: ${scope === StorageScope.GLOBAL ? 'global' : 'workspace'}), actual: ${dbValue}, expected: ${storageValue}`);
|
||||
}
|
||||
}
|
||||
|
||||
set(key: string, value: any, scope: StorageScope): Promise<void> {
|
||||
this.storageService.store(key, value, this.convertScope(scope));
|
||||
|
||||
return this.nextStorageService.set(key, value, scope);
|
||||
}
|
||||
|
||||
delete(key: string, scope: StorageScope): Promise<void> {
|
||||
this.storageService.remove(key, this.convertScope(scope));
|
||||
|
||||
return this.nextStorageService.delete(key, scope);
|
||||
}
|
||||
|
||||
close(): Promise<void> {
|
||||
return this.nextStorageService.close();
|
||||
}
|
||||
|
||||
private convertScope(scope: StorageScope): LocalStorageScope {
|
||||
return scope === StorageScope.GLOBAL ? LocalStorageScope.GLOBAL : LocalStorageScope.WORKSPACE;
|
||||
}
|
||||
}
|
||||
@@ -36,7 +36,7 @@ import { IWorkspacesService, ISingleFolderWorkspaceIdentifier } from 'vs/platfor
|
||||
import { createSpdLogService } from 'vs/platform/log/node/spdlogService';
|
||||
import * as fs from 'fs';
|
||||
import { ConsoleLogService, MultiplexLogService, ILogService } from 'vs/platform/log/common/log';
|
||||
import { NextStorageService } from 'vs/platform/storage2/node/nextStorageService';
|
||||
import { NextStorageService, NextDelegatingStorageService } from 'vs/platform/storage2/node/nextStorageService';
|
||||
import { IssueChannelClient } from 'vs/platform/issue/node/issueIpc';
|
||||
import { IIssueService } from 'vs/platform/issue/common/issue';
|
||||
import { LogLevelSetterChannelClient, FollowerLogService } from 'vs/platform/log/node/logIpc';
|
||||
@@ -103,8 +103,8 @@ function openWorkbench(configuration: IWindowConfiguration): Promise<void> {
|
||||
createNextStorageService(environmentService, logService)
|
||||
]).then(services => {
|
||||
const workspaceService = services[0];
|
||||
const nextStorageService = services[1];
|
||||
const storageService = createStorageService(workspaceService, environmentService);
|
||||
const nextStorageService = new NextDelegatingStorageService(services[1], storageService, logService, environmentService);
|
||||
|
||||
return domContentLoaded().then(() => {
|
||||
perf.mark('willStartWorkbench');
|
||||
|
||||
Reference in New Issue
Block a user