diff --git a/src/vs/platform/userDataSync/common/userDataSync.ts b/src/vs/platform/userDataSync/common/userDataSync.ts new file mode 100644 index 0000000000000000000000000000000000000000..3d35a5af3dfadfb19ddb50efec0d25f8b56f17cb --- /dev/null +++ b/src/vs/platform/userDataSync/common/userDataSync.ts @@ -0,0 +1,94 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { Event } from 'vs/base/common/event'; +import { URI } from 'vs/base/common/uri'; + +export interface IUserData { + ref: string; + content: string; +} + +export enum UserDataSyncStoreErrorCode { + Rejected = 'Rejected', + Unknown = 'Unknown' +} + +export function markAsUserDataSyncStoreError(error: Error, code: UserDataSyncStoreErrorCode): Error { + error.name = code ? `${code} (UserDataSyncStoreError)` : `UserDataSyncStoreError`; + + return error; +} + +export function toUserDataSyncStoreErrorCode(error: Error | undefined | null): UserDataSyncStoreErrorCode { + + // Guard against abuse + if (!error) { + return UserDataSyncStoreErrorCode.Unknown; + } + + // FileSystemProviderError comes with the code + if (error instanceof UserDataSyncStoreError) { + return error.code; + } + + // Any other error, check for name match by assuming that the error + // went through the markAsUserDataSyncStoreError() method + const match = /^(.+) \(UserDataSyncStoreError\)$/.exec(error.name); + if (!match) { + return UserDataSyncStoreErrorCode.Unknown; + } + + switch (match[1]) { + case UserDataSyncStoreErrorCode.Rejected: return UserDataSyncStoreErrorCode.Rejected; + } + + return UserDataSyncStoreErrorCode.Unknown; +} + +export class UserDataSyncStoreError extends Error { + + constructor(message: string, public readonly code: UserDataSyncStoreErrorCode) { + super(message); + } + +} + +export interface IUserDataSyncStore { + + read(key: string): Promise; + + write(key: string, content: string, ref: string | null): Promise; + +} + +export enum SyncStatus { + Uninitialized = 'uninitialized', + Idle = 'idle', + Syncing = 'syncing', + HasConflicts = 'hasConflicts', +} + +export const USER_DATA_PREVIEW_SCHEME = 'vscode-userdata-preview'; +export const SETTINGS_PREVIEW_RESOURCE = URI.file('Settings-Preview').with({ scheme: USER_DATA_PREVIEW_SCHEME }); + +export interface ISynchroniser { + + readonly status: SyncStatus; + readonly onDidChangeStatus: Event; + + readonly onDidChangeLocal: Event; + + sync(): Promise; + continueSync(): Promise; + handleConflicts(): boolean; +} + +export const IUserDataSyncService = createDecorator('IUserDataSyncService'); + +export interface IUserDataSyncService extends ISynchroniser { + _serviceBrand: any; +} diff --git a/src/vs/workbench/api/browser/mainThreadUserData.ts b/src/vs/workbench/api/browser/mainThreadUserData.ts index 4a95b0fa2536700cabfa467b0638a71cc0b8b6d5..a9358a1b3793b4dbc30f568e8100172c3aea7381 100644 --- a/src/vs/workbench/api/browser/mainThreadUserData.ts +++ b/src/vs/workbench/api/browser/mainThreadUserData.ts @@ -6,7 +6,8 @@ import { Disposable, toDisposable } from 'vs/base/common/lifecycle'; import { MainContext, ExtHostContext, IExtHostContext, MainThreadUserDataShape, ExtHostUserDataShape } from '../common/extHost.protocol'; import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers'; -import { IUserDataSyncStoreService, IUserData } from 'vs/workbench/services/userData/common/userData'; +import { IUserData } from 'vs/platform/userDataSync/common/userDataSync'; +import { IUserDataSyncStoreService } from 'vs/workbench/services/userData/common/userData'; @extHostNamedCustomer(MainContext.MainThreadUserData) export class MainThreadUserData extends Disposable implements MainThreadUserDataShape { diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts index 389fa5682992ce50c962597123c48c23b6652148..e3e56c063c6814097899d8f08d712e62aad70dd0 100644 --- a/src/vs/workbench/api/common/extHost.protocol.ts +++ b/src/vs/workbench/api/common/extHost.protocol.ts @@ -46,7 +46,7 @@ import { ExtensionActivationError } from 'vs/workbench/services/extensions/commo import { createExtHostContextProxyIdentifier as createExtId, createMainContextProxyIdentifier as createMainId, IRPCProtocol } from 'vs/workbench/services/extensions/common/proxyIdentifier'; import * as search from 'vs/workbench/services/search/common/search'; import { SaveReason } from 'vs/workbench/services/textfile/common/textfiles'; -import { IUserData } from 'vs/workbench/services/userData/common/userData'; +import { IUserData } from 'vs/platform/userDataSync/common/userDataSync'; export interface IEnvironment { isExtensionDevelopmentDebug: boolean; diff --git a/src/vs/workbench/api/common/extHostTypes.ts b/src/vs/workbench/api/common/extHostTypes.ts index af06fac98f88a5cdf86920742f81aa4254b8a44d..5ca6f6535becfdd6462549848613ea22691452cd 100644 --- a/src/vs/workbench/api/common/extHostTypes.ts +++ b/src/vs/workbench/api/common/extHostTypes.ts @@ -14,7 +14,7 @@ import { generateUuid } from 'vs/base/common/uuid'; import * as vscode from 'vscode'; import { FileSystemProviderErrorCode, markAsFileSystemProviderError } from 'vs/platform/files/common/files'; import { RemoteAuthorityResolverErrorCode } from 'vs/platform/remote/common/remoteAuthorityResolver'; -import { UserDataSyncStoreErrorCode, markAsUserDataSyncStoreError } from 'vs/workbench/services/userData/common/userData'; +import { UserDataSyncStoreErrorCode, markAsUserDataSyncStoreError } from 'vs/platform/userDataSync/common/userDataSync'; function es5ClassCompat(target: Function): any { ///@ts-ignore diff --git a/src/vs/workbench/api/common/extHostUserData.ts b/src/vs/workbench/api/common/extHostUserData.ts index 6a654a874ea9aae8c96f5c0c5bc13653695ff3d7..182b989359aee9f3ffdbb4b8ea70aa0b7347fa73 100644 --- a/src/vs/workbench/api/common/extHostUserData.ts +++ b/src/vs/workbench/api/common/extHostUserData.ts @@ -7,7 +7,7 @@ import { ExtHostUserDataShape, MainThreadUserDataShape } from './extHost.protoco import * as vscode from 'vscode'; import { toDisposable, Disposable } from 'vs/base/common/lifecycle'; import { ILogService } from 'vs/platform/log/common/log'; -import { IUserData } from 'vs/workbench/services/userData/common/userData'; +import { IUserData } from 'vs/platform/userDataSync/common/userDataSync'; export class ExtHostUserData implements ExtHostUserDataShape { diff --git a/src/vs/workbench/contrib/userData/browser/userData.contribution.ts b/src/vs/workbench/contrib/userData/browser/userData.contribution.ts index 8891eb61b827a90256fae067f2e60c569ea05d0c..18669c643ece5a1fdbe1059f93c68c4e4d168001 100644 --- a/src/vs/workbench/contrib/userData/browser/userData.contribution.ts +++ b/src/vs/workbench/contrib/userData/browser/userData.contribution.ts @@ -4,7 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions, IWorkbenchContribution } from 'vs/workbench/common/contributions'; -import { IUserDataSyncService, SyncStatus, USER_DATA_PREVIEW_SCHEME, IUserDataSyncStoreService } from 'vs/workbench/services/userData/common/userData'; +import { IUserDataSyncService, SyncStatus, USER_DATA_PREVIEW_SCHEME } from 'vs/platform/userDataSync/common/userDataSync'; +import { IUserDataSyncStoreService } from 'vs/workbench/services/userData/common/userData'; import { localize } from 'vs/nls'; import { Disposable, MutableDisposable, toDisposable } from 'vs/base/common/lifecycle'; import { CommandsRegistry } from 'vs/platform/commands/common/commands'; diff --git a/src/vs/workbench/services/userData/common/settingsSync.ts b/src/vs/workbench/services/userData/common/settingsSync.ts index 76ee09a2b3ebd3c0fef571b312c6276de348f34e..e8c13d8955af1e4738e06444453e5b0609010590 100644 --- a/src/vs/workbench/services/userData/common/settingsSync.ts +++ b/src/vs/workbench/services/userData/common/settingsSync.ts @@ -8,7 +8,8 @@ import { Disposable } from 'vs/base/common/lifecycle'; import { IFileService, FileSystemProviderErrorCode, FileSystemProviderError, IFileContent } from 'vs/platform/files/common/files'; import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage'; -import { IUserDataSyncStoreService, IUserData, UserDataSyncStoreError, UserDataSyncStoreErrorCode, ISynchroniser, SyncStatus, SETTINGS_PREVIEW_RESOURCE } from 'vs/workbench/services/userData/common/userData'; +import { IUserData, UserDataSyncStoreError, UserDataSyncStoreErrorCode, ISynchroniser, SyncStatus, SETTINGS_PREVIEW_RESOURCE } from 'vs/platform/userDataSync/common/userDataSync'; +import { IUserDataSyncStoreService } from 'vs/workbench/services/userData/common/userData'; import { VSBuffer } from 'vs/base/common/buffer'; import { parse, findNodeAtLocation, parseTree, ParseError } from 'vs/base/common/json'; import { ITextModel } from 'vs/editor/common/model'; diff --git a/src/vs/workbench/services/userData/common/userData.ts b/src/vs/workbench/services/userData/common/userData.ts index 4667aa42b60b7054533bfcbbfdf20548821ab060..7d4b5192d817f8b6d33cc07fc7123a5432b76b88 100644 --- a/src/vs/workbench/services/userData/common/userData.ts +++ b/src/vs/workbench/services/userData/common/userData.ts @@ -5,65 +5,7 @@ import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; import { Event } from 'vs/base/common/event'; -import { URI } from 'vs/base/common/uri'; - -export interface IUserData { - ref: string; - content: string; -} - -export enum UserDataSyncStoreErrorCode { - Rejected = 'Rejected', - Unknown = 'Unknown' -} - -export function markAsUserDataSyncStoreError(error: Error, code: UserDataSyncStoreErrorCode): Error { - error.name = code ? `${code} (UserDataSyncStoreError)` : `UserDataSyncStoreError`; - - return error; -} - -export function toUserDataSyncStoreErrorCode(error: Error | undefined | null): UserDataSyncStoreErrorCode { - - // Guard against abuse - if (!error) { - return UserDataSyncStoreErrorCode.Unknown; - } - - // FileSystemProviderError comes with the code - if (error instanceof UserDataSyncStoreError) { - return error.code; - } - - // Any other error, check for name match by assuming that the error - // went through the markAsUserDataSyncStoreError() method - const match = /^(.+) \(UserDataSyncStoreError\)$/.exec(error.name); - if (!match) { - return UserDataSyncStoreErrorCode.Unknown; - } - - switch (match[1]) { - case UserDataSyncStoreErrorCode.Rejected: return UserDataSyncStoreErrorCode.Rejected; - } - - return UserDataSyncStoreErrorCode.Unknown; -} - -export class UserDataSyncStoreError extends Error { - - constructor(message: string, public readonly code: UserDataSyncStoreErrorCode) { - super(message); - } - -} - -export interface IUserDataSyncStore { - - read(key: string): Promise; - - write(key: string, content: string, ref: string | null): Promise; - -} +import { IUserDataSyncStore, IUserData } from 'vs/platform/userDataSync/common/userDataSync'; export const IUserDataSyncStoreService = createDecorator('IUserDataSyncStoreService'); @@ -72,42 +14,12 @@ export interface IUserDataSyncStoreService { _serviceBrand: undefined; readonly onDidChangeEnablement: Event; - isEnabled(): boolean; registerUserDataSyncStore(name: string, userDataSyncStore: IUserDataSyncStore): void; - deregisterUserDataSyncStore(): void; - getName(): string | null; - read(key: string): Promise; - write(key: string, content: string, ref: string | null): Promise; } - -export enum SyncStatus { - Uninitialized = 'uninitialized', - Idle = 'idle', - Syncing = 'syncing', - HasConflicts = 'hasConflicts', -} - -export const USER_DATA_PREVIEW_SCHEME = 'vscode-userdata-preview'; -export const SETTINGS_PREVIEW_RESOURCE = URI.file('Settings-Preview').with({ scheme: USER_DATA_PREVIEW_SCHEME }); - -export interface ISynchroniser { - readonly status: SyncStatus; - readonly onDidChangeStatus: Event; - readonly onDidChangeLocal: Event; - sync(): Promise; - continueSync(): Promise; - handleConflicts(): boolean; -} - -export const IUserDataSyncService = createDecorator('IUserDataSyncService'); - -export interface IUserDataSyncService extends ISynchroniser { - _serviceBrand: any; -} diff --git a/src/vs/workbench/services/userData/common/userDataSyncService.ts b/src/vs/workbench/services/userData/common/userDataSyncService.ts index 5facccf58973de6c4489fc04521b038898f1c6bb..203da87ab6915a6bf2034a1c6d46fbdb86894d0b 100644 --- a/src/vs/workbench/services/userData/common/userDataSyncService.ts +++ b/src/vs/workbench/services/userData/common/userDataSyncService.ts @@ -3,7 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IUserDataSyncService, SyncStatus, IUserDataSyncStoreService, ISynchroniser, USER_DATA_PREVIEW_SCHEME } from 'vs/workbench/services/userData/common/userData'; +import { IUserDataSyncService, SyncStatus, ISynchroniser, USER_DATA_PREVIEW_SCHEME } from 'vs/platform/userDataSync/common/userDataSync'; +import { IUserDataSyncStoreService } from 'vs/workbench/services/userData/common/userData'; import { Disposable } from 'vs/base/common/lifecycle'; import { registerSingleton } from 'vs/platform/instantiation/common/extensions'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; diff --git a/src/vs/workbench/services/userData/common/userDataSyncStoreService.ts b/src/vs/workbench/services/userData/common/userDataSyncStoreService.ts index 408ecb437e9facc9227ca829928b6571575be04a..a147fc049a5d56c70cef53a5acdac483660f5bd6 100644 --- a/src/vs/workbench/services/userData/common/userDataSyncStoreService.ts +++ b/src/vs/workbench/services/userData/common/userDataSyncStoreService.ts @@ -6,7 +6,8 @@ import { Disposable, } from 'vs/base/common/lifecycle'; import { registerSingleton } from 'vs/platform/instantiation/common/extensions'; import { Emitter, Event } from 'vs/base/common/event'; -import { IUserDataSyncStoreService, IUserDataSyncStore, IUserData, UserDataSyncStoreError, toUserDataSyncStoreErrorCode } from 'vs/workbench/services/userData/common/userData'; +import { IUserDataSyncStore, IUserData, UserDataSyncStoreError, toUserDataSyncStoreErrorCode } from 'vs/platform/userDataSync/common/userDataSync'; +import { IUserDataSyncStoreService } from 'vs/workbench/services/userData/common/userData'; import { ILogService } from 'vs/platform/log/common/log'; export class UserDataSyncStoreService extends Disposable implements IUserDataSyncStoreService {