@@ -45,6 +45,8 @@ import { FloatingClickWidget } from 'vs/workbench/browser/parts/editor/editorWid
4545import { IFileService } from 'vs/platform/files/common/files' ;
4646import { VSBuffer } from 'vs/base/common/buffer' ;
4747import { registerEditorContribution } from 'vs/editor/browser/editorExtensions' ;
48+ import { areSame } from 'vs/platform/userDataSync/common/settingsMerge' ;
49+ import { getIgnoredSettings } from 'vs/platform/userDataSync/common/settingsSync' ;
4850
4951const enum AuthStatus {
5052 Initializing = 'Initializing' ,
@@ -83,7 +85,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
8385 @IOutputService private readonly outputService : IOutputService ,
8486 @IUserDataAuthTokenService private readonly userDataAuthTokenService : IUserDataAuthTokenService ,
8587 @IUserDataAutoSyncService userDataAutoSyncService : IUserDataAutoSyncService ,
86- @ITextModelService textModelResolverService : ITextModelService ,
88+ @ITextModelService private readonly textModelResolverService : ITextModelService ,
8789 ) {
8890 super ( ) ;
8991 this . userDataSyncStore = getUserDataSyncStore ( configurationService ) ;
@@ -461,8 +463,9 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
461463 label = localize ( 'keybindings conflicts preview' , "Keybindings Conflicts (Remote ↔ Local)" ) ;
462464 }
463465 if ( rightResource ) {
464- await this . editorService . openEditor ( {
465- leftResource : toRemoteContentResource ( this . userDataSyncService . conflictsSource ! ) ,
466+ const leftResource = toRemoteContentResource ( this . userDataSyncService . conflictsSource ! ) ;
467+ const editor = await this . editorService . openEditor ( {
468+ leftResource,
466469 rightResource,
467470 label,
468471 options : {
@@ -471,6 +474,29 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
471474 revealIfVisible : true ,
472475 } ,
473476 } ) ;
477+ if ( editor ?. input ) {
478+ const disposable = editor . input . onDispose ( async ( ) => {
479+ disposable . dispose ( ) ;
480+ this . checkAndContinueSync ( leftResource , rightResource ! ) ;
481+ } ) ;
482+ }
483+ }
484+ }
485+
486+ private async checkAndContinueSync ( remoteResource : URI , previewResource : URI ) : Promise < void > {
487+ const source = getSyncSourceFromRemoteContentResource ( remoteResource ) ;
488+ if ( source === undefined || this . userDataSyncService . conflictsSource !== source ) {
489+ return ;
490+ }
491+
492+ const remoteModelRef = await this . textModelResolverService . createModelReference ( remoteResource ) ;
493+ const previewModelRef = await this . textModelResolverService . createModelReference ( previewResource ! ) ;
494+ if ( source === SyncSource . Settings ) {
495+ if ( areSame ( remoteModelRef . object . textEditorModel . getValue ( ) , previewModelRef . object . textEditorModel . getValue ( ) , getIgnoredSettings ( this . configurationService ) ) ) {
496+ await this . userDataSyncService . sync ( true ) ;
497+ }
498+ } else if ( remoteModelRef . object . textEditorModel . getValue ( ) === previewModelRef . object . textEditorModel . getValue ( ) ) {
499+ await this . userDataSyncService . sync ( true ) ;
474500 }
475501 }
476502
0 commit comments