44 *--------------------------------------------------------------------------------------------*/
55
66import { Disposable , } from 'vs/base/common/lifecycle' ;
7- import { IUserData , IUserDataSyncStoreService , UserDataSyncErrorCode , IUserDataSyncStore , getUserDataSyncStore , SyncSource , UserDataSyncStoreError , IUserDataSyncLogService , IUserDataManifest } from 'vs/platform/userDataSync/common/userDataSync' ;
7+ import { IUserData , IUserDataSyncStoreService , UserDataSyncErrorCode , IUserDataSyncStore , getUserDataSyncStore , SyncSource , UserDataSyncStoreError , IUserDataSyncLogService , IUserDataManifest , ResourceKey } from 'vs/platform/userDataSync/common/userDataSync' ;
88import { IRequestService , asText , isSuccess , asJson } from 'vs/platform/request/common/request' ;
9- import { joinPath } from 'vs/base/common/resources' ;
9+ import { joinPath , relativePath } from 'vs/base/common/resources' ;
1010import { CancellationToken } from 'vs/base/common/cancellation' ;
1111import { IHeaders , IRequestOptions , IRequestContext } from 'vs/base/parts/request/common/request' ;
1212import { IConfigurationService } from 'vs/platform/configuration/common/configuration' ;
1313import { IAuthenticationTokenService } from 'vs/platform/authentication/common/authentication' ;
1414import { IProductService } from 'vs/platform/product/common/productService' ;
15+ import { URI } from 'vs/base/common/uri' ;
1516
1617export class UserDataSyncStoreService extends Disposable implements IUserDataSyncStoreService {
1718
@@ -30,7 +31,58 @@ export class UserDataSyncStoreService extends Disposable implements IUserDataSyn
3031 this . userDataSyncStore = getUserDataSyncStore ( productService , configurationService ) ;
3132 }
3233
33- async read ( key : string , oldValue : IUserData | null , source ?: SyncSource ) : Promise < IUserData > {
34+ async getAllRefs ( key : ResourceKey ) : Promise < string [ ] > {
35+ if ( ! this . userDataSyncStore ) {
36+ throw new Error ( 'No settings sync store url configured.' ) ;
37+ }
38+
39+ const uri = joinPath ( this . userDataSyncStore . url , 'resource' , key ) ;
40+ const headers : IHeaders = { } ;
41+
42+ const context = await this . request ( { type : 'GET' , url : uri . toString ( ) , headers } , undefined , CancellationToken . None ) ;
43+
44+ if ( ! isSuccess ( context ) ) {
45+ throw new UserDataSyncStoreError ( 'Server returned ' + context . res . statusCode , UserDataSyncErrorCode . Unknown , undefined ) ;
46+ }
47+
48+ const resources : string [ ] = await asJson < string [ ] > ( context ) || [ ] ;
49+ return resources . map ( resource => relativePath ( uri , URI . parse ( resource ) ) ! ) ;
50+ }
51+
52+ async resolveContent ( key : ResourceKey , ref : string ) : Promise < string | null > {
53+ if ( ! this . userDataSyncStore ) {
54+ throw new Error ( 'No settings sync store url configured.' ) ;
55+ }
56+
57+ const url = joinPath ( this . userDataSyncStore . url , 'resource' , key , ref ) . toString ( ) ;
58+ const headers : IHeaders = { } ;
59+
60+ const context = await this . request ( { type : 'GET' , url, headers } , undefined , CancellationToken . None ) ;
61+
62+ if ( ! isSuccess ( context ) ) {
63+ throw new UserDataSyncStoreError ( 'Server returned ' + context . res . statusCode , UserDataSyncErrorCode . Unknown , undefined ) ;
64+ }
65+
66+ const content = await asText ( context ) ;
67+ return content ;
68+ }
69+
70+ async delete ( key : ResourceKey ) : Promise < void > {
71+ if ( ! this . userDataSyncStore ) {
72+ throw new Error ( 'No settings sync store url configured.' ) ;
73+ }
74+
75+ const url = joinPath ( this . userDataSyncStore . url , 'resource' , key ) . toString ( ) ;
76+ const headers : IHeaders = { } ;
77+
78+ const context = await this . request ( { type : 'DELETE' , url, headers } , undefined , CancellationToken . None ) ;
79+
80+ if ( ! isSuccess ( context ) ) {
81+ throw new UserDataSyncStoreError ( 'Server returned ' + context . res . statusCode , UserDataSyncErrorCode . Unknown , undefined ) ;
82+ }
83+ }
84+
85+ async read ( key : ResourceKey , oldValue : IUserData | null , source ?: SyncSource ) : Promise < IUserData > {
3486 if ( ! this . userDataSyncStore ) {
3587 throw new Error ( 'No settings sync store url configured.' ) ;
3688 }
@@ -62,7 +114,7 @@ export class UserDataSyncStoreService extends Disposable implements IUserDataSyn
62114 return { ref, content } ;
63115 }
64116
65- async write ( key : string , data : string , ref : string | null , source ?: SyncSource ) : Promise < string > {
117+ async write ( key : ResourceKey , data : string , ref : string | null , source ?: SyncSource ) : Promise < string > {
66118 if ( ! this . userDataSyncStore ) {
67119 throw new Error ( 'No settings sync store url configured.' ) ;
68120 }
0 commit comments