383
return new UserDataSyncError(error.message, UserDataSyncErrorCode.Unknown);
384
}
386
>
}
387
>
388
>
//#endregion
389
>
390
>
// #region User Data Synchroniser
391
>
392
>
export interface ISyncUserDataProfile {
393
>
readonly id: string;
394
>
readonly collection: string;
395
>
readonly name: string;
396
>
readonly icon?: string;
397
>
readonly useDefaultFlags?: UseDefaultProfileFlags;
398
>
}
399
>
400
>
export type ISyncExtension = ILocalSyncExtension | IRemoteSyncExtension;
401
>
402
>
export interface ILocalSyncExtension {
403
>
identifier: IExtensionIdentifier;
404
>
pinned: boolean;
405
>
version: string;
406
>
preRelease: boolean;
407
>
disabled?: boolean;
408
>
installed?: boolean;
409
>
isApplicationScoped?: boolean;
410
>
state?: IStringDictionary<any>;
411
>
}
412
>
413
>
export interface IRemoteSyncExtension {
414
>
identifier: IExtensionIdentifier;
415
>
version: string;
416
>
pinned?: boolean;
417
>
preRelease?: boolean;
418
>
disabled?: boolean;
419
>
installed?: boolean;
420
>
isApplicationScoped?: boolean;
421
>
state?: IStringDictionary<any>;
422
>
}
423
>
424
>
export interface IStorageValue {
425
>
version: number;
426
>
value: string;
427
>
scope?: StorageScope;
428
>
}
429
>
430
>
export interface IGlobalState {
431
>
storage: IStringDictionary<IStorageValue>;
432
>
}
433
>
434
>
export interface IWorkspaceState {
435
>
folders: IWorkspaceStateFolder[];
436
>
storage: IStringDictionary<string>;
437
>
version: number;
438
>
}
439
>
440
>
export interface IWorkspaceStateFolder {
441
>
resourceUri: string;
442
>
workspaceFolderIdentity: string;
443
>
}
444
>
445
>
export const enum SyncStatus {
446
>
Uninitialized = 'uninitialized',
447
>
Idle = 'idle',
448
>
Syncing = 'syncing',
449
>
HasConflicts = 'hasConflicts',
450
>
}
451
>
452
>
export interface ISyncResourceHandle {
453
>
created: number;
454
>
uri: URI;
455
>
}
456
>
457
>
export interface IRemoteUserData {
458
>
ref: string;
459
>
syncData: ISyncData | null;
460
>
}
461
>
462
>
export interface ISyncData {
463
>
version: number;
464
>
machineId?: string;
465
>
content: string;
466
>
}
467
>
468
>
export const enum Change {
469
>
None,
470
>
Added,
471
>
Modified,
472
>
Deleted,
473
>
}
474
>
475
>
export const enum MergeState {
476
>
Preview = 'preview',
477
>
Conflict = 'conflict',
478
>
Accepted = 'accepted',
479
>
}
480
>
481
>
export interface IResourcePreview {
482
>
readonly baseResource: URI;
483
>
readonly remoteResource: URI;
484
>
readonly localResource: URI;
485
>
readonly previewResource: URI;
486
>
readonly acceptedResource: URI;
487
>
readonly localChange: Change;
488
>
readonly remoteChange: Change;
489
>
readonly mergeState: MergeState;
490
>
}
491
>
492
>
export interface IUserDataSyncResource {
493
>
readonly syncResource: SyncResource;
494
>
readonly profile: IUserDataProfile;
495
>
}
496
>
497
>
export interface IUserDataSyncResourceConflicts extends IUserDataSyncResource {
498
>
readonly conflicts: IResourcePreview[];
499
>
}
500
>
501
>
export interface IUserDataSyncResourcePreview extends IUserDataSyncResource {
502
>
readonly isLastSyncFromCurrentMachine: boolean;
503
>
readonly resourcePreviews: IResourcePreview[];
504
>
}
505
>
506
>
export interface IUserDataSyncResourceError extends IUserDataSyncResource {
507
>
readonly error: UserDataSyncError;
508
>
}
509
>
510
>
export interface IUserDataSyncResourceInitializer {
511
>
initialize(userData: IUserData): Promise<void>;
512
>
}
513
>
514
>
export interface IUserDataSynchroniser {
515
>
516
>
readonly resource: SyncResource;
517
>
readonly status: SyncStatus;
518
>
readonly onDidChangeStatus: Event<SyncStatus>;
519
>
520
>
readonly conflicts: IUserDataSyncResourceConflicts;
521
>
readonly onDidChangeConflicts: Event<IUserDataSyncResourceConflicts>;
522
>
523
>
readonly onDidChangeLocal: Event<void>;
524
>
525
>
sync(refOrUserData: string | IUserData | null, preview: boolean, userDataSyncConfiguration: IUserDataSyncConfiguration, headers: IHeaders): Promise<IUserDataSyncResourcePreview | null>;
526
>
accept(resource: URI, content?: string | null): Promise<IUserDataSyncResourcePreview | null>;
527
>
apply(force: boolean, headers: IHeaders): Promise<IUserDataSyncResourcePreview | null>;
528
>
stop(): Promise<void>;
529
>
530
>
hasPreviouslySynced(): Promise<boolean>;
531
>
hasLocalData(): Promise<boolean>;
532
>
resetLocal(): Promise<void>;
533
>
534
>
resolveContent(resource: URI): Promise<string | null>;
535
>
replace(content: string): Promise<boolean>;
536
>
}
537
>
538
>
//#endregion
539
>
540
>
// #region keys synced only in web
541
>
542
>
export const SYNC_SERVICE_URL_TYPE = 'sync.store.url.type';
543
>
export function getEnablementKey(resource: SyncResource) { return `sync.enable.${resource}`; }
544
>
545
>
// #endregion
546
>
547
>
// #region User Data Sync Services
548
>
export const IUserDataSyncEnablementService = createDecorator<IUserDataSyncEnablementService>('IUserDataSyncEnablementService');
549
>
export interface IUserDataSyncEnablementService {
550
>
_serviceBrand: undefined;
551
>
552
>
readonly onDidChangeEnablement: Event<boolean>;
553
>
isEnabled(): boolean;
554
>
canToggleEnablement(): boolean;
555
>
setEnablement(enabled: boolean): void;
556
>
557
>
readonly onDidChangeResourceEnablement: Event<[SyncResource, boolean]>;
558
>
isResourceEnabled(resource: SyncResource, defaultValue?: boolean): boolean;
559
>
setResourceEnablement(resource: SyncResource, enabled: boolean): void;
560
>
561
>
getResourceSyncStateVersion(resource: SyncResource): string | undefined;
562
>
563
>
/**
564
>
* Checks if resource enabled was explicitly configured before,
565
>
* ignoring its default enablement value used in {@link isResourceEnabled}.
566
>
*/
567
>
isResourceEnablementConfigured(resource: SyncResource): boolean;
568
>
}
569
>
570
>
export interface IUserDataSyncTask {
571
>
readonly manifest: IUserDataManifest | null;
572
>
run(): Promise<void>;
573
>
stop(): Promise<void>;
574
>
}
575
>
576
>
export interface IUserDataManualSyncTask {
577
>
readonly id: string;
578
>
merge(): Promise<void>;
579
>
apply(): Promise<void>;
580
>
stop(): Promise<void>;
581
>
}
582
>
583
>
export const IUserDataSyncService = createDecorator<IUserDataSyncService>('IUserDataSyncService');
584
>
export interface IUserDataSyncService {
585
>
_serviceBrand: undefined;
586
>
587
>
readonly status: SyncStatus;
588
>
readonly onDidChangeStatus: Event<SyncStatus>;
589
>
590
>
readonly conflicts: IUserDataSyncResourceConflicts[];
591
>
readonly onDidChangeConflicts: Event<IUserDataSyncResourceConflicts[]>;
592
>
593
>
readonly onDidChangeLocal: Event<SyncResource>;
594
>
readonly onSyncErrors: Event<IUserDataSyncResourceError[]>;
595
>
596
>
readonly lastSyncTime: number | undefined;
597
>
readonly onDidChangeLastSyncTime: Event<number>;
598
>
599
>
readonly onDidResetRemote: Event<void>;
600
>
readonly onDidResetLocal: Event<void>;
601
>
602
>
createSyncTask(manifest: IUserDataManifest | null, disableCache?: boolean): Promise<IUserDataSyncTask>;
603
>
createManualSyncTask(): Promise<IUserDataManualSyncTask>;
604
>
resolveContent(resource: URI): Promise<string | null>;
605
>
accept(syncResource: IUserDataSyncResource, resource: URI, content: string | null | undefined, apply: boolean | { force: boolean }): Promise<void>;
606
>
607
>
reset(): Promise<void>;
608
>
resetRemote(): Promise<void>;
609
>
cleanUpRemoteData(): Promise<void>;
610
>
resetLocal(): Promise<void>;
611
>
hasLocalData(): Promise<boolean>;
612
>
hasPreviouslySynced(): Promise<boolean>;
613
>
614
>
replace(syncResourceHandle: ISyncResourceHandle): Promise<void>;
615
>
616
>
saveRemoteActivityData(location: URI): Promise<void>;
617
>
extractActivityData(activityDataResource: URI, location: URI): Promise<void>;
618
>
}
619
>
620
>
export const IUserDataSyncResourceProviderService = createDecorator<IUserDataSyncResourceProviderService>('IUserDataSyncResourceProviderService');
621
>
export interface IUserDataSyncResourceProviderService {
622
>
_serviceBrand: undefined;
623
>
getRemoteSyncedProfiles(): Promise<ISyncUserDataProfile[]>;
624
>
getLocalSyncedProfiles(location?: URI): Promise<ISyncUserDataProfile[]>;
625
>
getRemoteSyncResourceHandles(syncResource: SyncResource, profile?: ISyncUserDataProfile): Promise<ISyncResourceHandle[]>;
626
>
getLocalSyncResourceHandles(syncResource: SyncResource, profile?: ISyncUserDataProfile, location?: URI): Promise<ISyncResourceHandle[]>;
627
>
getAssociatedResources(syncResourceHandle: ISyncResourceHandle): Promise<{ resource: URI; comparableResource: URI }[]>;
628
>
getMachineId(syncResourceHandle: ISyncResourceHandle): Promise<string | undefined>;
629
>
getLocalSyncedMachines(location?: URI): Promise<IUserDataSyncMachine[]>;
630
>
resolveContent(resource: URI): Promise<string | null>;
631
>
resolveUserDataSyncResource(syncResourceHandle: ISyncResourceHandle): IUserDataSyncResource | undefined;
632
>
}
633
>
634
>
export type SyncOptions = { immediately?: boolean; skipIfSyncedRecently?: boolean; disableCache?: boolean };
635
>
636
>
export const IUserDataAutoSyncService = createDecorator<IUserDataAutoSyncService>('IUserDataAutoSyncService');
637
>
export interface IUserDataAutoSyncService {
638
>
_serviceBrand: undefined;
639
>
readonly onError: Event<UserDataSyncError>;
640
>
turnOn(): Promise<void>;
641
>
turnOff(everywhere: boolean): Promise<void>;
642
>
triggerSync(sources: string[], options?: SyncOptions): Promise<void>;
643
>
}
644
>
645
>
export const IUserDataSyncUtilService = createDecorator<IUserDataSyncUtilService>('IUserDataSyncUtilService');
646
>
export interface IUserDataSyncUtilService {
647
>
readonly _serviceBrand: undefined;
648
>
resolveUserBindings(userbindings: string[]): Promise<IStringDictionary<string>>;
649
>
resolveFormattingOptions(resource: URI): Promise<FormattingOptions>;
650
>
resolveDefaultCoreIgnoredSettings(): Promise<string[]>;
651
>
}
652
>
653
>
export const IUserDataSyncLogService = createDecorator<IUserDataSyncLogService>('IUserDataSyncLogService');
654
>
export interface IUserDataSyncLogService extends ILogService { }
655
>
656
>
export interface IConflictSetting {
657
>
key: string;
658
>
localValue: any | undefined;
659
>
remoteValue: any | undefined;
660
>
}
661
>
662
>
//#endregion
663
>
664
>
export const USER_DATA_SYNC_LOG_ID = 'userDataSync';
665
>
export const USER_DATA_SYNC_SCHEME = 'vscode-userdata-sync';
666
>
export const PREVIEW_DIR_NAME = 'preview';