diff --git a/client/src/main/java/ctbrec/ui/action/IgnoreModelsAction.java b/client/src/main/java/ctbrec/ui/action/IgnoreModelsAction.java new file mode 100644 index 00000000..842ca419 --- /dev/null +++ b/client/src/main/java/ctbrec/ui/action/IgnoreModelsAction.java @@ -0,0 +1,65 @@ +package ctbrec.ui.action; + +import java.util.List; +import java.util.function.Consumer; + +import ctbrec.Config; +import ctbrec.Model; +import ctbrec.Settings; +import ctbrec.recorder.Recorder; +import ctbrec.ui.JavaFxModel; +import ctbrec.ui.controls.Dialogs; +import javafx.scene.Node; + +public class IgnoreModelsAction { + private Node source; + private List selectedModels; + private Recorder recorder; + private boolean withRemoveDialog; + + public IgnoreModelsAction(Node source, List selectedModels, Recorder recorder, boolean withRemoveDialog) { + this.source = source; + this.selectedModels = selectedModels; + this.recorder = recorder; + this.withRemoveDialog = withRemoveDialog; + } + + public void execute() { + execute(model -> {}); + } + + public void execute(Consumer callback) { + Settings settings = Config.getInstance().getSettings(); + boolean confirmed = true; + if (settings.confirmationForDangerousActions) { + int n = selectedModels.size(); + String plural = n > 1 ? "s" : ""; + String header = "This will add " + n + " model" + plural + " to the ignore list"; + confirmed = Dialogs.showConfirmDialog("Ignore Models", "Continue?", header, source.getScene()); + } + if (confirmed) { + for (Model model : selectedModels) { + Model modelToIgnore = unwrap(model); + settings.modelsIgnored.add(modelToIgnore); + } + if (withRemoveDialog) { + boolean removeAsWell = Dialogs.showConfirmDialog("Ignore Model", null, "Remove as well?", source.getScene()); + if (removeAsWell) { + new StopRecordingAction(source, selectedModels, recorder).execute(callback); + } + } else { + for (Model model : selectedModels) { + callback.accept(model); + } + } + } + } + + private Model unwrap(Model model) { + if (model instanceof JavaFxModel) { + return ((JavaFxModel) model).getDelegate(); + } else { + return model; + } + } +} diff --git a/client/src/main/java/ctbrec/ui/tabs/RecordedModelsTab.java b/client/src/main/java/ctbrec/ui/tabs/RecordedModelsTab.java index b06cc5ad..6186e7d6 100644 --- a/client/src/main/java/ctbrec/ui/tabs/RecordedModelsTab.java +++ b/client/src/main/java/ctbrec/ui/tabs/RecordedModelsTab.java @@ -42,6 +42,7 @@ import ctbrec.ui.StreamSourceSelectionDialog; import ctbrec.ui.action.CheckModelAccountAction; import ctbrec.ui.action.EditNotesAction; import ctbrec.ui.action.FollowAction; +import ctbrec.ui.action.IgnoreModelsAction; import ctbrec.ui.action.OpenRecordingsDir; import ctbrec.ui.action.PauseAction; import ctbrec.ui.action.PlayAction; @@ -709,14 +710,7 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener { } private void ignore(ObservableList selectedModels) { - for (JavaFxModel fxModel : selectedModels) { - Model modelToIgnore = fxModel.getDelegate(); - Config.getInstance().getSettings().modelsIgnored.add(modelToIgnore); - } - boolean removeAsWell = Dialogs.showConfirmDialog("Ignore Model", null, "Remove as well?", getTabPane().getScene()); - if (removeAsWell) { - stopAction(selectedModels); - } + new IgnoreModelsAction(table, selectedModels, recorder, true).execute(); } private void follow(ObservableList selectedModels) { diff --git a/client/src/main/java/ctbrec/ui/tabs/ThumbOverviewTab.java b/client/src/main/java/ctbrec/ui/tabs/ThumbOverviewTab.java index 24d86d70..bc2458df 100644 --- a/client/src/main/java/ctbrec/ui/tabs/ThumbOverviewTab.java +++ b/client/src/main/java/ctbrec/ui/tabs/ThumbOverviewTab.java @@ -38,6 +38,7 @@ import ctbrec.ui.DesktopIntegration; import ctbrec.ui.SiteUiFactory; import ctbrec.ui.TipDialog; import ctbrec.ui.TokenLabel; +import ctbrec.ui.action.IgnoreModelsAction; import ctbrec.ui.action.OpenRecordingsDir; import ctbrec.ui.action.SetStopDateAction; import ctbrec.ui.controls.FasterVerticalScrollPaneSkin; @@ -622,12 +623,19 @@ public class ThumbOverviewTab extends Tab implements TabSelectionListener { } protected void ignore(List selection) { - for (ThumbCell thumbCell : selection) { - Model model = thumbCell.getModel(); - Config.getInstance().getSettings().modelsIgnored.add(model); + Map thumbcells = new HashMap<>(); + List selectedModels = selection.stream() + .map(tc -> { + thumbcells.put(tc.getModel(), tc); + return tc; + }) + .map(ThumbCell::getModel) + .collect(Collectors.toList()); + new IgnoreModelsAction(grid, selectedModels, recorder, false).execute(m -> { + ThumbCell thumbCell = thumbcells.get(m); grid.getChildren().remove(thumbCell); - } - selectedThumbCells.clear(); + selectedThumbCells.remove(thumbCell); + }); } private void showAddToFollowedAnimation(ThumbCell thumbCell) {