diff --git a/client/src/main/java/ctbrec/ui/menu/ModelMenuContributor.java b/client/src/main/java/ctbrec/ui/menu/ModelMenuContributor.java index b9e98ab2..ffa1b218 100644 --- a/client/src/main/java/ctbrec/ui/menu/ModelMenuContributor.java +++ b/client/src/main/java/ctbrec/ui/menu/ModelMenuContributor.java @@ -17,6 +17,7 @@ import ctbrec.ui.AutosizeAlert; import ctbrec.ui.SiteUiFactory; import ctbrec.ui.StreamSourceSelectionDialog; import ctbrec.ui.action.AddToGroupAction; +import ctbrec.ui.action.IgnoreModelsAction; import ctbrec.ui.action.PlayAction; import ctbrec.ui.action.SetStopDateAction; import ctbrec.ui.action.StartRecordingAction; @@ -44,6 +45,8 @@ public class ModelMenuContributor { private Node source; private Consumer startStopCallback; private TriConsumer followCallback; + private Consumer ignoreCallback; + private boolean removeWithIgnore = false; private ModelMenuContributor(Node source, Config config, Recorder recorder) { this.source = source; @@ -65,9 +68,20 @@ public class ModelMenuContributor { return this; } + public ModelMenuContributor withIgnoreCallback(Consumer ignoreCallback) { + this.ignoreCallback = ignoreCallback; + return this; + } + + public ModelMenuContributor removeModelAfterIgnore(boolean yes) { + this.removeWithIgnore = yes; + return this; + } + public void contributeToMenu(List selectedModels, ContextMenu menu) { startStopCallback = Optional.ofNullable(startStopCallback).orElse(m -> {}); followCallback = Optional.ofNullable(followCallback).orElse((m, f, s) -> {}); + ignoreCallback = Optional.ofNullable(ignoreCallback).orElse(m -> {}); addOpenInPlayer(menu, selectedModels); menu.getItems().add(new SeparatorMenuItem()); addStartOrStop(menu, selectedModels); @@ -78,6 +92,17 @@ public class ModelMenuContributor { addGroupMenu(menu, selectedModels); menu.getItems().add(new SeparatorMenuItem()); addFollowUnfollow(menu, selectedModels); + addIgnore(menu, selectedModels); + } + + private void addIgnore(ContextMenu menu, List selectedModels) { + var ignore = new MenuItem("Ignore"); + ignore.setOnAction(e -> ignore(selectedModels)); + menu.getItems().add(ignore); + } + + private void ignore(List selectedModels) { + new IgnoreModelsAction(source, selectedModels, recorder, removeWithIgnore).execute(ignoreCallback); } private void addFollowUnfollow(ContextMenu menu, List selectedModels) { diff --git a/client/src/main/java/ctbrec/ui/tabs/ThumbOverviewTab.java b/client/src/main/java/ctbrec/ui/tabs/ThumbOverviewTab.java index 676653b5..50fa6fdb 100644 --- a/client/src/main/java/ctbrec/ui/tabs/ThumbOverviewTab.java +++ b/client/src/main/java/ctbrec/ui/tabs/ThumbOverviewTab.java @@ -4,10 +4,8 @@ import java.io.IOException; import java.net.SocketTimeoutException; import java.util.ArrayList; import java.util.Collections; -import java.util.HashMap; import java.util.Iterator; import java.util.List; -import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.concurrent.BlockingQueue; @@ -35,7 +33,6 @@ import ctbrec.ui.AutosizeAlert; import ctbrec.ui.DesktopIntegration; import ctbrec.ui.SiteUiFactory; import ctbrec.ui.TokenLabel; -import ctbrec.ui.action.IgnoreModelsAction; import ctbrec.ui.action.OpenRecordingsDir; import ctbrec.ui.action.TipAction; import ctbrec.ui.controls.CustomMouseBehaviorContextMenu; @@ -461,9 +458,6 @@ public class ThumbOverviewTab extends Tab implements TabSelectionListener { var model = cell.getModel(); var selectedModels = getSelectedThumbCells(cell).stream().map(ThumbCell::getModel).collect(Collectors.toList()); - var ignore = new MenuItem("Ignore"); - ignore.setOnAction(e -> ignore(getSelectedThumbCells(cell))); - var refresh = new MenuItem("Refresh Overview"); refresh.setOnAction(e -> refresh()); @@ -494,12 +488,16 @@ public class ThumbOverviewTab extends Tab implements TabSelectionListener { selectedThumbCells.clear(); } }) + .withIgnoreCallback(m -> getThumbCell(m).ifPresent(thumbCell -> { + grid.getChildren().remove(thumbCell); + selectedThumbCells.remove(thumbCell); + })) .contributeToMenu(selectedModels, contextMenu); if (site.supportsTips()) { contextMenu.getItems().add(sendTip); } - contextMenu.getItems().addAll(copyUrl, openInBrowser, ignore, refresh, openRecDir); + contextMenu.getItems().addAll(copyUrl, openInBrowser, refresh, openRecDir); if (model instanceof MyFreeCamsModel && Objects.equals(System.getenv("CTBREC_DEV"), "1")) { var debug = new MenuItem("debug"); debug.setOnAction(e -> MyFreeCamsClient.getInstance().getSessionState(model)); @@ -589,19 +587,6 @@ public class ThumbOverviewTab extends Tab implements TabSelectionListener { } } - protected void ignore(List selection) { - 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 -> { - var thumbCell = thumbcells.get(m); - grid.getChildren().remove(thumbCell); - selectedThumbCells.remove(thumbCell); - }); - } - private void showAddToFollowedAnimation(ThumbCell thumbCell) { Platform.runLater(() -> { var tx = thumbCell.getLocalToParentTransform();