Skip to content

Commit 343e400

Browse files
committed
microsoft#100346 inline SyncResourceConflicts type
1 parent 04aa49c commit 343e400

5 files changed

Lines changed: 45 additions & 47 deletions

File tree

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -358,8 +358,6 @@ export interface IUserDataSyncResourceEnablementService {
358358
setResourceEnablement(resource: SyncResource, enabled: boolean): void;
359359
}
360360

361-
export type SyncResourceConflicts = { syncResource: SyncResource, conflicts: IResourcePreview[] };
362-
363361
export interface ISyncTask {
364362
readonly manifest: IUserDataManifest | null;
365363
run(): Promise<void>;
@@ -384,8 +382,8 @@ export interface IUserDataSyncService {
384382
readonly onDidChangeStatus: Event<SyncStatus>;
385383
readonly onSynchronizeResource: Event<SyncResource>;
386384

387-
readonly conflicts: SyncResourceConflicts[];
388-
readonly onDidChangeConflicts: Event<SyncResourceConflicts[]>;
385+
readonly conflicts: [SyncResource, IResourcePreview[]][];
386+
readonly onDidChangeConflicts: Event<[SyncResource, IResourcePreview[]][]>;
389387

390388
readonly onDidChangeLocal: Event<SyncResource>;
391389
readonly onSyncErrors: Event<[SyncResource, UserDataSyncError][]>;

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

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

6-
import { IUserDataSyncService, SyncStatus, IUserDataSyncStoreService, SyncResource, IUserDataSyncLogService, IUserDataSynchroniser, UserDataSyncErrorCode, UserDataSyncError, SyncResourceConflicts, ISyncResourceHandle, IUserDataManifest, ISyncTask, Change, IResourcePreview, IManualSyncTask, ISyncResourcePreview } from 'vs/platform/userDataSync/common/userDataSync';
6+
import { IUserDataSyncService, SyncStatus, IUserDataSyncStoreService, SyncResource, IUserDataSyncLogService, IUserDataSynchroniser, UserDataSyncErrorCode, UserDataSyncError, ISyncResourceHandle, IUserDataManifest, ISyncTask, Change, IResourcePreview, IManualSyncTask, ISyncResourcePreview } from 'vs/platform/userDataSync/common/userDataSync';
77
import { Disposable } from 'vs/base/common/lifecycle';
88
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
99
import { Emitter, Event } from 'vs/base/common/event';
@@ -47,10 +47,10 @@ export class UserDataSyncService extends Disposable implements IUserDataSyncServ
4747

4848
readonly onDidChangeLocal: Event<SyncResource>;
4949

50-
private _conflicts: SyncResourceConflicts[] = [];
51-
get conflicts(): SyncResourceConflicts[] { return this._conflicts; }
52-
private _onDidChangeConflicts: Emitter<SyncResourceConflicts[]> = this._register(new Emitter<SyncResourceConflicts[]>());
53-
readonly onDidChangeConflicts: Event<SyncResourceConflicts[]> = this._onDidChangeConflicts.event;
50+
private _conflicts: [SyncResource, IResourcePreview[]][] = [];
51+
get conflicts(): [SyncResource, IResourcePreview[]][] { return this._conflicts; }
52+
private _onDidChangeConflicts: Emitter<[SyncResource, IResourcePreview[]][]> = this._register(new Emitter<[SyncResource, IResourcePreview[]][]>());
53+
readonly onDidChangeConflicts: Event<[SyncResource, IResourcePreview[]][]> = this._onDidChangeConflicts.event;
5454

5555
private _syncErrors: [SyncResource, UserDataSyncError][] = [];
5656
private _onSyncErrors: Emitter<[SyncResource, UserDataSyncError][]> = this._register(new Emitter<[SyncResource, UserDataSyncError][]>());
@@ -393,7 +393,7 @@ export class UserDataSyncService extends Disposable implements IUserDataSyncServ
393393

394394
private updateConflicts(): void {
395395
const conflicts = this.computeConflicts();
396-
if (!equals(this._conflicts, conflicts, (a, b) => a.syncResource === b.syncResource && equals(a.conflicts, b.conflicts, (a, b) => isEqual(a.previewResource, b.previewResource)))) {
396+
if (!equals(this._conflicts, conflicts, ([syncResourceA, conflictsA], [syncResourceB, conflictsB]) => syncResourceA === syncResourceA && equals(conflictsA, conflictsB, (a, b) => isEqual(a.previewResource, b.previewResource)))) {
397397
this._conflicts = this.computeConflicts();
398398
this._onDidChangeConflicts.fire(conflicts);
399399
}
@@ -438,9 +438,9 @@ export class UserDataSyncService extends Disposable implements IUserDataSyncServ
438438
this.logService.error(`${source}: ${toErrorMessage(e)}`);
439439
}
440440

441-
private computeConflicts(): SyncResourceConflicts[] {
441+
private computeConflicts(): [SyncResource, IResourcePreview[]][] {
442442
return this.synchronisers.filter(s => s.status === SyncStatus.HasConflicts)
443-
.map(s => ({ syncResource: s.resource, conflicts: s.conflicts.map(toStrictResourcePreview) }));
443+
.map(s => ([s.resource, s.conflicts.map(toStrictResourcePreview)]));
444444
}
445445

446446
getSynchroniser(source: SyncResource): IUserDataSynchroniser {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ suite('UserDataSyncService', () => {
420420
await (await testObject.createSyncTask()).run();
421421

422422
assert.deepEqual(testObject.status, SyncStatus.HasConflicts);
423-
assert.deepEqual(testObject.conflicts.map(({ syncResource }) => syncResource), [SyncResource.Settings]);
423+
assert.deepEqual(testObject.conflicts.map(([syncResource]) => syncResource), [SyncResource.Settings]);
424424
});
425425

426426
test('test sync will sync other non conflicted areas', async () => {

src/vs/workbench/contrib/userDataSync/browser/userDataSync.ts

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
3030
import {
3131
IUserDataAutoSyncService, IUserDataSyncService, registerConfiguration,
3232
SyncResource, SyncStatus, UserDataSyncError, UserDataSyncErrorCode, USER_DATA_SYNC_SCHEME, IUserDataSyncResourceEnablementService,
33-
SyncResourceConflicts, getSyncResourceFromLocalPreview, IResourcePreview
33+
getSyncResourceFromLocalPreview, IResourcePreview
3434
} from 'vs/platform/userDataSync/common/userDataSync';
3535
import { FloatingClickWidget } from 'vs/workbench/browser/parts/editor/editorWidgets';
3636
import { IWorkbenchContribution } from 'vs/workbench/common/contributions';
@@ -155,10 +155,10 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
155155
}
156156

157157
private readonly conflictsDisposables = new Map<SyncResource, IDisposable>();
158-
private onDidChangeConflicts(conflicts: SyncResourceConflicts[]) {
158+
private onDidChangeConflicts(conflicts: [SyncResource, IResourcePreview[]][]) {
159159
this.updateGlobalActivityBadge();
160160
if (conflicts.length) {
161-
const conflictsSources: SyncResource[] = conflicts.map(conflict => conflict.syncResource);
161+
const conflictsSources: SyncResource[] = conflicts.map(([syncResource]) => syncResource);
162162
this.conflictsSources.set(conflictsSources.join(','));
163163
if (conflictsSources.indexOf(SyncResource.Snippets) !== -1) {
164164
this.registerShowSnippetsConflictsAction();
@@ -172,7 +172,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
172172
}
173173
});
174174

175-
for (const { syncResource, conflicts } of this.userDataSyncService.conflicts) {
175+
for (const [syncResource, conflicts] of this.userDataSyncService.conflicts) {
176176
const conflictsEditorInputs = this.getConflictsEditorInputs(syncResource);
177177

178178
// close stale conflicts editor previews
@@ -207,7 +207,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
207207
label: localize('show conflicts', "Show Conflicts"),
208208
run: () => {
209209
this.telemetryService.publicLog2<{ source: string, action?: string }, SyncConflictsClassification>('sync/showConflicts', { source: syncResource });
210-
this.handleConflicts({ syncResource, conflicts });
210+
this.handleConflicts([syncResource, conflicts]);
211211
}
212212
}
213213
],
@@ -376,7 +376,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
376376
let priority: number | undefined = undefined;
377377

378378
if (this.userDataSyncService.conflicts.length) {
379-
badge = new NumberBadge(this.userDataSyncService.conflicts.reduce((result, syncResourceConflict) => { return result + syncResourceConflict.conflicts.length; }, 0), () => localize('has conflicts', "Preferences Sync: Conflicts Detected"));
379+
badge = new NumberBadge(this.userDataSyncService.conflicts.reduce((result, [, conflicts]) => { return result + conflicts.length; }, 0), () => localize('has conflicts', "Preferences Sync: Conflicts Detected"));
380380
} else if (this.turningOnSync) {
381381
badge = new ProgressBadge(() => localize('turning on syncing', "Turning on Preferences Sync..."));
382382
clazz = 'progress-badge';
@@ -611,13 +611,13 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
611611
}
612612

613613
private async handleSyncResourceConflicts(resource: SyncResource): Promise<void> {
614-
const syncResourceCoflicts = this.userDataSyncService.conflicts.filter(({ syncResource }) => syncResource === resource)[0];
614+
const syncResourceCoflicts = this.userDataSyncService.conflicts.filter(([syncResource]) => syncResource === resource)[0];
615615
if (syncResourceCoflicts) {
616616
this.handleConflicts(syncResourceCoflicts);
617617
}
618618
}
619619

620-
private async handleConflicts({ syncResource, conflicts }: SyncResourceConflicts): Promise<void> {
620+
private async handleConflicts([syncResource, conflicts]: [SyncResource, IResourcePreview[]]): Promise<void> {
621621
for (const conflict of conflicts) {
622622
let label: string | undefined = undefined;
623623
if (syncResource === SyncResource.Settings) {
@@ -814,7 +814,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
814814
private registerShowSnippetsConflictsAction(): void {
815815
this._snippetsConflictsActionsDisposable.clear();
816816
const resolveSnippetsConflictsWhenContext = ContextKeyExpr.regex(CONTEXT_CONFLICTS_SOURCES.keys()[0], /.*snippets.*/i);
817-
const conflicts: IResourcePreview[] | undefined = this.userDataSyncService.conflicts.filter(({ syncResource }) => syncResource === SyncResource.Snippets)[0]?.conflicts;
817+
const conflicts: IResourcePreview[] | undefined = this.userDataSyncService.conflicts.filter(([syncResource]) => syncResource === SyncResource.Snippets)[0]?.[1];
818818
this._snippetsConflictsActionsDisposable.add(CommandsRegistry.registerCommand(resolveSnippetsConflictsCommand.id, () => this.handleSyncResourceConflicts(SyncResource.Snippets)));
819819
this._snippetsConflictsActionsDisposable.add(MenuRegistry.appendMenuItem(MenuId.GlobalActivity, {
820820
group: '5_sync',
@@ -878,7 +878,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
878878
disposables.add(quickPick);
879879
const items: Array<IQuickPickItem | IQuickPickSeparator> = [];
880880
if (that.userDataSyncService.conflicts.length) {
881-
for (const { syncResource } of that.userDataSyncService.conflicts) {
881+
for (const [syncResource] of that.userDataSyncService.conflicts) {
882882
switch (syncResource) {
883883
case SyncResource.Settings:
884884
items.push({ id: resolveSettingsConflictsCommand.id, label: resolveSettingsConflictsCommand.title });
@@ -1127,11 +1127,11 @@ class AcceptChangesContribution extends Disposable implements IEditorContributio
11271127
return false;
11281128
}
11291129

1130-
if (syncResourceConflicts.conflicts.some(({ previewResource }) => isEqual(previewResource, model.uri))) {
1130+
if (syncResourceConflicts[1].some(({ previewResource }) => isEqual(previewResource, model.uri))) {
11311131
return true;
11321132
}
11331133

1134-
if (syncResourceConflicts.conflicts.some(({ remoteResource }) => isEqual(remoteResource, model.uri))) {
1134+
if (syncResourceConflicts[1].some(({ remoteResource }) => isEqual(remoteResource, model.uri))) {
11351135
return this.configurationService.getValue<boolean>('diffEditor.renderSideBySide');
11361136
}
11371137

@@ -1141,16 +1141,16 @@ class AcceptChangesContribution extends Disposable implements IEditorContributio
11411141
private createAcceptChangesWidgetRenderer(): void {
11421142
if (!this.acceptChangesButton) {
11431143
const resource = this.editor.getModel()!.uri;
1144-
const syncResourceConflicts = this.getSyncResourceConflicts(resource)!;
1145-
const isRemote = syncResourceConflicts.conflicts.some(({ remoteResource }) => isEqual(remoteResource, resource));
1144+
const [syncResource, conflicts] = this.getSyncResourceConflicts(resource)!;
1145+
const isRemote = conflicts.some(({ remoteResource }) => isEqual(remoteResource, resource));
11461146
const acceptRemoteLabel = localize('accept remote', "Accept Remote");
11471147
const acceptLocalLabel = localize('accept local', "Accept Local");
11481148
this.acceptChangesButton = this.instantiationService.createInstance(FloatingClickWidget, this.editor, isRemote ? acceptRemoteLabel : acceptLocalLabel, null);
11491149
this._register(this.acceptChangesButton.onClick(async () => {
11501150
const model = this.editor.getModel();
11511151
if (model) {
1152-
this.telemetryService.publicLog2<{ source: string, action: string }, SyncConflictsClassification>('sync/handleConflicts', { source: syncResourceConflicts.syncResource, action: isRemote ? 'acceptRemote' : 'acceptLocal' });
1153-
const syncAreaLabel = getSyncAreaLabel(syncResourceConflicts.syncResource);
1152+
this.telemetryService.publicLog2<{ source: string, action: string }, SyncConflictsClassification>('sync/handleConflicts', { source: syncResource, action: isRemote ? 'acceptRemote' : 'acceptLocal' });
1153+
const syncAreaLabel = getSyncAreaLabel(syncResource);
11541154
const result = await this.dialogService.confirm({
11551155
type: 'info',
11561156
title: isRemote
@@ -1163,11 +1163,11 @@ class AcceptChangesContribution extends Disposable implements IEditorContributio
11631163
});
11641164
if (result.confirmed) {
11651165
try {
1166-
await this.userDataSyncService.acceptPreviewContent(syncResourceConflicts.syncResource, model.uri, model.getValue());
1166+
await this.userDataSyncService.acceptPreviewContent(syncResource, model.uri, model.getValue());
11671167
} catch (e) {
11681168
if (e instanceof UserDataSyncError && e.code === UserDataSyncErrorCode.LocalPreconditionFailed) {
1169-
const syncResourceCoflicts = this.userDataSyncService.conflicts.filter(({ syncResource }) => syncResource === syncResourceConflicts.syncResource)[0];
1170-
if (syncResourceCoflicts && syncResourceCoflicts.conflicts.some(conflict => isEqual(conflict.previewResource, model.uri) || isEqual(conflict.remoteResource, model.uri))) {
1169+
const syncResourceCoflicts = this.userDataSyncService.conflicts.filter(syncResourceCoflicts => syncResourceCoflicts[0] === syncResource)[0];
1170+
if (syncResourceCoflicts && conflicts.some(conflict => isEqual(conflict.previewResource, model.uri) || isEqual(conflict.remoteResource, model.uri))) {
11711171
this.notificationService.warn(localize('update conflicts', "Could not resolve conflicts as there is new local version available. Please try again."));
11721172
}
11731173
} else {
@@ -1182,8 +1182,8 @@ class AcceptChangesContribution extends Disposable implements IEditorContributio
11821182
}
11831183
}
11841184

1185-
private getSyncResourceConflicts(resource: URI): SyncResourceConflicts | undefined {
1186-
return this.userDataSyncService.conflicts.filter(({ conflicts }) => conflicts.some(({ previewResource, remoteResource }) => isEqual(previewResource, resource) || isEqual(remoteResource, resource)))[0];
1185+
private getSyncResourceConflicts(resource: URI): [SyncResource, IResourcePreview[]] | undefined {
1186+
return this.userDataSyncService.conflicts.filter(([, conflicts]) => conflicts.some(({ previewResource, remoteResource }) => isEqual(previewResource, resource) || isEqual(remoteResource, resource)))[0];
11871187
}
11881188

11891189
private disposeAcceptChangesWidgetRenderer(): void {

src/vs/workbench/services/userDataSync/electron-browser/userDataSyncService.ts

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

6-
import { SyncStatus, SyncResource, IUserDataSyncService, UserDataSyncError, SyncResourceConflicts, ISyncResourceHandle, ISyncTask, IManualSyncTask, IUserDataManifest, ISyncResourcePreview } from 'vs/platform/userDataSync/common/userDataSync';
6+
import { SyncStatus, SyncResource, IUserDataSyncService, UserDataSyncError, ISyncResourceHandle, ISyncTask, IManualSyncTask, IUserDataManifest, ISyncResourcePreview, IResourcePreview } from 'vs/platform/userDataSync/common/userDataSync';
77
import { ISharedProcessService } from 'vs/platform/ipc/electron-browser/sharedProcessService';
88
import { Disposable } from 'vs/base/common/lifecycle';
99
import { Emitter, Event } from 'vs/base/common/event';
@@ -25,10 +25,10 @@ export class UserDataSyncService extends Disposable implements IUserDataSyncServ
2525

2626
get onDidChangeLocal(): Event<SyncResource> { return this.channel.listen<SyncResource>('onDidChangeLocal'); }
2727

28-
private _conflicts: SyncResourceConflicts[] = [];
29-
get conflicts(): SyncResourceConflicts[] { return this._conflicts; }
30-
private _onDidChangeConflicts: Emitter<SyncResourceConflicts[]> = this._register(new Emitter<SyncResourceConflicts[]>());
31-
readonly onDidChangeConflicts: Event<SyncResourceConflicts[]> = this._onDidChangeConflicts.event;
28+
private _conflicts: [SyncResource, IResourcePreview[]][] = [];
29+
get conflicts(): [SyncResource, IResourcePreview[]][] { return this._conflicts; }
30+
private _onDidChangeConflicts: Emitter<[SyncResource, IResourcePreview[]][]> = this._register(new Emitter<[SyncResource, IResourcePreview[]][]>());
31+
readonly onDidChangeConflicts: Event<[SyncResource, IResourcePreview[]][]> = this._onDidChangeConflicts.event;
3232

3333
private _lastSyncTime: number | undefined = undefined;
3434
get lastSyncTime(): number | undefined { return this._lastSyncTime; }
@@ -54,7 +54,7 @@ export class UserDataSyncService extends Disposable implements IUserDataSyncServ
5454
return userDataSyncChannel.listen(event, arg);
5555
}
5656
};
57-
this.channel.call<[SyncStatus, SyncResourceConflicts[], number | undefined]>('_getInitialData').then(([status, conflicts, lastSyncTime]) => {
57+
this.channel.call<[SyncStatus, [SyncResource, IResourcePreview[]][], number | undefined]>('_getInitialData').then(([status, conflicts, lastSyncTime]) => {
5858
this.updateStatus(status);
5959
this.updateConflicts(conflicts);
6060
if (lastSyncTime) {
@@ -63,7 +63,7 @@ export class UserDataSyncService extends Disposable implements IUserDataSyncServ
6363
this._register(this.channel.listen<SyncStatus>('onDidChangeStatus')(status => this.updateStatus(status)));
6464
this._register(this.channel.listen<number>('onDidChangeLastSyncTime')(lastSyncTime => this.updateLastSyncTime(lastSyncTime)));
6565
});
66-
this._register(this.channel.listen<SyncResourceConflicts[]>('onDidChangeConflicts')(conflicts => this.updateConflicts(conflicts)));
66+
this._register(this.channel.listen<[SyncResource, IResourcePreview[]][]>('onDidChangeConflicts')(conflicts => this.updateConflicts(conflicts)));
6767
this._register(this.channel.listen<[SyncResource, Error][]>('onSyncErrors')(errors => this._onSyncErrors.fire(errors.map(([source, error]) => ([source, UserDataSyncError.toUserDataSyncError(error)])))));
6868
}
6969

@@ -136,19 +136,19 @@ export class UserDataSyncService extends Disposable implements IUserDataSyncServ
136136
this._onDidChangeStatus.fire(status);
137137
}
138138

139-
private async updateConflicts(conflicts: SyncResourceConflicts[]): Promise<void> {
139+
private async updateConflicts(conflicts: [SyncResource, IResourcePreview[]][]): Promise<void> {
140140
// Revive URIs
141-
this._conflicts = conflicts.map(c =>
142-
({
143-
syncResource: c.syncResource,
144-
conflicts: c.conflicts.map(r =>
141+
this._conflicts = conflicts.map(([syncResource, conflicts]) =>
142+
([
143+
syncResource,
144+
conflicts.map(r =>
145145
({
146146
...r,
147147
localResource: URI.revive(r.localResource),
148148
remoteResource: URI.revive(r.remoteResource),
149149
previewResource: URI.revive(r.previewResource),
150150
}))
151-
}));
151+
]));
152152
this._onDidChangeConflicts.fire(conflicts);
153153
}
154154

0 commit comments

Comments
 (0)