提交 4f87f906 编写于 作者: B Benjamin Pasero

sqlite - delegating storage service

上级 b782790c
......@@ -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;
}
}
\ No newline at end of file
......@@ -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');
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册