diff --git a/src/vs/workbench/api/browser/mainThreadUserData.ts b/src/vs/workbench/api/browser/mainThreadUserData.ts index 69d2cdefadc..509f8566752 100644 --- a/src/vs/workbench/api/browser/mainThreadUserData.ts +++ b/src/vs/workbench/api/browser/mainThreadUserData.ts @@ -3,10 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable, toDisposable } from 'vs/base/common/lifecycle'; +import { Disposable } from 'vs/base/common/lifecycle'; import { MainContext, ExtHostContext, IExtHostContext, MainThreadUserDataShape, ExtHostUserDataShape } from '../common/extHost.protocol'; import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers'; -import { IUserData, IUserDataSyncStoreService } from 'vs/platform/userDataSync/common/userDataSync'; +import { IUserData } from 'vs/platform/userDataSync/common/userDataSync'; +import { Registry } from 'vs/platform/registry/common/platform'; +import { IUserDataSyncStoresRegistry, Extensions } from 'vs/workbench/services/userDataSync/common/userDataSyncStores'; @extHostNamedCustomer(MainContext.MainThreadUserData) export class MainThreadUserData extends Disposable implements MainThreadUserDataShape { @@ -15,16 +17,14 @@ export class MainThreadUserData extends Disposable implements MainThreadUserData constructor( extHostContext: IExtHostContext, - @IUserDataSyncStoreService private readonly userDataSyncStoreService: IUserDataSyncStoreService ) { super(); this.proxy = extHostContext.getProxy(ExtHostContext.ExtHostUserData); - this._register(toDisposable(() => this.userDataSyncStoreService.deregisterUserDataSyncStore())); } $registerUserDataProvider(id: string, name: string): void { const proxy = this.proxy; - this.userDataSyncStoreService.registerUserDataSyncStore({ + Registry.as(Extensions.UserDataSyncStoresRegistry).registerUserDataSyncStore({ id, name, read(key: string): Promise { @@ -36,8 +36,13 @@ export class MainThreadUserData extends Disposable implements MainThreadUserData }); } - $deregisterUserDataProvider(): void { - this.userDataSyncStoreService.deregisterUserDataSyncStore(); + $deregisterUserDataProvider(id: string): void { + Registry.as(Extensions.UserDataSyncStoresRegistry).deregisterUserDataSyncStore(id); + } + + dispose(): void { + const registry = Registry.as(Extensions.UserDataSyncStoresRegistry); + registry.all.forEach(store => registry.deregisterUserDataSyncStore(store.id)); } } diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts index 979ab88a2df..55bcebff44e 100644 --- a/src/vs/workbench/api/common/extHost.protocol.ts +++ b/src/vs/workbench/api/common/extHost.protocol.ts @@ -148,7 +148,7 @@ export interface MainThreadConfigurationShape extends IDisposable { export interface MainThreadUserDataShape extends IDisposable { $registerUserDataProvider(id: string, name: string): void; - $deregisterUserDataProvider(): void; + $deregisterUserDataProvider(id: string): void; } export interface MainThreadDiagnosticsShape extends IDisposable { diff --git a/src/vs/workbench/api/common/extHostUserData.ts b/src/vs/workbench/api/common/extHostUserData.ts index 02984f3d88d..de5e565f7cb 100644 --- a/src/vs/workbench/api/common/extHostUserData.ts +++ b/src/vs/workbench/api/common/extHostUserData.ts @@ -28,7 +28,7 @@ export class ExtHostUserData implements ExtHostUserDataShape { this.userDataProvider = userDataProvider; this.name = name; this.proxy.$registerUserDataProvider(id, name); - return toDisposable(() => this.proxy.$deregisterUserDataProvider()); + return toDisposable(() => this.proxy.$deregisterUserDataProvider(id)); } $read(key: string): Promise { diff --git a/src/vs/workbench/services/userDataSync/common/userDataSyncStores.ts b/src/vs/workbench/services/userDataSync/common/userDataSyncStores.ts index 8734df3eb08..b7bf3c91ce5 100644 --- a/src/vs/workbench/services/userDataSync/common/userDataSyncStores.ts +++ b/src/vs/workbench/services/userDataSync/common/userDataSyncStores.ts @@ -4,11 +4,17 @@ *--------------------------------------------------------------------------------------------*/ import { Event, Emitter } from 'vs/base/common/event'; -import { IUserDataSyncStore } from 'vs/platform/userDataSync/common/userDataSync'; +import { IUserData } from 'vs/platform/userDataSync/common/userDataSync'; import { Disposable } from 'vs/base/common/lifecycle'; import { values } from 'vs/base/common/map'; import { Registry } from 'vs/platform/registry/common/platform'; +export interface IUserDataSyncStore { + readonly id: string; + readonly name: string; + read(key: string): Promise; + write(key: string, content: string, ref: string | null): Promise; +} export namespace Extensions { export const UserDataSyncStoresRegistry = 'workbench.registry.userData.syncStores';