add 'don't ask again' to close with with conflicts modal (#167258)

fixes https://github.com/microsoft/vscode/issues/159024
This commit is contained in:
Johannes Rieken
2022-11-25 15:41:31 +01:00
committed by GitHub
parent 337fd85290
commit a2a90a4e76
4 changed files with 40 additions and 4 deletions

View File

@@ -14,12 +14,13 @@ import { IDialogService } from 'vs/platform/dialogs/common/dialogs';
import { ITextEditorOptions } from 'vs/platform/editor/common/editor';
import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
import { IOpenerService } from 'vs/platform/opener/common/opener';
import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
import { IEditorIdentifier, IResourceMergeEditorInput } from 'vs/workbench/common/editor';
import { MergeEditorInput, MergeEditorInputData } from 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInput';
import { IMergeEditorInputModel } from 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel';
import { MergeEditor } from 'vs/workbench/contrib/mergeEditor/browser/view/mergeEditor';
import { MergeEditorViewModel } from 'vs/workbench/contrib/mergeEditor/browser/view/viewModel';
import { ctxIsMergeEditor, ctxMergeEditorLayout, ctxMergeEditorShowBase, ctxMergeEditorShowBaseAtTop, ctxMergeEditorShowNonConflictingChanges } from 'vs/workbench/contrib/mergeEditor/common/mergeEditor';
import { ctxIsMergeEditor, ctxMergeEditorLayout, ctxMergeEditorShowBase, ctxMergeEditorShowBaseAtTop, ctxMergeEditorShowNonConflictingChanges, StorageCloseWithConflicts } from 'vs/workbench/contrib/mergeEditor/common/mergeEditor';
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
abstract class MergeEditorAction extends Action2 {
@@ -636,6 +637,26 @@ export class ResetToBaseAndAutoMergeCommand extends MergeEditorAction {
}
}
export class ResetCloseWithConflictsChoice extends Action2 {
constructor() {
super({
id: 'mergeEditor.resetCloseWithConflictsChoice',
category: mergeEditorCategory,
title: {
value: localize(
'mergeEditor.resetChoice',
'Reset Choice for \'Close with Conflicts\''
),
original: 'Reset Choice for \'Close with Conflicts\'',
},
f1: true,
});
}
run(accessor: ServicesAccessor): void {
accessor.get(IStorageService).remove(StorageCloseWithConflicts, StorageScope.PROFILE);
}
}
// this is an API command
export class AcceptMerge extends MergeEditorAction2 {
constructor() {

View File

@@ -15,7 +15,7 @@ import {
AcceptAllInput1, AcceptAllInput2, AcceptMerge, CompareInput1WithBaseCommand,
CompareInput2WithBaseCommand, GoToNextUnhandledConflict, GoToPreviousUnhandledConflict, OpenBaseFile, OpenMergeEditor,
OpenResultResource, ResetToBaseAndAutoMergeCommand, SetColumnLayout, SetMixedLayout, ShowHideTopBase, ShowHideCenterBase, ShowHideBase,
ShowNonConflictingChanges, ToggleActiveConflictInput1, ToggleActiveConflictInput2
ShowNonConflictingChanges, ToggleActiveConflictInput1, ToggleActiveConflictInput2, ResetCloseWithConflictsChoice
} from 'vs/workbench/contrib/mergeEditor/browser/commands/commands';
import { MergeEditorCopyContentsToJSON, MergeEditorLoadContentsFromFolder, MergeEditorSaveContentsToFolder } from 'vs/workbench/contrib/mergeEditor/browser/commands/devCommands';
import { MergeEditorInput } from 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInput';
@@ -83,6 +83,7 @@ registerAction2(AcceptAllInput2);
registerAction2(ResetToBaseAndAutoMergeCommand);
registerAction2(AcceptMerge);
registerAction2(ResetCloseWithConflictsChoice);
// Dev Commands
registerAction2(MergeEditorCopyContentsToJSON);

View File

@@ -17,6 +17,7 @@ import { localize } from 'vs/nls';
import { ConfirmResult, IDialogOptions, IDialogService } from 'vs/platform/dialogs/common/dialogs';
import { IEditorModel } from 'vs/platform/editor/common/editor';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage';
import { IRevertOptions, SaveSourceRegistry } from 'vs/workbench/common/editor';
import { EditorModel } from 'vs/workbench/common/editor/editorModel';
import { MergeEditorInputData } from 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInput';
@@ -24,6 +25,7 @@ import { conflictMarkers } from 'vs/workbench/contrib/mergeEditor/browser/mergeM
import { MergeDiffComputer } from 'vs/workbench/contrib/mergeEditor/browser/model/diffComputer';
import { InputData, MergeEditorModel } from 'vs/workbench/contrib/mergeEditor/browser/model/mergeEditorModel';
import { MergeEditorTelemetry } from 'vs/workbench/contrib/mergeEditor/browser/telemetry';
import { StorageCloseWithConflicts } from 'vs/workbench/contrib/mergeEditor/common/mergeEditor';
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
import { ITextFileEditorModel, ITextFileSaveOptions, ITextFileService } from 'vs/workbench/services/textfile/common/textfiles';
@@ -349,6 +351,7 @@ class WorkspaceMergeEditorInputModel extends EditorModel implements IMergeEditor
private readonly resultTextFileModel: ITextFileEditorModel,
private readonly telemetry: MergeEditorTelemetry,
@IDialogService private readonly _dialogService: IDialogService,
@IStorageService private readonly _storageService: IStorageService,
) {
super();
}
@@ -449,7 +452,7 @@ class WorkspaceMergeEditorInputModel extends EditorModel implements IMergeEditor
const { choice } = await this._dialogService.show(Severity.Info, message, actions.map(a => a[0]), { ...options, cancelId: actions.length - 1 });
return actions[choice][1];
} else if (someUnhandledConflicts) {
} else if (someUnhandledConflicts && !this._storageService.getBoolean(StorageCloseWithConflicts, StorageScope.PROFILE, false)) {
const message = isMany
? localize('workspace.messageN.nonDirty', 'Do you want to close {0} merge editors?', inputModels.length)
: localize('workspace.message1.nonDirty', 'Do you want to close the merge editor for {0}?', basename(inputModels[0].resultUri));
@@ -471,7 +474,16 @@ class WorkspaceMergeEditorInputModel extends EditorModel implements IMergeEditor
[localize('workspace.cancel', 'Cancel'), ConfirmResult.CANCEL],
];
const { choice } = await this._dialogService.show(Severity.Info, message, actions.map(a => a[0]), { ...options, cancelId: actions.length - 1 });
const { choice, checkboxChecked } = await this._dialogService.show(Severity.Info, message, actions.map(a => a[0]), {
...options,
cancelId: actions.length - 1,
checkbox: { label: localize('noMoreWarn', "Don't ask again") }
});
if (checkboxChecked) {
this._storageService.store(StorageCloseWithConflicts, true, StorageScope.PROFILE, StorageTarget.USER);
}
return actions[choice][1];
} else {
// This shouldn't do anything

View File

@@ -26,3 +26,5 @@ export interface MergeEditorContents {
result: string;
initialResult?: string;
}
export const StorageCloseWithConflicts = 'mergeEditorCloseWithConflicts';