diff --git a/client/src/main/java/ctbrec/ui/menu/ModelMenuContributor.java b/client/src/main/java/ctbrec/ui/menu/ModelMenuContributor.java index 18d89d60..d05a79f9 100644 --- a/client/src/main/java/ctbrec/ui/menu/ModelMenuContributor.java +++ b/client/src/main/java/ctbrec/ui/menu/ModelMenuContributor.java @@ -15,6 +15,7 @@ import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Node; import javafx.scene.control.ContextMenu; +import javafx.scene.control.Menu; import javafx.scene.control.MenuItem; import javafx.scene.control.SeparatorMenuItem; import javafx.scene.control.TabPane; @@ -76,16 +77,12 @@ public class ModelMenuContributor { } 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 -> { - }); - portraitCallback = Optional.ofNullable(portraitCallback).orElse(m -> { - }); - callback = Optional.ofNullable(callback).orElse(() -> { - }); + startStopCallback = Optional.ofNullable(startStopCallback).orElse(m -> {}); + followCallback = Optional.ofNullable(followCallback).orElse((m, f, s) -> {}); + ignoreCallback = Optional.ofNullable(ignoreCallback).orElse(m -> {}); + portraitCallback = Optional.ofNullable(portraitCallback).orElse(m -> {}); + callback = Optional.ofNullable(callback).orElse(() -> {}); + addOpenInPlayer(menu, selectedModels); addOpenInBrowser(menu, selectedModels); addCopyUrl(menu, selectedModels); @@ -108,8 +105,17 @@ public class ModelMenuContributor { addOpenRecDir(menu, selectedModels); addNotes(menu, selectedModels); addPortrait(menu, selectedModels); - addOpenOnCamGirlFinder(menu, selectedModels); - addOpenOnNrToolFinder(menu, selectedModels); + menu.getItems().add(new SeparatorMenuItem()); + + // Create a submenu for the "Open On" options + Menu openOnSubMenu = new Menu("Search On ..."); + addOpenOnCamGirlFinder(openOnSubMenu, selectedModels); // https://camgirlfinder.net/models?m=everlenn + addOpenOnCamWhores(openOnSubMenu, selectedModels); // https://www.camwhores.tv/search/everlenn/ + addOpenOnMyCamGirl(openOnSubMenu, selectedModels); // https://mycamgirl.net/search?query=everlenn + addOpenOnNrToolFinder(openOnSubMenu, selectedModels); // https://nrtool.to/nrtool/search?s=everlenn + addOpenOnRecu(openOnSubMenu, selectedModels); // https://recu.me/performer/everlenn + // Add the submenu to the main menu + menu.getItems().add(openOnSubMenu); } public ModelMenuContributor afterwards(Runnable callback) { @@ -151,8 +157,8 @@ public class ModelMenuContributor { menu.getItems().add(openInBrowser); } - private void addOpenOnCamGirlFinder(ContextMenu menu, List selectedModels) { - var openOnCamGirlFinder = new MenuItem("Search on CamGirlFinder"); + private void addOpenOnCamGirlFinder(Menu menu, List selectedModels) { + var openOnCamGirlFinder = new MenuItem("CamGirlFinder"); openOnCamGirlFinder.setOnAction(e -> { for (Model model : selectedModels) { String preview = model.getPreview(); @@ -168,9 +174,31 @@ public class ModelMenuContributor { menu.getItems().add(openOnCamGirlFinder); } + private void addOpenOnCamWhores(Menu menu, List selectedModels) { + var openOnCamWhores = new MenuItem("CamWhores"); + openOnCamWhores.setOnAction(e -> { + for (Model model : selectedModels) { + String query = URLEncoder.encode(model.getName(), UTF_8); + DesktopIntegration.open("https://www.camwhores.tv/search/" + query + "/"); + } + }); + menu.getItems().add(openOnCamWhores); + } + + private void addOpenOnMyCamGirl(Menu menu, List selectedModels) { + var openOnMyCamGirl = new MenuItem("MyCamGirl"); + openOnMyCamGirl.setOnAction(e -> { + for (Model model : selectedModels) { + String query = URLEncoder.encode(model.getName(), UTF_8); + DesktopIntegration.open("https://mycamgirl.net/search?query=" + query); + } + }); + menu.getItems().add(openOnMyCamGirl); + } + @SuppressWarnings("unused") // Remove when NR Tool accepts image URL and below is updated - private void addOpenOnNrToolFinder(ContextMenu menu, List selectedModels) { - var openOnNrToolFinder = new MenuItem("Search on NRTool"); + private void addOpenOnNrToolFinder(Menu menu, List selectedModels) { + var openOnNrToolFinder = new MenuItem("NR Tool"); openOnNrToolFinder.setOnAction(e -> { for (Model model : selectedModels) { String preview = model.getPreview(); @@ -189,6 +217,17 @@ public class ModelMenuContributor { menu.getItems().add(openOnNrToolFinder); } + private void addOpenOnRecu(Menu menu, List selectedModels) { + var openOnRecu = new MenuItem("Recu"); + openOnRecu.setOnAction(e -> { + for (Model model : selectedModels) { + String query = URLEncoder.encode(model.getName(), UTF_8); + DesktopIntegration.open("https://recu.me/performer/" + query); + } + }); + menu.getItems().add(openOnRecu); + } + private void addCopyUrl(ContextMenu menu, List selectedModels) { if (selectedModels == null || selectedModels.isEmpty()) { return;