userDataSync.ts 2.7 KB
Newer Older
1 2 3 4 5 6 7
/*---------------------------------------------------------------------------------------------
 *  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';
S
Sandeep Somavarapu 已提交
8
import { IExtensionIdentifier } from 'vs/platform/extensionManagement/common/extensionManagement';
9
import { RawContextKey } from 'vs/platform/contextkey/common/contextkey';
10 11 12

export interface IUserData {
	ref: string;
13
	content: string | null;
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
}

export enum UserDataSyncStoreErrorCode {
	Rejected = 'Rejected',
	Unknown = 'Unknown'
}

export class UserDataSyncStoreError extends Error {

	constructor(message: string, public readonly code: UserDataSyncStoreErrorCode) {
		super(message);
	}

}

29 30 31 32
export const IUserDataSyncStoreService = createDecorator<IUserDataSyncStoreService>('IUserDataSyncStoreService');

export interface IUserDataSyncStoreService {
	_serviceBrand: undefined;
33

34 35
	readonly enabled: boolean;

36 37 38 39
	readonly loggedIn: boolean;
	readonly onDidChangeLoggedIn: Event<boolean>;
	login(): Promise<void>;
	logout(): Promise<void>;
40

41
	read(key: string, oldValue: IUserData | null): Promise<IUserData>;
42
	write(key: string, content: string, ref: string | null): Promise<string>;
43 44
}

S
Sandeep Somavarapu 已提交
45 46 47 48 49 50
export interface ISyncExtension {
	identifier: IExtensionIdentifier;
	version?: string;
	enabled: boolean;
}

S
Sandeep Somavarapu 已提交
51
export const enum SyncSource {
52 53 54
	Settings = 1,
	Extensions
}
55

S
Sandeep Somavarapu 已提交
56
export const enum SyncStatus {
57 58 59 60 61 62 63 64 65 66 67 68
	Uninitialized = 'uninitialized',
	Idle = 'idle',
	Syncing = 'syncing',
	HasConflicts = 'hasConflicts',
}

export interface ISynchroniser {

	readonly status: SyncStatus;
	readonly onDidChangeStatus: Event<SyncStatus>;
	readonly onDidChangeLocal: Event<void>;

69
	sync(_continue?: boolean): Promise<boolean>;
70 71 72 73 74 75
}

export const IUserDataSyncService = createDecorator<IUserDataSyncService>('IUserDataSyncService');

export interface IUserDataSyncService extends ISynchroniser {
	_serviceBrand: any;
76
	readonly conflictsSource: SyncSource | null;
77 78 79

	getRemoteExtensions(): Promise<ISyncExtension[]>;
	removeExtension(identifier: IExtensionIdentifier): Promise<void>;
80
}
81 82 83 84 85 86 87

export const ISettingsMergeService = createDecorator<ISettingsMergeService>('ISettingsMergeService');

export interface ISettingsMergeService {

	_serviceBrand: undefined;

88
	merge(localContent: string, remoteContent: string, baseContent: string | null): Promise<{ mergeContent: string, hasChanges: boolean, hasConflicts: boolean }>;
89 90

}
91 92

export const CONTEXT_SYNC_STATE = new RawContextKey<string>('syncStatus', SyncStatus.Uninitialized);