Skip to content

Commit 8fbdeb7

Browse files
committed
move user data sync services to platform
1 parent d26e39b commit 8fbdeb7

10 files changed

Lines changed: 108 additions & 97 deletions

File tree

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
7+
import { Event } from 'vs/base/common/event';
8+
import { URI } from 'vs/base/common/uri';
9+
10+
export interface IUserData {
11+
ref: string;
12+
content: string;
13+
}
14+
15+
export enum UserDataSyncStoreErrorCode {
16+
Rejected = 'Rejected',
17+
Unknown = 'Unknown'
18+
}
19+
20+
export function markAsUserDataSyncStoreError(error: Error, code: UserDataSyncStoreErrorCode): Error {
21+
error.name = code ? `${code} (UserDataSyncStoreError)` : `UserDataSyncStoreError`;
22+
23+
return error;
24+
}
25+
26+
export function toUserDataSyncStoreErrorCode(error: Error | undefined | null): UserDataSyncStoreErrorCode {
27+
28+
// Guard against abuse
29+
if (!error) {
30+
return UserDataSyncStoreErrorCode.Unknown;
31+
}
32+
33+
// FileSystemProviderError comes with the code
34+
if (error instanceof UserDataSyncStoreError) {
35+
return error.code;
36+
}
37+
38+
// Any other error, check for name match by assuming that the error
39+
// went through the markAsUserDataSyncStoreError() method
40+
const match = /^(.+) \(UserDataSyncStoreError\)$/.exec(error.name);
41+
if (!match) {
42+
return UserDataSyncStoreErrorCode.Unknown;
43+
}
44+
45+
switch (match[1]) {
46+
case UserDataSyncStoreErrorCode.Rejected: return UserDataSyncStoreErrorCode.Rejected;
47+
}
48+
49+
return UserDataSyncStoreErrorCode.Unknown;
50+
}
51+
52+
export class UserDataSyncStoreError extends Error {
53+
54+
constructor(message: string, public readonly code: UserDataSyncStoreErrorCode) {
55+
super(message);
56+
}
57+
58+
}
59+
60+
export interface IUserDataSyncStore {
61+
62+
read(key: string): Promise<IUserData | null>;
63+
64+
write(key: string, content: string, ref: string | null): Promise<string>;
65+
66+
}
67+
68+
export enum SyncStatus {
69+
Uninitialized = 'uninitialized',
70+
Idle = 'idle',
71+
Syncing = 'syncing',
72+
HasConflicts = 'hasConflicts',
73+
}
74+
75+
export const USER_DATA_PREVIEW_SCHEME = 'vscode-userdata-preview';
76+
export const SETTINGS_PREVIEW_RESOURCE = URI.file('Settings-Preview').with({ scheme: USER_DATA_PREVIEW_SCHEME });
77+
78+
export interface ISynchroniser {
79+
80+
readonly status: SyncStatus;
81+
readonly onDidChangeStatus: Event<SyncStatus>;
82+
83+
readonly onDidChangeLocal: Event<void>;
84+
85+
sync(): Promise<boolean>;
86+
continueSync(): Promise<boolean>;
87+
handleConflicts(): boolean;
88+
}
89+
90+
export const IUserDataSyncService = createDecorator<IUserDataSyncService>('IUserDataSyncService');
91+
92+
export interface IUserDataSyncService extends ISynchroniser {
93+
_serviceBrand: any;
94+
}

src/vs/workbench/api/browser/mainThreadUserData.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
import { Disposable, toDisposable } from 'vs/base/common/lifecycle';
77
import { MainContext, ExtHostContext, IExtHostContext, MainThreadUserDataShape, ExtHostUserDataShape } from '../common/extHost.protocol';
88
import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers';
9-
import { IUserDataSyncStoreService, IUserData } from 'vs/workbench/services/userData/common/userData';
9+
import { IUserData } from 'vs/platform/userDataSync/common/userDataSync';
10+
import { IUserDataSyncStoreService } from 'vs/workbench/services/userData/common/userData';
1011

1112
@extHostNamedCustomer(MainContext.MainThreadUserData)
1213
export class MainThreadUserData extends Disposable implements MainThreadUserDataShape {

src/vs/workbench/api/common/extHost.protocol.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ import { ExtensionActivationError } from 'vs/workbench/services/extensions/commo
4646
import { createExtHostContextProxyIdentifier as createExtId, createMainContextProxyIdentifier as createMainId, IRPCProtocol } from 'vs/workbench/services/extensions/common/proxyIdentifier';
4747
import * as search from 'vs/workbench/services/search/common/search';
4848
import { SaveReason } from 'vs/workbench/services/textfile/common/textfiles';
49-
import { IUserData } from 'vs/workbench/services/userData/common/userData';
49+
import { IUserData } from 'vs/platform/userDataSync/common/userDataSync';
5050

5151
export interface IEnvironment {
5252
isExtensionDevelopmentDebug: boolean;

src/vs/workbench/api/common/extHostTypes.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { generateUuid } from 'vs/base/common/uuid';
1414
import * as vscode from 'vscode';
1515
import { FileSystemProviderErrorCode, markAsFileSystemProviderError } from 'vs/platform/files/common/files';
1616
import { RemoteAuthorityResolverErrorCode } from 'vs/platform/remote/common/remoteAuthorityResolver';
17-
import { UserDataSyncStoreErrorCode, markAsUserDataSyncStoreError } from 'vs/workbench/services/userData/common/userData';
17+
import { UserDataSyncStoreErrorCode, markAsUserDataSyncStoreError } from 'vs/platform/userDataSync/common/userDataSync';
1818

1919
function es5ClassCompat(target: Function): any {
2020
///@ts-ignore

src/vs/workbench/api/common/extHostUserData.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { ExtHostUserDataShape, MainThreadUserDataShape } from './extHost.protoco
77
import * as vscode from 'vscode';
88
import { toDisposable, Disposable } from 'vs/base/common/lifecycle';
99
import { ILogService } from 'vs/platform/log/common/log';
10-
import { IUserData } from 'vs/workbench/services/userData/common/userData';
10+
import { IUserData } from 'vs/platform/userDataSync/common/userDataSync';
1111

1212
export class ExtHostUserData implements ExtHostUserDataShape {
1313

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions, IWorkbenchContribution } from 'vs/workbench/common/contributions';
7-
import { IUserDataSyncService, SyncStatus, USER_DATA_PREVIEW_SCHEME, IUserDataSyncStoreService } from 'vs/workbench/services/userData/common/userData';
7+
import { IUserDataSyncService, SyncStatus, USER_DATA_PREVIEW_SCHEME } from 'vs/platform/userDataSync/common/userDataSync';
8+
import { IUserDataSyncStoreService } from 'vs/workbench/services/userData/common/userData';
89
import { localize } from 'vs/nls';
910
import { Disposable, MutableDisposable, toDisposable } from 'vs/base/common/lifecycle';
1011
import { CommandsRegistry } from 'vs/platform/commands/common/commands';

src/vs/workbench/services/userData/common/settingsSync.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ import { Disposable } from 'vs/base/common/lifecycle';
88
import { IFileService, FileSystemProviderErrorCode, FileSystemProviderError, IFileContent } from 'vs/platform/files/common/files';
99
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
1010
import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
11-
import { IUserDataSyncStoreService, IUserData, UserDataSyncStoreError, UserDataSyncStoreErrorCode, ISynchroniser, SyncStatus, SETTINGS_PREVIEW_RESOURCE } from 'vs/workbench/services/userData/common/userData';
11+
import { IUserData, UserDataSyncStoreError, UserDataSyncStoreErrorCode, ISynchroniser, SyncStatus, SETTINGS_PREVIEW_RESOURCE } from 'vs/platform/userDataSync/common/userDataSync';
12+
import { IUserDataSyncStoreService } from 'vs/workbench/services/userData/common/userData';
1213
import { VSBuffer } from 'vs/base/common/buffer';
1314
import { parse, findNodeAtLocation, parseTree, ParseError } from 'vs/base/common/json';
1415
import { ITextModel } from 'vs/editor/common/model';

src/vs/workbench/services/userData/common/userData.ts

Lines changed: 1 addition & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -5,65 +5,7 @@
55

66
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
77
import { Event } from 'vs/base/common/event';
8-
import { URI } from 'vs/base/common/uri';
9-
10-
export interface IUserData {
11-
ref: string;
12-
content: string;
13-
}
14-
15-
export enum UserDataSyncStoreErrorCode {
16-
Rejected = 'Rejected',
17-
Unknown = 'Unknown'
18-
}
19-
20-
export function markAsUserDataSyncStoreError(error: Error, code: UserDataSyncStoreErrorCode): Error {
21-
error.name = code ? `${code} (UserDataSyncStoreError)` : `UserDataSyncStoreError`;
22-
23-
return error;
24-
}
25-
26-
export function toUserDataSyncStoreErrorCode(error: Error | undefined | null): UserDataSyncStoreErrorCode {
27-
28-
// Guard against abuse
29-
if (!error) {
30-
return UserDataSyncStoreErrorCode.Unknown;
31-
}
32-
33-
// FileSystemProviderError comes with the code
34-
if (error instanceof UserDataSyncStoreError) {
35-
return error.code;
36-
}
37-
38-
// Any other error, check for name match by assuming that the error
39-
// went through the markAsUserDataSyncStoreError() method
40-
const match = /^(.+) \(UserDataSyncStoreError\)$/.exec(error.name);
41-
if (!match) {
42-
return UserDataSyncStoreErrorCode.Unknown;
43-
}
44-
45-
switch (match[1]) {
46-
case UserDataSyncStoreErrorCode.Rejected: return UserDataSyncStoreErrorCode.Rejected;
47-
}
48-
49-
return UserDataSyncStoreErrorCode.Unknown;
50-
}
51-
52-
export class UserDataSyncStoreError extends Error {
53-
54-
constructor(message: string, public readonly code: UserDataSyncStoreErrorCode) {
55-
super(message);
56-
}
57-
58-
}
59-
60-
export interface IUserDataSyncStore {
61-
62-
read(key: string): Promise<IUserData | null>;
63-
64-
write(key: string, content: string, ref: string | null): Promise<string>;
65-
66-
}
8+
import { IUserDataSyncStore, IUserData } from 'vs/platform/userDataSync/common/userDataSync';
679

6810
export const IUserDataSyncStoreService = createDecorator<IUserDataSyncStoreService>('IUserDataSyncStoreService');
6911

@@ -72,42 +14,12 @@ export interface IUserDataSyncStoreService {
7214
_serviceBrand: undefined;
7315

7416
readonly onDidChangeEnablement: Event<boolean>;
75-
7617
isEnabled(): boolean;
7718

7819
registerUserDataSyncStore(name: string, userDataSyncStore: IUserDataSyncStore): void;
79-
8020
deregisterUserDataSyncStore(): void;
81-
8221
getName(): string | null;
83-
8422
read(key: string): Promise<IUserData | null>;
85-
8623
write(key: string, content: string, ref: string | null): Promise<string>;
8724

8825
}
89-
90-
export enum SyncStatus {
91-
Uninitialized = 'uninitialized',
92-
Idle = 'idle',
93-
Syncing = 'syncing',
94-
HasConflicts = 'hasConflicts',
95-
}
96-
97-
export const USER_DATA_PREVIEW_SCHEME = 'vscode-userdata-preview';
98-
export const SETTINGS_PREVIEW_RESOURCE = URI.file('Settings-Preview').with({ scheme: USER_DATA_PREVIEW_SCHEME });
99-
100-
export interface ISynchroniser {
101-
readonly status: SyncStatus;
102-
readonly onDidChangeStatus: Event<SyncStatus>;
103-
readonly onDidChangeLocal: Event<void>;
104-
sync(): Promise<boolean>;
105-
continueSync(): Promise<boolean>;
106-
handleConflicts(): boolean;
107-
}
108-
109-
export const IUserDataSyncService = createDecorator<IUserDataSyncService>('IUserDataSyncService');
110-
111-
export interface IUserDataSyncService extends ISynchroniser {
112-
_serviceBrand: any;
113-
}

src/vs/workbench/services/userData/common/userDataSyncService.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import { IUserDataSyncService, SyncStatus, IUserDataSyncStoreService, ISynchroniser, USER_DATA_PREVIEW_SCHEME } from 'vs/workbench/services/userData/common/userData';
6+
import { IUserDataSyncService, SyncStatus, ISynchroniser, USER_DATA_PREVIEW_SCHEME } from 'vs/platform/userDataSync/common/userDataSync';
7+
import { IUserDataSyncStoreService } from 'vs/workbench/services/userData/common/userData';
78
import { Disposable } from 'vs/base/common/lifecycle';
89
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
910
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';

src/vs/workbench/services/userData/common/userDataSyncStoreService.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
import { Disposable, } from 'vs/base/common/lifecycle';
77
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
88
import { Emitter, Event } from 'vs/base/common/event';
9-
import { IUserDataSyncStoreService, IUserDataSyncStore, IUserData, UserDataSyncStoreError, toUserDataSyncStoreErrorCode } from 'vs/workbench/services/userData/common/userData';
9+
import { IUserDataSyncStore, IUserData, UserDataSyncStoreError, toUserDataSyncStoreErrorCode } from 'vs/platform/userDataSync/common/userDataSync';
10+
import { IUserDataSyncStoreService } from 'vs/workbench/services/userData/common/userData';
1011
import { ILogService } from 'vs/platform/log/common/log';
1112

1213
export class UserDataSyncStoreService extends Disposable implements IUserDataSyncStoreService {

0 commit comments

Comments
 (0)