Skip to content

Commit 414ac7a

Browse files
committed
microsoft#100346 use manual sync task while turning on sync
1 parent 343e400 commit 414ac7a

9 files changed

Lines changed: 196 additions & 168 deletions

File tree

src/vs/platform/userDataSync/common/userDataAutoSyncService.ts

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -81,12 +81,6 @@ export class UserDataAutoSyncService extends UserDataAutoSyncEnablementService i
8181
private readonly _onError: Emitter<UserDataSyncError> = this._register(new Emitter<UserDataSyncError>());
8282
readonly onError: Event<UserDataSyncError> = this._onError.event;
8383

84-
private readonly _onTurnOnSync: Emitter<void> = this._register(new Emitter<void>());
85-
readonly onTurnOnSync: Event<void> = this._onTurnOnSync.event;
86-
87-
private readonly _onDidTurnOnSync: Emitter<UserDataSyncError | undefined> = this._register(new Emitter<UserDataSyncError | undefined>());
88-
readonly onDidTurnOnSync: Event<UserDataSyncError | undefined> = this._onDidTurnOnSync.event;
89-
9084
constructor(
9185
@IUserDataSyncStoreService private readonly userDataSyncStoreService: IUserDataSyncStoreService,
9286
@IUserDataSyncResourceEnablementService private readonly userDataSyncResourceEnablementService: IUserDataSyncResourceEnablementService,
@@ -145,24 +139,9 @@ export class UserDataAutoSyncService extends UserDataAutoSyncEnablementService i
145139
return { enabled: true };
146140
}
147141

148-
async turnOn(pullFirst: boolean): Promise<void> {
149-
this._onTurnOnSync.fire();
150-
151-
try {
152-
this.stopDisableMachineEventually();
153-
154-
if (pullFirst) {
155-
await this.userDataSyncService.pull();
156-
} else {
157-
await (await this.userDataSyncService.createSyncTask()).run();
158-
}
159-
160-
this.setEnablement(true);
161-
this._onDidTurnOnSync.fire(undefined);
162-
} catch (error) {
163-
this._onDidTurnOnSync.fire(error);
164-
throw error;
165-
}
142+
async turnOn(): Promise<void> {
143+
this.stopDisableMachineEventually();
144+
this.setEnablement(true);
166145
}
167146

168147
async turnOff(everywhere: boolean, softTurnOffOnError?: boolean, donotRemoveMachine?: boolean): Promise<void> {

src/vs/platform/userDataSync/common/userDataSync.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,6 @@ export interface IResourcePreview {
304304
readonly previewResource: URI;
305305
readonly localChange: Change;
306306
readonly remoteChange: Change;
307-
308307
}
309308

310309
export interface ISyncResourcePreview {
@@ -364,11 +363,13 @@ export interface ISyncTask {
364363
stop(): Promise<void>;
365364
}
366365

367-
export interface IManualSyncTask {
366+
export interface IManualSyncTask extends IDisposable {
367+
readonly id: string;
368368
readonly manifest: IUserDataManifest | null;
369+
readonly onSynchronizeResources: Event<[SyncResource, URI[]][]>;
369370
preview(): Promise<[SyncResource, ISyncResourcePreview][]>;
370371
accept(uri: URI, content: string): Promise<[SyncResource, ISyncResourcePreview][]>;
371-
merge(uri: URI): Promise<[SyncResource, ISyncResourcePreview][]>;
372+
merge(uri?: URI): Promise<[SyncResource, ISyncResourcePreview][]>;
372373
pull(): Promise<void>;
373374
push(): Promise<void>;
374375
stop(): Promise<void>;
@@ -380,7 +381,6 @@ export interface IUserDataSyncService {
380381

381382
readonly status: SyncStatus;
382383
readonly onDidChangeStatus: Event<SyncStatus>;
383-
readonly onSynchronizeResource: Event<SyncResource>;
384384

385385
readonly conflicts: [SyncResource, IResourcePreview[]][];
386386
readonly onDidChangeConflicts: Event<[SyncResource, IResourcePreview[]][]>;
@@ -400,7 +400,6 @@ export interface IUserDataSyncService {
400400
resetLocal(): Promise<void>;
401401

402402
hasLocalData(): Promise<boolean>;
403-
isFirstTimeSyncingWithAnotherMachine(): Promise<boolean>;
404403
hasPreviouslySynced(): Promise<boolean>;
405404
resolveContent(resource: URI): Promise<string | null>;
406405
acceptPreviewContent(resource: SyncResource, conflictResource: URI, content: string): Promise<void>;
@@ -414,13 +413,11 @@ export interface IUserDataSyncService {
414413
export const IUserDataAutoSyncService = createDecorator<IUserDataAutoSyncService>('IUserDataAutoSyncService');
415414
export interface IUserDataAutoSyncService {
416415
_serviceBrand: any;
417-
readonly onTurnOnSync: Event<void>
418-
readonly onDidTurnOnSync: Event<UserDataSyncError | undefined>
419416
readonly onError: Event<UserDataSyncError>;
420417
readonly onDidChangeEnablement: Event<boolean>;
421418
isEnabled(): boolean;
422419
canToggleEnablement(): boolean;
423-
turnOn(pullFirst: boolean): Promise<void>;
420+
turnOn(): Promise<void>;
424421
turnOff(everywhere: boolean): Promise<void>;
425422
triggerSync(sources: string[], hasToLimitSync: boolean): Promise<void>;
426423
}

src/vs/platform/userDataSync/common/userDataSyncIpc.ts

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ export class UserDataSyncChannel implements IServerChannel {
2222
listen(_: unknown, event: string): Event<any> {
2323
switch (event) {
2424
case 'onDidChangeStatus': return this.service.onDidChangeStatus;
25-
case 'onSynchronizeResource': return this.service.onSynchronizeResource;
2625
case 'onDidChangeConflicts': return this.service.onDidChangeConflicts;
2726
case 'onDidChangeLocal': return this.service.onDidChangeLocal;
2827
case 'onDidChangeLastSyncTime': return this.service.onDidChangeLastSyncTime;
@@ -53,7 +52,6 @@ export class UserDataSyncChannel implements IServerChannel {
5352
case 'resetLocal': return this.service.resetLocal();
5453
case 'hasPreviouslySynced': return this.service.hasPreviouslySynced();
5554
case 'hasLocalData': return this.service.hasLocalData();
56-
case 'isFirstTimeSyncingWithAnotherMachine': return this.service.isFirstTimeSyncingWithAnotherMachine();
5755
case 'acceptPreviewContent': return this.service.acceptPreviewContent(args[0], URI.revive(args[1]), args[2]);
5856
case 'resolveContent': return this.service.resolveContent(URI.revive(args[0]));
5957
case 'getLocalSyncResourceHandles': return this.service.getLocalSyncResourceHandles(args[0]);
@@ -64,13 +62,11 @@ export class UserDataSyncChannel implements IServerChannel {
6462
throw new Error('Invalid call');
6563
}
6664

67-
private taskCounter = 1;
68-
private async createManualSyncTask(): Promise<{ initialData: { manifest: IUserDataManifest | null }, channelName: string }> {
65+
private async createManualSyncTask(): Promise<{ id: string, manifest: IUserDataManifest | null }> {
6966
const manualSyncTask = await this.service.createManualSyncTask();
7067
const manualSyncTaskChannel = new ManualSyncTaskChannel(manualSyncTask);
71-
const channelName = `manualSyncTask-${this.taskCounter++}`;
72-
this.server.registerChannel(channelName, manualSyncTaskChannel);
73-
return { initialData: { manifest: manualSyncTask.manifest }, channelName };
68+
this.server.registerChannel(`manualSyncTask-${manualSyncTask.id}`, manualSyncTaskChannel);
69+
return { id: manualSyncTask.id, manifest: manualSyncTask.manifest };
7470
}
7571
}
7672

@@ -79,6 +75,9 @@ class ManualSyncTaskChannel implements IServerChannel {
7975
constructor(private readonly manualSyncTask: IManualSyncTask) { }
8076

8177
listen(_: unknown, event: string): Event<any> {
78+
switch (event) {
79+
case 'onSynchronizeResources': return this.manualSyncTask.onSynchronizeResources;
80+
}
8281
throw new Error(`Event not found: ${event}`);
8382
}
8483

@@ -90,6 +89,7 @@ class ManualSyncTaskChannel implements IServerChannel {
9089
case 'pull': return this.manualSyncTask.pull();
9190
case 'push': return this.manualSyncTask.push();
9291
case 'stop': return this.manualSyncTask.stop();
92+
case 'dispose': return this.manualSyncTask.dispose();
9393
}
9494
throw new Error('Invalid call');
9595
}
@@ -102,8 +102,6 @@ export class UserDataAutoSyncChannel implements IServerChannel {
102102

103103
listen(_: unknown, event: string): Event<any> {
104104
switch (event) {
105-
case 'onTurnOnSync': return this.service.onTurnOnSync;
106-
case 'onDidTurnOnSync': return this.service.onDidTurnOnSync;
107105
case 'onError': return this.service.onError;
108106
}
109107
throw new Error(`Event not found: ${event}`);
@@ -112,7 +110,7 @@ export class UserDataAutoSyncChannel implements IServerChannel {
112110
call(context: any, command: string, args?: any): Promise<any> {
113111
switch (command) {
114112
case 'triggerSync': return this.service.triggerSync(args[0], args[1]);
115-
case 'turnOn': return this.service.turnOn(args[0]);
113+
case 'turnOn': return this.service.turnOn();
116114
case 'turnOff': return this.service.turnOff(args[0]);
117115
}
118116
throw new Error('Invalid call');

0 commit comments

Comments
 (0)