diff --git a/client/src/main/java/ctbrec/ui/sites/bonga/BongaCamsConfigUI.java b/client/src/main/java/ctbrec/ui/sites/bonga/BongaCamsConfigUI.java index 957f6c63..40a8e32c 100644 --- a/client/src/main/java/ctbrec/ui/sites/bonga/BongaCamsConfigUI.java +++ b/client/src/main/java/ctbrec/ui/sites/bonga/BongaCamsConfigUI.java @@ -15,7 +15,7 @@ import javafx.scene.control.Label; import javafx.scene.control.PasswordField; import javafx.scene.control.TextField; import javafx.scene.layout.GridPane; -import javafx.scene.layout.HBox; +// import javafx.scene.layout.HBox; import javafx.scene.layout.Priority; public class BongaCamsConfigUI extends AbstractConfigUI { @@ -90,33 +90,45 @@ public class BongaCamsConfigUI extends AbstractConfigUI { Label tabsLabel = new Label("Tabs"); layout.add(tabsLabel, 0, row); - List bcTabs = getBongaTabs(); + List tabs = getBongaTabs(); - HBox checkboxContainer = new HBox(10); + GridPane checkboxGrid = new GridPane(); + checkboxGrid.setHgap(10); + checkboxGrid.setVgap(5); + checkboxGrid.setPadding(new Insets(0, 0, 0, 7)); - CheckBox bcFemale = new CheckBox("Female"); - bcFemale.setSelected(bcTabs.contains("female")); - bcFemale.setOnAction(e -> toggleTabs("female", bcFemale.isSelected())); - HBox.setMargin(bcFemale, new Insets(0, 0, 0, 7)); - checkboxContainer.getChildren().add(bcFemale); + CheckBox female = new CheckBox("Female"); + female.setSelected(tabs.contains("female")); + female.setOnAction(e -> toggleTabs("female", female.isSelected())); + checkboxGrid.add(female, 0, 0); - CheckBox bcMale = new CheckBox("Male"); - bcMale.setSelected(bcTabs.contains("male")); - bcMale.setOnAction(e -> toggleTabs("male", bcMale.isSelected())); - checkboxContainer.getChildren().add(bcMale); + CheckBox male = new CheckBox("Male"); + male.setSelected(tabs.contains("male")); + male.setOnAction(e -> toggleTabs("male", male.isSelected())); + checkboxGrid.add(male, 1, 0); - CheckBox bcCouples = new CheckBox("Couples"); - bcCouples.setSelected(bcTabs.contains("couples")); - bcCouples.setOnAction(e -> toggleTabs("couples", bcCouples.isSelected())); - checkboxContainer.getChildren().add(bcCouples); + CheckBox couples = new CheckBox("Couples"); + couples.setSelected(tabs.contains("couples")); + couples.setOnAction(e -> toggleTabs("couples", couples.isSelected())); + checkboxGrid.add(couples, 2, 0); - CheckBox bcTrans = new CheckBox("Trans"); - bcTrans.setSelected(bcTabs.contains("trans")); - bcTrans.setOnAction(e -> toggleTabs("trans", bcTrans.isSelected())); - checkboxContainer.getChildren().add(bcTrans); + CheckBox trans = new CheckBox("Trans"); + trans.setSelected(tabs.contains("trans")); + trans.setOnAction(e -> toggleTabs("trans", trans.isSelected())); + checkboxGrid.add(trans, 0, 1); - layout.add(checkboxContainer, 1, row, 4, 1); - row++; + CheckBox newModels = new CheckBox("New"); + newModels.setSelected(tabs.contains("new")); + newModels.setOnAction(e -> toggleTabs("new", newModels.isSelected())); + checkboxGrid.add(newModels, 1, 1); + + CheckBox mobile = new CheckBox("Mobile"); + mobile.setSelected(tabs.contains("mobile")); + mobile.setOnAction(e -> toggleTabs("mobile", mobile.isSelected())); + checkboxGrid.add(mobile, 2, 1); + + layout.add(checkboxGrid, 1, row, 3, 2); + row += 2; var createAccount = new Button("Create new Account"); createAccount.setOnAction(e -> DesktopIntegration.open(bongaCams.getAffiliateLink())); diff --git a/client/src/main/java/ctbrec/ui/sites/bonga/BongaCamsTabProvider.java b/client/src/main/java/ctbrec/ui/sites/bonga/BongaCamsTabProvider.java index 4ec6ccb9..7e128a3d 100644 --- a/client/src/main/java/ctbrec/ui/sites/bonga/BongaCamsTabProvider.java +++ b/client/src/main/java/ctbrec/ui/sites/bonga/BongaCamsTabProvider.java @@ -28,28 +28,34 @@ public class BongaCamsTabProvider extends AbstractTabProvider { List tabs = new ArrayList<>(); Map tabMap = new HashMap<>(); + tabMap.put("mobile", "Mobile"); + tabMap.put("new", "New"); tabMap.put("female", "Female"); tabMap.put("male", "Male"); tabMap.put("couple", "Couple"); tabMap.put("trans", "Trans"); List enabledTabs = getBongaTabs(); for (String tab : enabledTabs) { - String url = site.getBaseUrl() + "/tools/listing_v3.php?livetab=" + tab + "&online_only=true&is_mobile=true&limit=72&offset="; + switch (tab) { + case "female": + case "male": + case "couple": + case "trans": + url = site.getBaseUrl() + "/tools/listing_v3.php?livetab=" + tab + "&online_only=true&is_mobile=true&limit=72&offset="; + break; + case "new": + url = site.getBaseUrl() + "/tools/listing_v3.php?livetab=new&online_only=true&is_mobile=true&limit=72&offset="; + break; + case "mobile": + url = site.getBaseUrl() + "/tools/listing_v3.php?livetab=all&online_only=true&tag=mobile-live&limit=72&offset="; + break; + default: + } updateService = new BongaCamsUpdateService((BongaCams) site, url); String title = tabMap.getOrDefault(tab, tab); tabs.add(createTab(title, updateService)); } - // mobile - url = site.getBaseUrl() + "/tools/listing_v3.php?livetab=all&online_only=true&tag=mobile-live&limit=72&offset="; - updateService = new BongaCamsUpdateService((BongaCams) site, url); - tabs.add(createTab("Mobile", updateService)); - - // new - url = site.getBaseUrl() + "/tools/listing_v3.php?livetab=new&online_only=true&is_mobile=true&limit=72&offset="; - updateService = new BongaCamsUpdateService((BongaCams) site, url); - tabs.add(createTab("New", updateService)); - // friends url = site.getBaseUrl() + "/tools/listing_v3.php?livetab=friends&online_only=true&limit=72&offset="; updateService = new BongaCamsUpdateService((BongaCams) site, url, true); diff --git a/client/src/main/java/ctbrec/ui/sites/cam4/Cam4ConfigUI.java b/client/src/main/java/ctbrec/ui/sites/cam4/Cam4ConfigUI.java index 50f36845..e02813e2 100644 --- a/client/src/main/java/ctbrec/ui/sites/cam4/Cam4ConfigUI.java +++ b/client/src/main/java/ctbrec/ui/sites/cam4/Cam4ConfigUI.java @@ -16,7 +16,7 @@ import javafx.scene.control.Label; import javafx.scene.control.PasswordField; import javafx.scene.control.TextField; import javafx.scene.layout.GridPane; -import javafx.scene.layout.HBox; +// import javafx.scene.layout.HBox; import javafx.scene.layout.Priority; public class Cam4ConfigUI extends AbstractConfigUI { @@ -80,26 +80,43 @@ public class Cam4ConfigUI extends AbstractConfigUI { layout.add(tabsLabel, 0, row); List tabs = getCam4Tabs(); - HBox checkboxContainer = new HBox(10); - - CheckBox male = new CheckBox("Male"); - male.setSelected(tabs.contains("male")); - male.setOnAction(e -> toggleTab("male", male.isSelected())); - HBox.setMargin(male, new Insets(0, 0, 0, 7)); - checkboxContainer.getChildren().add(male); + GridPane checkboxGrid = new GridPane(); + checkboxGrid.setHgap(10); + checkboxGrid.setVgap(5); + checkboxGrid.setPadding(new Insets(0, 0, 0, 7)); CheckBox female = new CheckBox("Female"); female.setSelected(tabs.contains("female")); female.setOnAction(e -> toggleTab("female", female.isSelected())); - checkboxContainer.getChildren().add(female); + checkboxGrid.add(female, 0, 0); - CheckBox shemale = new CheckBox("Trans"); - shemale.setSelected(tabs.contains("shemale")); - shemale.setOnAction(e -> toggleTab("shemale", shemale.isSelected())); - checkboxContainer.getChildren().add(shemale); + CheckBox male = new CheckBox("Male"); + male.setSelected(tabs.contains("male")); + male.setOnAction(e -> toggleTab("male", male.isSelected())); + checkboxGrid.add(male, 1, 0); - layout.add(checkboxContainer, 1, row, 4, 1); - row++; + CheckBox couples = new CheckBox("Couples"); + couples.setSelected(tabs.contains("couples")); + couples.setOnAction(e -> toggleTab("couples", couples.isSelected())); + checkboxGrid.add(couples, 2, 0); + + CheckBox trans = new CheckBox("Trans"); + trans.setSelected(tabs.contains("shemale")); + trans.setOnAction(e -> toggleTab("shemale", trans.isSelected())); + checkboxGrid.add(trans, 0, 1); + + CheckBox hdModels = new CheckBox("HD"); + hdModels.setSelected(tabs.contains("hd")); + hdModels.setOnAction(e -> toggleTab("hd", hdModels.isSelected())); + checkboxGrid.add(hdModels, 1, 1); + + CheckBox mobile = new CheckBox("Mobile"); + mobile.setSelected(tabs.contains("mobile")); + mobile.setOnAction(e -> toggleTab("mobile", mobile.isSelected())); + checkboxGrid.add(mobile, 2, 1); + + layout.add(checkboxGrid, 1, row, 3, 2); + row += 2; var createAccount = new Button("Create new Account"); createAccount.setOnAction(e -> DesktopIntegration.open(Cam4.AFFILIATE_LINK)); diff --git a/client/src/main/java/ctbrec/ui/sites/cam4/Cam4TabProvider.java b/client/src/main/java/ctbrec/ui/sites/cam4/Cam4TabProvider.java index 5ba59d00..67a6af99 100644 --- a/client/src/main/java/ctbrec/ui/sites/cam4/Cam4TabProvider.java +++ b/client/src/main/java/ctbrec/ui/sites/cam4/Cam4TabProvider.java @@ -28,15 +28,31 @@ public class Cam4TabProvider extends AbstractTabProvider { tabMap.put("male", "Male"); tabMap.put("female", "Female"); tabMap.put("shemale", "Trans"); + tabMap.put("couples", "Couples"); + tabMap.put("hd", "HD"); + tabMap.put("mobile", "Mobile"); List enabledTabs = getCam4Tabs(); for (String tab : enabledTabs) { String title = tabMap.getOrDefault(tab, tab); - tabs.add(createTab(title, site.getBaseUrl() + "/directoryCams?directoryJson=true&online=true&url=true&orderBy=MOST_VIEWERS&gender=" + tab)); + switch (tab) { + case "female": + case "male": + case "shemale": + tabs.add(createTab(title, site.getBaseUrl() + "/directoryCams?directoryJson=true&online=true&url=true&orderBy=MOST_VIEWERS&gender=" + tab)); + break; + case "couples": + tabs.add(createTab("Couples", site.getBaseUrl() + "/directoryCams?directoryJson=true&online=true&url=true&orderBy=MOST_VIEWERS&broadcastType=male_group&broadcastType=female_group&broadcastType=male_female_group")); + break; + case "hd": + tabs.add(createTab("HD", site.getBaseUrl() + "/directoryCams?directoryJson=true&online=true&url=true&orderBy=VIDEO_QUALITY&gender=female&broadcastType=female_group&broadcastType=solo&broadcastType=male_female_group&hd=true")); + break; + case "mobile": + tabs.add(createTab("Mobile", site.getBaseUrl() + "/directoryCams?directoryJson=true&online=true&url=true&orderBy=MOST_VIEWERS&gender=female&broadcastType=female_group&broadcastType=solo&broadcastType=male_female_group&source=mobile")); + break; + default: + } } - tabs.add(createTab("Couples", site.getBaseUrl() + "/directoryCams?directoryJson=true&online=true&url=true&orderBy=MOST_VIEWERS&broadcastType=male_group&broadcastType=female_group&broadcastType=male_female_group")); - tabs.add(createTab("HD", site.getBaseUrl() + "/directoryCams?directoryJson=true&online=true&url=true&orderBy=VIDEO_QUALITY&gender=female&broadcastType=female_group&broadcastType=solo&broadcastType=male_female_group&hd=true")); - tabs.add(createTab("Mobile", site.getBaseUrl() + "/directoryCams?directoryJson=true&online=true&url=true&orderBy=MOST_VIEWERS&gender=female&broadcastType=female_group&broadcastType=solo&broadcastType=male_female_group&source=mobile")); tabs.add(createTab("New", site.getBaseUrl() + "/directoryCams?directoryJson=true&online=true&url=true&orderBy=MOST_VIEWERS&gender=female&broadcastType=female_group&broadcastType=solo&broadcastType=male_female_group&newPerformer=true")); followed = new Cam4FollowedTab((Cam4) site); diff --git a/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaConfigUI.java b/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaConfigUI.java index c41eadb3..428d2c22 100644 --- a/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaConfigUI.java +++ b/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaConfigUI.java @@ -16,7 +16,7 @@ import javafx.scene.control.Label; import javafx.scene.control.PasswordField; import javafx.scene.control.TextField; import javafx.scene.layout.GridPane; -import javafx.scene.layout.HBox; +// import javafx.scene.layout.HBox; import javafx.scene.layout.Priority; public class CamsodaConfigUI extends AbstractConfigUI { @@ -80,31 +80,43 @@ public class CamsodaConfigUI extends AbstractConfigUI { layout.add(tabsLabel, 0, row); List tabs = getCamsodaTabs(); - HBox checkboxContainer = new HBox(10); - - CheckBox male = new CheckBox("Male"); - male.setSelected(tabs.contains("m")); - male.setOnAction(e -> toggleTab("m", male.isSelected())); - HBox.setMargin(male, new Insets(0, 0, 0, 7)); - checkboxContainer.getChildren().add(male); + GridPane checkboxGrid = new GridPane(); + checkboxGrid.setHgap(10); + checkboxGrid.setVgap(5); + checkboxGrid.setPadding(new Insets(0, 0, 0, 7)); CheckBox female = new CheckBox("Female"); female.setSelected(tabs.contains("f")); female.setOnAction(e -> toggleTab("f", female.isSelected())); - checkboxContainer.getChildren().add(female); + checkboxGrid.add(female, 0, 0); + + CheckBox male = new CheckBox("Male"); + male.setSelected(tabs.contains("m")); + male.setOnAction(e -> toggleTab("m", male.isSelected())); + checkboxGrid.add(male, 1, 0); CheckBox trans = new CheckBox("Trans"); trans.setSelected(tabs.contains("t")); trans.setOnAction(e -> toggleTab("t", trans.isSelected())); - checkboxContainer.getChildren().add(trans); + checkboxGrid.add(trans, 2, 0); CheckBox couples = new CheckBox("Couples"); couples.setSelected(tabs.contains("c")); couples.setOnAction(e -> toggleTab("c", couples.isSelected())); - checkboxContainer.getChildren().add(couples); + checkboxGrid.add(couples, 0, 1); - layout.add(checkboxContainer, 1, row, 4, 1); - row++; + CheckBox isNew = new CheckBox("New"); + isNew.setSelected(tabs.contains("isNew")); + isNew.setOnAction(e -> toggleTab("isNew", isNew.isSelected())); + checkboxGrid.add(isNew, 1, 1); + + CheckBox voyeur = new CheckBox("Voyeur"); + voyeur.setSelected(tabs.contains("isVoyeur")); + voyeur.setOnAction(e -> toggleTab("isVoyeur", voyeur.isSelected())); + checkboxGrid.add(voyeur, 2, 1); + + layout.add(checkboxGrid, 1, row, 3, 2); + row += 2; var createAccount = new Button("Create new Account"); createAccount.setOnAction(e -> DesktopIntegration.open(camsoda.getAffiliateLink())); diff --git a/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaTabProvider.java b/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaTabProvider.java index adf3684d..96f21d1d 100644 --- a/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaTabProvider.java +++ b/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaTabProvider.java @@ -30,21 +30,39 @@ public class CamsodaTabProvider extends AbstractTabProvider { @Override protected List getSiteTabs(Scene scene) { List tabs = new ArrayList<>(); + Map> methodMap = new HashMap<>(); + methodMap.put("isNew", CamsodaModel::isNew); + methodMap.put("isVoyeur", CamsodaModel::isVoyeur); Map tabMap = new HashMap<>(); + tabMap.put("a", "All"); tabMap.put("m", "Male"); tabMap.put("f", "Female"); tabMap.put("c", "Couples"); tabMap.put("t", "Trans"); + tabMap.put("isNew", "New"); + tabMap.put("isVoyeur", "Voyeur"); List enabledTabs = getCamsodaTabs(); for (String tab : enabledTabs) { String title = tabMap.getOrDefault(tab, tab); - tabs.add(createTab(title, API_URL, m -> Objects.equals(tab, m.getGender()))); + switch (tab) { + case "a": + tabs.add(createTab("All", API_URL, m -> true)); + break; + case "m": + case "f": + case "c": + case "t": + tabs.add(createTab(title, API_URL, m -> Objects.equals(tab, m.getGender()))); + break; + default: + if (tab.contains("is")) { + tabs.add(createTab(title, API_URL, methodMap.get(tab))); + } + break; + } } - tabs.add(createTab("All", API_URL, m -> true)); - tabs.add(createTab("New", API_URL, CamsodaModel::isNew)); - tabs.add(createTab("Voyeur", API_URL, CamsodaModel::isVoyeur)); followedTab.setRecorder(recorder); followedTab.setScene(scene); tabs.add(followedTab); diff --git a/client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateApiUpdateService.java b/client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateApiUpdateService.java index 3902d8b5..07d6e9bf 100644 --- a/client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateApiUpdateService.java +++ b/client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateApiUpdateService.java @@ -1,6 +1,6 @@ package ctbrec.ui.sites.chaturbate; -import ctbrec.Config; +// import ctbrec.Config; import ctbrec.Model; import ctbrec.StringUtil; import ctbrec.io.HtmlParser; diff --git a/client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateConfigUi.java b/client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateConfigUi.java index 01f77b97..377a0034 100644 --- a/client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateConfigUi.java +++ b/client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateConfigUi.java @@ -12,7 +12,7 @@ import javafx.geometry.Insets; import javafx.scene.Parent; import javafx.scene.control.*; import javafx.scene.layout.GridPane; -import javafx.scene.layout.HBox; +// import javafx.scene.layout.HBox; import javafx.scene.layout.Priority; public class ChaturbateConfigUi extends AbstractConfigUI { @@ -104,35 +104,97 @@ public class ChaturbateConfigUi extends AbstractConfigUI { GridPane.setColumnSpan(requestThrottle, 2); layout.add(requestThrottle, 1, row++); - Label regionsLabel = new Label("Region Tabs"); - layout.add(regionsLabel, 0, row); - List regions = getChaturbateRegions(); + Label tabsLabel = new Label("Tabs"); + layout.add(tabsLabel, 0, row); + List tabs = getChaturbateTabs(); - HBox checkboxContainer = new HBox(10); + GridPane checkboxGrid = new GridPane(); + checkboxGrid.setHgap(10); + checkboxGrid.setVgap(5); + checkboxGrid.setPadding(new Insets(0, 0, 0, 7)); + + CheckBox female = new CheckBox("Female"); + female.setSelected(tabs.contains("f")); + female.setOnAction(e -> toggleTab("f", female.isSelected())); + checkboxGrid.add(female, 0, 0); + + CheckBox newFemale = new CheckBox("New Female"); + newFemale.setSelected(tabs.contains("nf")); + newFemale.setOnAction(e -> toggleTab("nf", newFemale.isSelected())); + checkboxGrid.add(newFemale, 1, 0); + + CheckBox male = new CheckBox("Male"); + male.setSelected(tabs.contains("m")); + male.setOnAction(e -> toggleTab("m", male.isSelected())); + checkboxGrid.add(male, 2, 0); + + CheckBox newMale = new CheckBox("New Male"); + newMale.setSelected(tabs.contains("nm")); + newMale.setOnAction(e -> toggleTab("nm", newMale.isSelected())); + checkboxGrid.add(newMale, 3, 0); + + CheckBox couples = new CheckBox("Couples"); + couples.setSelected(tabs.contains("c")); + couples.setOnAction(e -> toggleTab("c", couples.isSelected())); + checkboxGrid.add(couples, 0, 1); + + CheckBox trans = new CheckBox("Trans"); + trans.setSelected(tabs.contains("t")); + trans.setOnAction(e -> toggleTab("t", trans.isSelected())); + checkboxGrid.add(trans, 1, 1); + + CheckBox pvt = new CheckBox("Private"); + pvt.setSelected(tabs.contains("xp")); + pvt.setOnAction(e -> toggleTab("xp", pvt.isSelected())); + checkboxGrid.add(pvt, 2, 1); + + CheckBox hidden = new CheckBox("Hidden"); + hidden.setSelected(tabs.contains("xh")); + hidden.setOnAction(e -> toggleTab("xh", hidden.isSelected())); + checkboxGrid.add(hidden, 3, 1); + + CheckBox gaming = new CheckBox("Gaming"); + gaming.setSelected(tabs.contains("xg")); + gaming.setOnAction(e -> toggleTab("xg", gaming.isSelected())); + checkboxGrid.add(gaming, 0, 2); + + CheckBox feat = new CheckBox("Featured"); + feat.setSelected(tabs.contains("ft")); + feat.setOnAction(e -> toggleTab("ft", feat.isSelected())); + checkboxGrid.add(feat, 1, 2); + + CheckBox top = new CheckBox("Top Rated"); + top.setSelected(tabs.contains("ar")); + top.setOnAction(e -> toggleTab("ar", top.isSelected())); + checkboxGrid.add(top, 2, 2); + + CheckBox trend = new CheckBox("Trending"); + trend.setSelected(tabs.contains("at")); + trend.setOnAction(e -> toggleTab("at", trend.isSelected())); + checkboxGrid.add(trend, 3, 2); CheckBox asiaOther = new CheckBox("Asia/Oth"); - asiaOther.setSelected(regions.contains("AS,O")); - asiaOther.setOnAction(e -> toggleRegion("AS,O", asiaOther.isSelected())); - HBox.setMargin(asiaOther, new Insets(0, 0, 0, 7)); - checkboxContainer.getChildren().add(asiaOther); + asiaOther.setSelected(tabs.contains("AS,O")); + asiaOther.setOnAction(e -> toggleTab("AS,O", asiaOther.isSelected())); + checkboxGrid.add(asiaOther, 0, 3); CheckBox euRu = new CheckBox("Eu/Ru"); - euRu.setSelected(regions.contains("ER")); - euRu.setOnAction(e -> toggleRegion("ER", euRu.isSelected())); - checkboxContainer.getChildren().add(euRu); + euRu.setSelected(tabs.contains("ER")); + euRu.setOnAction(e -> toggleTab("ER", euRu.isSelected())); + checkboxGrid.add(euRu, 1, 3); CheckBox nthAm = new CheckBox("Nth Am"); - nthAm.setSelected(regions.contains("NA")); - nthAm.setOnAction(e -> toggleRegion("NA", nthAm.isSelected())); - checkboxContainer.getChildren().add(nthAm); + nthAm.setSelected(tabs.contains("NA")); + nthAm.setOnAction(e -> toggleTab("NA", nthAm.isSelected())); + checkboxGrid.add(nthAm, 2, 3); CheckBox sthAm = new CheckBox("Sth Am"); - sthAm.setSelected(regions.contains("SA")); - sthAm.setOnAction(e -> toggleRegion("SA", sthAm.isSelected())); - checkboxContainer.getChildren().add(sthAm); + sthAm.setSelected(tabs.contains("SA")); + sthAm.setOnAction(e -> toggleTab("SA", sthAm.isSelected())); + checkboxGrid.add(sthAm, 3, 3); - layout.add(checkboxContainer, 1, row, 4, 1); - row++; + layout.add(checkboxGrid, 1, row, 4, 4); + row += 4; var createAccount = new Button("Create new Account"); createAccount.setOnAction(e -> DesktopIntegration.open(Chaturbate.REGISTRATION_LINK)); @@ -155,17 +217,17 @@ public class ChaturbateConfigUi extends AbstractConfigUI { return layout; } - private void toggleRegion(String region, boolean selected) { + private void toggleTab(String region, boolean selected) { var settings = Config.getInstance().getSettings(); if (selected) { - settings.chaturbateRegions.add(region); + settings.chaturbateTabs.add(region); } else { - settings.chaturbateRegions.remove(region); + settings.chaturbateTabs.remove(region); } save(); } - private List getChaturbateRegions() { - return new ArrayList<>(Config.getInstance().getSettings().chaturbateRegions); + private List getChaturbateTabs() { + return new ArrayList<>(Config.getInstance().getSettings().chaturbateTabs); } } diff --git a/client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateTabProvider.java b/client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateTabProvider.java index 8fb217f2..4f2f3869 100644 --- a/client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateTabProvider.java +++ b/client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateTabProvider.java @@ -9,9 +9,10 @@ import javafx.scene.Scene; import javafx.scene.control.Tab; import java.util.ArrayList; -import java.util.HashMap; +// import java.util.HashMap; import java.util.List; -import java.util.Map; +// import java.util.Map; +import java.util.regex.Pattern; public class ChaturbateTabProvider extends AbstractTabProvider { @@ -27,35 +28,75 @@ public class ChaturbateTabProvider extends AbstractTabProvider { @Override protected List getSiteTabs(Scene scene) { List tabs = new ArrayList<>(); - tabs.add(createTab("Featured", apiUrl + "/roomlist/room-list/?enable_recommendations=false")); - tabs.add(createTab("Female", apiUrl + "/roomlist/room-list/?enable_recommendations=false&genders=f")); - tabs.add(createTab("New Female", apiUrl + "/roomlist/room-list/?enable_recommendations=false&genders=f&new_cams=true")); - tabs.add(createTab("Male", apiUrl + "/roomlist/room-list/?enable_recommendations=false&genders=m")); - tabs.add(createTab("New Male", apiUrl + "/roomlist/room-list/?enable_recommendations=false&genders=m&new_cams=true")); - tabs.add(createTab("Couples", apiUrl + "/roomlist/room-list/?enable_recommendations=false&genders=c")); - tabs.add(createTab("Trans", apiUrl + "/roomlist/room-list/?enable_recommendations=false&genders=t")); - tabs.add(createTab("Private", apiUrl + "/roomlist/room-list/?enable_recommendations=false&private=true")); - tabs.add(createTab("Hidden", apiUrl + "/roomlist/room-list/?enable_recommendations=false&hidden=true")); - // tabs.add(createTab("Gaming", apiUrl + "/roomlist/room-list/?enable_recommendations=false&gaming=true")); - Map regionMap = new HashMap<>(); - regionMap.put("AS,O", "Asia/Oth"); - regionMap.put("ER", "Eu/Ru"); - regionMap.put("NA", "Nth Amer"); - regionMap.put("SA", "Sth Amer"); - List enabledRegions = getChaturbateRegions(); - for (String region : enabledRegions) { - String url = apiUrl + "/roomlist/room-list/?regions=" + region; - String title = regionMap.getOrDefault(region, region); - tabs.add(createTab(title, url)); + + for (String tab : getChaturbateTabs()) { + switch (tab) { + case "ft": + tabs.add(createTab("Featured", apiUrl + "/roomlist/room-list/?enable_recommendations=false")); + break; + case "f": + case "m": + case "c": + case "t": + tabs.add(createTab("Female", apiUrl + "/roomlist/room-list/?enable_recommendations=false&genders=" + tab)); + break; + case "nf": + addNewCamsTab(tabs, "New Female", "f"); + break; + case "nm": + addNewCamsTab(tabs, "New Male", "m"); + break; + case "xp": + tabs.add(createTab("Private", apiUrl + "/roomlist/room-list/?enable_recommendations=false&private=true")); + break; + case "xh": + tabs.add(createTab("Hidden", apiUrl + "/roomlist/room-list/?enable_recommendations=false&hidden=true")); + break; + case "xg": + tabs.add(createTab("Gaming", apiUrl + "/roomlist/room-list/?enable_recommendations=false&gaming=true")); + break; + case "ar": + tabs.add(createApiTab("Top Rated", apiUrl + "/discover/carousels/top-rated/")); + break; + case "at": + tabs.add(createApiTab("Trending", apiUrl + "/discover/carousels/trending/")); + break; + default: + if (Pattern.matches("^[A-Z].+", tab)) { + addRegionBasedTab(tabs, tab); + } + break; + } } - followedTab.setScene(scene); - followedTab.setRecorder(recorder); - followedTab.setImageAspectRatio(9.0 / 16.0); - tabs.add(followedTab); - // tabs.add(createApiTab("Top Rated", apiUrl + "/discover/carousels/top-rated/")); - // tabs.add(createApiTab("Trending", apiUrl + "/discover/carousels/trending/")); + return tabs; } + + private void addNewCamsTab(List tabs, String title, String gender) { + tabs.add(createTab(title, apiUrl + "/roomlist/room-list/?enable_recommendations=false&genders=" + gender + "&new_cams=true")); + } + + private void addRegionBasedTab(List tabs, String regionCode) { + String regions = getRegionTitle(regionCode); + if (regions != null) { + tabs.add(createTab(regions, apiUrl + "/roomlist/room-list/?enable_recommendations=false®ions=" + regionCode)); + } + } + + private String getRegionTitle(String regionCode) { + switch (regionCode) { + case "AS,O": + return "Asia/Oth"; + case "ER": + return "Eu/Ru"; + case "NA": + return "Nth Amer"; + case "SA": + return "Sth Amer"; + default: + return null; + } + } @Override public Tab getFollowedTab() { @@ -74,12 +115,12 @@ public class ChaturbateTabProvider extends AbstractTabProvider { return tab; } - // private Tab createApiTab(String title, String apiUrl) { - // var updateService = new ChaturbateApiUpdateService(apiUrl, (Chaturbate) site); - // return createTab(title, updateService); - // } + private Tab createApiTab(String title, String apiUrl) { + var updateService = new ChaturbateApiUpdateService(apiUrl, (Chaturbate) site); + return createTab(title, updateService); + } - private List getChaturbateRegions() { - return new ArrayList<>(Config.getInstance().getSettings().chaturbateRegions); + private List getChaturbateTabs() { + return new ArrayList<>(Config.getInstance().getSettings().chaturbateTabs); } } diff --git a/client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateUpdateService.java b/client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateUpdateService.java index 90c8e7c0..f9018318 100644 --- a/client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateUpdateService.java +++ b/client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateUpdateService.java @@ -1,6 +1,6 @@ package ctbrec.ui.sites.chaturbate; -import ctbrec.Config; +// import ctbrec.Config; import ctbrec.Model; import ctbrec.sites.chaturbate.Chaturbate; import ctbrec.sites.chaturbate.ChaturbateModel; diff --git a/client/src/main/java/ctbrec/ui/sites/dreamcam/DreamcamConfigUI.java b/client/src/main/java/ctbrec/ui/sites/dreamcam/DreamcamConfigUI.java index 5e8f738c..cec6f084 100644 --- a/client/src/main/java/ctbrec/ui/sites/dreamcam/DreamcamConfigUI.java +++ b/client/src/main/java/ctbrec/ui/sites/dreamcam/DreamcamConfigUI.java @@ -63,17 +63,17 @@ public class DreamcamConfigUI extends AbstractConfigUI { HBox checkboxContainer = new HBox(10); - CheckBox male = new CheckBox("Boys"); - male.setSelected(tabs.contains("men")); - male.setOnAction(e -> toggleTab("men", male.isSelected())); - HBox.setMargin(male, new Insets(0, 0, 0, 7)); - checkboxContainer.getChildren().add(male); - CheckBox female = new CheckBox("Girls"); female.setSelected(tabs.contains("girls")); female.setOnAction(e -> toggleTab("girls", female.isSelected())); + HBox.setMargin(female, new Insets(0, 0, 0, 7)); checkboxContainer.getChildren().add(female); + CheckBox male = new CheckBox("Boys"); + male.setSelected(tabs.contains("men")); + male.setOnAction(e -> toggleTab("men", male.isSelected())); + checkboxContainer.getChildren().add(male); + CheckBox couples = new CheckBox("Couples"); couples.setSelected(tabs.contains("couples")); couples.setOnAction(e -> toggleTab("couples", couples.isSelected())); diff --git a/client/src/main/java/ctbrec/ui/sites/showup/ShowupConfigUI.java b/client/src/main/java/ctbrec/ui/sites/showup/ShowupConfigUI.java index 905568eb..8e3c093b 100644 --- a/client/src/main/java/ctbrec/ui/sites/showup/ShowupConfigUI.java +++ b/client/src/main/java/ctbrec/ui/sites/showup/ShowupConfigUI.java @@ -1,5 +1,8 @@ package ctbrec.ui.sites.showup; +import java.util.ArrayList; +import java.util.List; + import ctbrec.Config; import ctbrec.sites.showup.Showup; import ctbrec.ui.DesktopIntegration; @@ -13,6 +16,7 @@ import javafx.scene.control.Label; import javafx.scene.control.PasswordField; import javafx.scene.control.TextField; import javafx.scene.layout.GridPane; +import javafx.scene.layout.HBox; import javafx.scene.layout.Priority; public class ShowupConfigUI extends AbstractConfigUI { @@ -72,6 +76,31 @@ public class ShowupConfigUI extends AbstractConfigUI { GridPane.setColumnSpan(password, 2); layout.add(password, 1, row++); + Label tabsLabel = new Label("Tabs"); + layout.add(tabsLabel, 0, row); + List tabs = getShowupTabs(); + + HBox checkboxContainer = new HBox(10); + + CheckBox female = new CheckBox("Female"); + female.setSelected(tabs.contains("female")); + female.setOnAction(e -> toggleTab("female", female.isSelected())); + HBox.setMargin(female, new Insets(0, 0, 0, 8)); + checkboxContainer.getChildren().add(female); + + CheckBox male = new CheckBox("Male"); + male.setSelected(tabs.contains("m")); + male.setOnAction(e -> toggleTab("m", male.isSelected())); + checkboxContainer.getChildren().add(male); + + CheckBox all = new CheckBox("All"); + all.setSelected(tabs.contains("all")); + all.setOnAction(e -> toggleTab("all", all.isSelected())); + checkboxContainer.getChildren().add(all); + + layout.add(checkboxContainer, 1, row, 3, 1); + row++; + var createAccount = new Button("Create new Account"); createAccount.setOnAction(e -> DesktopIntegration.open(site.getAffiliateLink())); layout.add(createAccount, 1, row++); @@ -89,4 +118,18 @@ public class ShowupConfigUI extends AbstractConfigUI { return layout; } + private void toggleTab(String tab, boolean selected) { + var settings = Config.getInstance().getSettings(); + if (selected) { + settings.showupTabs.add(tab); + } else { + settings.showupTabs.remove(tab); + } + save(); + } + + private List getShowupTabs() { + return new ArrayList<>(Config.getInstance().getSettings().showupTabs); + } + } diff --git a/client/src/main/java/ctbrec/ui/sites/showup/ShowupTabProvider.java b/client/src/main/java/ctbrec/ui/sites/showup/ShowupTabProvider.java index 241bb25b..27f16a06 100644 --- a/client/src/main/java/ctbrec/ui/sites/showup/ShowupTabProvider.java +++ b/client/src/main/java/ctbrec/ui/sites/showup/ShowupTabProvider.java @@ -1,5 +1,6 @@ package ctbrec.ui.sites.showup; +import ctbrec.Config; import ctbrec.sites.showup.Showup; import ctbrec.ui.sites.AbstractTabProvider; import ctbrec.ui.tabs.ThumbOverviewTab; @@ -7,7 +8,10 @@ import javafx.scene.Scene; import javafx.scene.control.Tab; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; +// import java.util.Objects; public class ShowupTabProvider extends AbstractTabProvider { @@ -18,9 +22,17 @@ public class ShowupTabProvider extends AbstractTabProvider { @Override protected List getSiteTabs(Scene scene) { List tabs = new ArrayList<>(); - tabs.add(createTab("Women", "female")); - tabs.add(createTab("Men", "male")); - tabs.add(createTab("All", "all")); + + Map tabMap = new HashMap<>(); + tabMap.put("female", "Women"); + tabMap.put("male", "Men"); + tabMap.put("all", "All"); + List enabledTabs = getShowupTabs(); + for (String tab : enabledTabs) { + String title = tabMap.getOrDefault(tab, tab); + tabs.add(createTab(title, tab)); + } + var showupFollowedTab = new ShowupFollowedTab("Favorites", (Showup) site); showupFollowedTab.setRecorder(site.getRecorder()); tabs.add(showupFollowedTab); @@ -38,4 +50,8 @@ public class ShowupTabProvider extends AbstractTabProvider { tab.setRecorder(site.getRecorder()); return tab; } + private List getShowupTabs() { + return new ArrayList<>(Config.getInstance().getSettings().showupTabs); + } + } diff --git a/client/src/main/java/ctbrec/ui/sites/streamate/StreamateConfigUI.java b/client/src/main/java/ctbrec/ui/sites/streamate/StreamateConfigUI.java index 5de1c327..6ee5c3e2 100644 --- a/client/src/main/java/ctbrec/ui/sites/streamate/StreamateConfigUI.java +++ b/client/src/main/java/ctbrec/ui/sites/streamate/StreamateConfigUI.java @@ -1,5 +1,8 @@ package ctbrec.ui.sites.streamate; +import java.util.ArrayList; +import java.util.List; + import ctbrec.Config; import ctbrec.sites.streamate.Streamate; import ctbrec.ui.DesktopIntegration; @@ -13,6 +16,7 @@ import javafx.scene.control.Label; import javafx.scene.control.PasswordField; import javafx.scene.control.TextField; import javafx.scene.layout.GridPane; +// import javafx.scene.layout.HBox; import javafx.scene.layout.Priority; public class StreamateConfigUI extends AbstractConfigUI { @@ -72,6 +76,48 @@ public class StreamateConfigUI extends AbstractConfigUI { GridPane.setColumnSpan(password, 2); layout.add(password, 1, row++); + Label tabsLabel = new Label("Tabs"); + layout.add(tabsLabel, 0, row); + List tabs = getStreamateTabs(); + + GridPane checkboxGrid = new GridPane(); + checkboxGrid.setHgap(10); + checkboxGrid.setVgap(5); + checkboxGrid.setPadding(new Insets(0, 0, 0, 7)); + + CheckBox female = new CheckBox("Girls"); + female.setSelected(tabs.contains("f,ff")); + female.setOnAction(e -> toggleTab("f,ff", female.isSelected())); + checkboxGrid.add(female, 0, 0); + + CheckBox male = new CheckBox("Guys"); + male.setSelected(tabs.contains("m")); + male.setOnAction(e -> toggleTab("m", male.isSelected())); + checkboxGrid.add(male, 1, 0); + + CheckBox couples = new CheckBox("Couples"); + couples.setSelected(tabs.contains("mf,mm")); + couples.setOnAction(e -> toggleTab("mf,mm", couples.isSelected())); + checkboxGrid.add(couples, 2, 0); + + CheckBox trans = new CheckBox("Trans"); + trans.setSelected(tabs.contains("tm2f,tf2m")); + trans.setOnAction(e -> toggleTab("tm2f,tf2m", trans.isSelected())); + checkboxGrid.add(trans, 0, 1); + + CheckBox newGirls = new CheckBox("Girls New"); + newGirls.setSelected(tabs.contains("fn")); + newGirls.setOnAction(e -> toggleTab("fn", newGirls.isSelected())); + checkboxGrid.add(newGirls, 1, 1); + + CheckBox newModels = new CheckBox("New"); + newModels.setSelected(tabs.contains("new")); + newModels.setOnAction(e -> toggleTab("new", newModels.isSelected())); + checkboxGrid.add(newModels, 2, 1); + + layout.add(checkboxGrid, 1, row, 3, 2); + row += 2; + var createAccount = new Button("Create new Account"); createAccount.setOnAction(e -> DesktopIntegration.open(streamate.getAffiliateLink())); layout.add(createAccount, 1, row++); @@ -89,4 +135,18 @@ public class StreamateConfigUI extends AbstractConfigUI { return layout; } + private void toggleTab(String tab, boolean selected) { + var settings = Config.getInstance().getSettings(); + if (selected) { + settings.streamateTabs.add(tab); + } else { + settings.streamateTabs.remove(tab); + } + save(); + } + + private List getStreamateTabs() { + return new ArrayList<>(Config.getInstance().getSettings().streamateTabs); + } + } diff --git a/client/src/main/java/ctbrec/ui/sites/streamate/StreamateTabProvider.java b/client/src/main/java/ctbrec/ui/sites/streamate/StreamateTabProvider.java index d48348d6..57959d8b 100644 --- a/client/src/main/java/ctbrec/ui/sites/streamate/StreamateTabProvider.java +++ b/client/src/main/java/ctbrec/ui/sites/streamate/StreamateTabProvider.java @@ -1,5 +1,6 @@ package ctbrec.ui.sites.streamate; +import ctbrec.Config; import ctbrec.sites.streamate.Streamate; import ctbrec.ui.sites.AbstractTabProvider; import ctbrec.ui.tabs.ThumbOverviewTab; @@ -7,7 +8,9 @@ import javafx.scene.Scene; import javafx.scene.control.Tab; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; public class StreamateTabProvider extends AbstractTabProvider { private ThumbOverviewTab followedTab; @@ -19,12 +22,35 @@ public class StreamateTabProvider extends AbstractTabProvider { @Override protected List getSiteTabs(Scene scene) { List tabs = new ArrayList<>(); - tabs.add(createTab("Girls", Streamate.NAIAD_URL + "/performers?domain=streamate.com&loggedInRec=1&boostedFilters=&country=US&language=en&index=default&filters=gender:f,ff%3Bonline:true")); - tabs.add(createTab("Girls New", Streamate.NAIAD_URL + "/performers?domain=streamate.com&loggedInRec=1&boostedFilters=&country=US&language=en&index=default&filters=gender:f,ff%3Bnew:true%3Bonline:true")); - tabs.add(createTab("Guys", Streamate.NAIAD_URL + "/performers?domain=streamate.com&loggedInRec=1&boostedFilters=&country=US&language=en&index=default&filters=gender:m%3Bonline:true")); - tabs.add(createTab("Couples", Streamate.NAIAD_URL + "/performers?domain=streamate.com&loggedInRec=1&boostedFilters=&country=US&language=en&index=default&filters=gender:mf,mm,g%3Bonline:true")); - tabs.add(createTab("Trans", Streamate.NAIAD_URL + "/performers?domain=streamate.com&loggedInRec=1&boostedFilters=&country=US&language=en&index=default&filters=gender:tm2f,tf2m%3Bonline:true")); - tabs.add(createTab("New", Streamate.NAIAD_URL + "/performers?domain=streamate.com&loggedInRec=1&boostedFilters=&country=US&language=en&index=default&filters=new:true%3Bonline:true")); + + + Map tabMap = new HashMap<>(); + tabMap.put("f,ff", "Girls"); + tabMap.put("m", "Guys"); + tabMap.put("mf,mm", "Couples"); + tabMap.put("tm2f,tf2m", "Trans"); + tabMap.put("fn", "Girls New"); + tabMap.put("new", "New"); + List enabledTabs = getStreamateTabs(); + for (String tab : enabledTabs) { + String title = tabMap.getOrDefault(tab, tab); + switch (tab) { + case "f,ff": + case "m": + case "mf,mm": + case "tm2f,tf2m": + tabs.add(createTab(title, Streamate.NAIAD_URL + "/performers?domain=streamate.com&loggedInRec=1&boostedFilters=&country=US&language=en&index=default&filters=gender:" + tab + "%3Bonline:true")); + break; + case "fn": + tabs.add(createTab("Girls New", Streamate.NAIAD_URL + "/performers?domain=streamate.com&loggedInRec=1&boostedFilters=&country=US&language=en&index=default&filters=gender:f,ff%3Bonline:true%3Bnew:true")); + break; + case "new": + tabs.add(createTab("New", Streamate.NAIAD_URL + "/performers?domain=streamate.com&loggedInRec=1&boostedFilters=&country=US&language=en&index=default&filters=new:true%3Bonline:true")); + break; + default: + } + + } followedTab = new StreamateFollowedTab((Streamate) site); followedTab.setRecorder(recorder); @@ -44,4 +70,9 @@ public class StreamateTabProvider extends AbstractTabProvider { tab.setRecorder(recorder); return tab; } + + private List getStreamateTabs() { + return new ArrayList<>(Config.getInstance().getSettings().streamateTabs); + } + } diff --git a/client/src/main/java/ctbrec/ui/sites/streamray/StreamrayConfigUI.java b/client/src/main/java/ctbrec/ui/sites/streamray/StreamrayConfigUI.java index 3cc33e35..be2b75ec 100644 --- a/client/src/main/java/ctbrec/ui/sites/streamray/StreamrayConfigUI.java +++ b/client/src/main/java/ctbrec/ui/sites/streamray/StreamrayConfigUI.java @@ -1,17 +1,21 @@ package ctbrec.ui.sites.streamray; +import java.util.ArrayList; +import java.util.List; + import ctbrec.Config; import ctbrec.sites.streamray.Streamray; import ctbrec.ui.settings.SettingsTab; import ctbrec.ui.sites.AbstractConfigUI; import javafx.geometry.Insets; import javafx.scene.Parent; -import javafx.scene.control.ToggleGroup; +// import javafx.scene.control.ToggleGroup; import javafx.scene.control.Button; import javafx.scene.control.CheckBox; -import javafx.scene.control.RadioButton; +// import javafx.scene.control.RadioButton; import javafx.scene.control.Label; import javafx.scene.layout.GridPane; +// import javafx.scene.layout.HBox; import javafx.scene.layout.HBox; public class StreamrayConfigUI extends AbstractConfigUI { @@ -55,6 +59,31 @@ public class StreamrayConfigUI extends AbstractConfigUI { layout.add(cb, 1, row++); row++; + Label tabsLabel = new Label("Tabs"); + layout.add(tabsLabel, 0, row); + List tabs = getStreamrayTabs(); + + HBox checkboxContainer = new HBox(10); + + CheckBox female = new CheckBox("Female"); + female.setSelected(tabs.contains("F")); + female.setOnAction(e -> toggleTab("F", female.isSelected())); + HBox.setMargin(female, new Insets(0, 0, 0, 7)); + checkboxContainer.getChildren().add(female); + + CheckBox male = new CheckBox("Male"); + male.setSelected(tabs.contains("M")); + male.setOnAction(e -> toggleTab("M", male.isSelected())); + checkboxContainer.getChildren().add(male); + + CheckBox all = new CheckBox("Trans"); + all.setSelected(tabs.contains("TS")); + all.setOnAction(e -> toggleTab("TS", all.isSelected())); + checkboxContainer.getChildren().add(all); + + layout.add(checkboxContainer, 1, row, 4, 1); + row++; + var deleteCookies = new Button("Delete Cookies"); deleteCookies.setOnAction(e -> site.getHttpClient().clearCookies()); layout.add(deleteCookies, 1, row); @@ -64,4 +93,18 @@ public class StreamrayConfigUI extends AbstractConfigUI { return layout; } + private void toggleTab(String tab, boolean selected) { + var settings = Config.getInstance().getSettings(); + if (selected) { + settings.streamrayTabs.add(tab); + } else { + settings.streamrayTabs.remove(tab); + } + save(); + } + + private List getStreamrayTabs() { + return new ArrayList<>(Config.getInstance().getSettings().streamrayTabs); + } + } diff --git a/client/src/main/java/ctbrec/ui/sites/streamray/StreamrayTabProvider.java b/client/src/main/java/ctbrec/ui/sites/streamray/StreamrayTabProvider.java index 8e1d41ce..2c555d03 100644 --- a/client/src/main/java/ctbrec/ui/sites/streamray/StreamrayTabProvider.java +++ b/client/src/main/java/ctbrec/ui/sites/streamray/StreamrayTabProvider.java @@ -1,5 +1,6 @@ package ctbrec.ui.sites.streamray; +import ctbrec.Config; import ctbrec.sites.streamray.Streamray; import ctbrec.sites.streamray.StreamrayModel; import ctbrec.ui.sites.AbstractTabProvider; @@ -8,7 +9,9 @@ import javafx.scene.Scene; import javafx.scene.control.Tab; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.function.Predicate; @@ -24,9 +27,20 @@ public class StreamrayTabProvider extends AbstractTabProvider { @Override protected List getSiteTabs(Scene scene) { List tabs = new ArrayList<>(); - tabs.add(createTab("Girls", m -> Objects.equals("F", m.getGender()))); - tabs.add(createTab("Boys", m -> Objects.equals("M", m.getGender()))); - tabs.add(createTab("Trans", m -> Objects.equals("TS", m.getGender()))); + + Map tabMap = new HashMap<>(); + tabMap.put("F", "Female"); + tabMap.put("M", "Male"); + tabMap.put("TS", "Trans"); + List enabledTabs = getStreamrayTabs(); + for (String tab : enabledTabs) { + String title = tabMap.getOrDefault(tab, tab); + tabs.add(createTab(title, m -> Objects.equals(tab, m.getGender()))); + } + + // tabs.add(createTab("Girls", m -> Objects.equals("F", m.getGender()))); + // tabs.add(createTab("Boys", m -> Objects.equals("M", m.getGender()))); + // tabs.add(createTab("Trans", m -> Objects.equals("TS", m.getGender()))); tabs.add(createTab("New", StreamrayModel::isNew)); tabs.add(followedTab); return tabs; @@ -52,4 +66,8 @@ public class StreamrayTabProvider extends AbstractTabProvider { public Tab getFollowedTab() { return followedTab; } + private List getStreamrayTabs() { + return new ArrayList<>(Config.getInstance().getSettings().streamrayTabs); + } + } diff --git a/client/src/main/java/ctbrec/ui/sites/stripchat/StripchatConfigUI.java b/client/src/main/java/ctbrec/ui/sites/stripchat/StripchatConfigUI.java index cfcf50c7..8d3180b6 100644 --- a/client/src/main/java/ctbrec/ui/sites/stripchat/StripchatConfigUI.java +++ b/client/src/main/java/ctbrec/ui/sites/stripchat/StripchatConfigUI.java @@ -1,5 +1,8 @@ package ctbrec.ui.sites.stripchat; +import java.util.ArrayList; +import java.util.List; + import ctbrec.Config; import ctbrec.sites.stripchat.Stripchat; import ctbrec.ui.DesktopIntegration; @@ -113,6 +116,58 @@ public class StripchatConfigUI extends AbstractConfigUI { GridPane.setColumnSpan(password, 2); layout.add(password, 1, row++); + Label tabsLabel = new Label("Tabs"); + layout.add(tabsLabel, 0, row); + List tabs = getStripchatTabs(); + + GridPane checkboxGrid = new GridPane(); + checkboxGrid.setHgap(10); + checkboxGrid.setVgap(5); + checkboxGrid.setPadding(new Insets(0, 0, 0, 7)); + + CheckBox girls = new CheckBox("Girls"); + girls.setSelected(tabs.contains("girls")); + girls.setOnAction(e -> toggleTab("girls", girls.isSelected())); + checkboxGrid.add(girls, 0, 0); + + CheckBox girlsNew = new CheckBox("Girls New"); + girlsNew.setSelected(tabs.contains("autoTagNew")); + girlsNew.setOnAction(e -> toggleTab("autoTagNew", girlsNew.isSelected())); + checkboxGrid.add(girlsNew, 1, 0); + + CheckBox girlsHD = new CheckBox("Girls HD"); + girlsHD.setSelected(tabs.contains("autoTagHd")); + girlsHD.setOnAction(e -> toggleTab("autoTagHd", girlsHD.isSelected())); + checkboxGrid.add(girlsHD, 2, 0); + + CheckBox mobile = new CheckBox("Mobile"); + mobile.setSelected(tabs.contains("mobile")); + mobile.setOnAction(e -> toggleTab("mobile", mobile.isSelected())); + checkboxGrid.add(mobile, 3, 0); + + CheckBox pvt = new CheckBox("Private"); + pvt.setSelected(tabs.contains("autoTagSpy")); + pvt.setOnAction(e -> toggleTab("autoTagSpy", pvt.isSelected())); + checkboxGrid.add(pvt, 0, 1); + + CheckBox couples = new CheckBox("Couples"); + couples.setSelected(tabs.contains("couples")); + couples.setOnAction(e -> toggleTab("couples", couples.isSelected())); + checkboxGrid.add(couples, 1, 1); + + CheckBox boys = new CheckBox("Boys"); + boys.setSelected(tabs.contains("men")); + boys.setOnAction(e -> toggleTab("men", boys.isSelected())); + checkboxGrid.add(boys, 2, 1); + + CheckBox trans = new CheckBox("Trans"); + trans.setSelected(tabs.contains("trans")); + trans.setOnAction(e -> toggleTab("trans", trans.isSelected())); + checkboxGrid.add(trans, 3, 1); + + layout.add(checkboxGrid, 1, row, 4, 2); + row += 2; + var createAccount = new Button("Create new Account"); createAccount.setOnAction(e -> DesktopIntegration.open(stripchat.getAffiliateLink())); layout.add(createAccount, 1, row++); @@ -142,4 +197,18 @@ public class StripchatConfigUI extends AbstractConfigUI { return layout; } + private void toggleTab(String tab, boolean selected) { + var settings = Config.getInstance().getSettings(); + if (selected) { + settings.stripchatTabs.add(tab); + } else { + settings.stripchatTabs.remove(tab); + } + save(); + } + + private List getStripchatTabs() { + return new ArrayList<>(Config.getInstance().getSettings().stripchatTabs); + } + } diff --git a/client/src/main/java/ctbrec/ui/sites/stripchat/StripchatTabProvider.java b/client/src/main/java/ctbrec/ui/sites/stripchat/StripchatTabProvider.java index 694e5e50..bee6d5eb 100644 --- a/client/src/main/java/ctbrec/ui/sites/stripchat/StripchatTabProvider.java +++ b/client/src/main/java/ctbrec/ui/sites/stripchat/StripchatTabProvider.java @@ -1,5 +1,6 @@ package ctbrec.ui.sites.stripchat; +import ctbrec.Config; import ctbrec.sites.stripchat.Stripchat; import ctbrec.ui.sites.AbstractTabProvider; import ctbrec.ui.tabs.ThumbOverviewTab; @@ -8,7 +9,10 @@ import javafx.scene.control.Tab; import java.text.MessageFormat; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; +// import java.util.Objects; public class StripchatTabProvider extends AbstractTabProvider { @@ -26,15 +30,29 @@ public class StripchatTabProvider extends AbstractTabProvider { @Override protected List getSiteTabs(Scene scene) { List tabs = new ArrayList<>(); - tabs.add(createTab("Girls", MessageFormat.format(urlTemplate, "girls"))); - tabs.add(createTab("Girls New", MessageFormat.format(urlFilterTemplate, "autoTagNew"))); - tabs.add(createTab("Girls HD", MessageFormat.format(urlFilterTemplate, "autoTagHd"))); + + Map tabMap = new HashMap<>(); + tabMap.put("girls", "Girls"); + tabMap.put("autoTagNew", "Girls New"); + tabMap.put("autoTagHd", "Girls HD"); + // tabMap.put("autoTagVr", "Girls VR"); + tabMap.put("mobile", "Mobile"); + tabMap.put("autoTagSpy", "Private"); + tabMap.put("couples", "Couples"); + tabMap.put("men", "Boys"); + tabMap.put("trans", "Trans"); + List enabledTabs = getStripchatTabs(); + for (String tab : enabledTabs) { + String title = tabMap.getOrDefault(tab, tab); + if (tab.contains("auto")) { + tabs.add(createTab(title, MessageFormat.format(urlFilterTemplate, tab))); + } else { + tabs.add(createTab(title, MessageFormat.format(urlTemplate, tab))); + } + + } tabs.add(createTab("Girls VR", MessageFormat.format(urlFilterTemplate, "autoTagVr"))); - tabs.add(createTab("Mobile", MessageFormat.format(urlFilterTemplate, "mobile"))); - tabs.add(createTab("Private", MessageFormat.format(urlFilterTemplate, "autoTagSpy"))); - tabs.add(createTab("Couples", MessageFormat.format(urlTemplate, "couples"))); - tabs.add(createTab("Boys", MessageFormat.format(urlTemplate, "men"))); - tabs.add(createTab("Trans", MessageFormat.format(urlTemplate, "trans"))); + followedTab.setRecorder(recorder); followedTab.setScene(scene); followedTab.setImageAspectRatio(9.0 / 16.0); @@ -55,4 +73,8 @@ public class StripchatTabProvider extends AbstractTabProvider { return tab; } + private List getStripchatTabs() { + return new ArrayList<>(Config.getInstance().getSettings().stripchatTabs); + } + } diff --git a/client/src/main/java/ctbrec/ui/sites/xlovecam/XloveCamConfigUI.java b/client/src/main/java/ctbrec/ui/sites/xlovecam/XloveCamConfigUI.java index b52d460c..0e7e9b07 100644 --- a/client/src/main/java/ctbrec/ui/sites/xlovecam/XloveCamConfigUI.java +++ b/client/src/main/java/ctbrec/ui/sites/xlovecam/XloveCamConfigUI.java @@ -1,5 +1,8 @@ package ctbrec.ui.sites.xlovecam; +import java.util.ArrayList; +import java.util.List; + import ctbrec.Config; import ctbrec.sites.xlovecam.XloveCam; import ctbrec.ui.DesktopIntegration; @@ -72,6 +75,53 @@ public class XloveCamConfigUI extends AbstractConfigUI { GridPane.setColumnSpan(password, 2); layout.add(password, 1, row++); + Label tabsLabel = new Label("Tabs"); + layout.add(tabsLabel, 0, row); + List tabs = getXlovecamTabs(); + + GridPane checkboxGrid = new GridPane(); + checkboxGrid.setHgap(10); + checkboxGrid.setVgap(5); + checkboxGrid.setPadding(new Insets(0, 0, 0, 7)); + + CheckBox girls = new CheckBox("Young Women"); + girls.setSelected(tabs.contains("1")); + girls.setOnAction(e -> toggleTab("1", girls.isSelected())); + checkboxGrid.add(girls, 0, 0); + + CheckBox ladies = new CheckBox("Ladies"); + ladies.setSelected(tabs.contains("13")); + ladies.setOnAction(e -> toggleTab("13", ladies.isSelected())); + checkboxGrid.add(ladies, 1, 0); + + CheckBox mature = new CheckBox("Mature Female"); + mature.setSelected(tabs.contains("6")); + mature.setOnAction(e -> toggleTab("6", mature.isSelected())); + checkboxGrid.add(mature, 2, 0); + + CheckBox couples = new CheckBox("Couples"); + couples.setSelected(tabs.contains("2")); + couples.setOnAction(e -> toggleTab("2", couples.isSelected())); + checkboxGrid.add(couples, 3, 0); + + CheckBox lesbian = new CheckBox("Lesbian"); + lesbian.setSelected(tabs.contains("3")); + lesbian.setOnAction(e -> toggleTab("3", lesbian.isSelected())); + checkboxGrid.add(lesbian, 0, 1); + + CheckBox male = new CheckBox("Male"); + male.setSelected(tabs.contains("7")); + male.setOnAction(e -> toggleTab("7", male.isSelected())); + checkboxGrid.add(male, 1, 1); + + CheckBox trans = new CheckBox("Trans"); + trans.setSelected(tabs.contains("5")); + trans.setOnAction(e -> toggleTab("5", trans.isSelected())); + checkboxGrid.add(trans, 2, 1); + + layout.add(checkboxGrid, 1, row, 4, 2); + row += 2; + var createAccount = new Button("Create new Account"); createAccount.setOnAction(e -> DesktopIntegration.open(site.getAffiliateLink())); layout.add(createAccount, 1, row++); @@ -89,4 +139,18 @@ public class XloveCamConfigUI extends AbstractConfigUI { return layout; } + private void toggleTab(String tab, boolean selected) { + var settings = Config.getInstance().getSettings(); + if (selected) { + settings.xlovecamTabs.add(tab); + } else { + settings.xlovecamTabs.remove(tab); + } + save(); + } + + private List getXlovecamTabs() { + return new ArrayList<>(Config.getInstance().getSettings().xlovecamTabs); + } + } diff --git a/client/src/main/java/ctbrec/ui/sites/xlovecam/XloveCamTabProvider.java b/client/src/main/java/ctbrec/ui/sites/xlovecam/XloveCamTabProvider.java index 7c033303..79daed9a 100644 --- a/client/src/main/java/ctbrec/ui/sites/xlovecam/XloveCamTabProvider.java +++ b/client/src/main/java/ctbrec/ui/sites/xlovecam/XloveCamTabProvider.java @@ -1,5 +1,6 @@ package ctbrec.ui.sites.xlovecam; +import ctbrec.Config; import ctbrec.sites.xlovecam.XloveCam; import ctbrec.ui.sites.AbstractTabProvider; import ctbrec.ui.tabs.PaginatedScheduledService; @@ -9,8 +10,10 @@ import javafx.scene.control.Tab; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; +// import java.util.Objects; public class XloveCamTabProvider extends AbstractTabProvider { @@ -36,33 +39,20 @@ public class XloveCamTabProvider extends AbstractTabProvider { updateService = new XloveCamUpdateService(xloveCam, Map.of(FILTER_PARAM_NEW, "3")); tabs.add(createTab("New", updateService)); - // Young Women - updateService = new XloveCamUpdateService(xloveCam, Map.of(FILTER_PARAM, "1")); - tabs.add(createTab("Young Women", updateService)); - - // Ladies - updateService = new XloveCamUpdateService(xloveCam, Map.of(FILTER_PARAM, "13")); - tabs.add(createTab("Ladies", updateService)); - - // Mature - updateService = new XloveCamUpdateService(xloveCam, Map.of(FILTER_PARAM, "6")); - tabs.add(createTab("Mature Female", updateService)); - - // Couples - updateService = new XloveCamUpdateService(xloveCam, Map.of(FILTER_PARAM, "2")); - tabs.add(createTab("Couples", updateService)); - - // Lesbian - updateService = new XloveCamUpdateService(xloveCam, Map.of(FILTER_PARAM, "3")); - tabs.add(createTab("Lesbian", updateService)); - - // Male - updateService = new XloveCamUpdateService(xloveCam, Map.of(FILTER_PARAM, "7")); - tabs.add(createTab("Male", updateService)); - - // Trans - updateService = new XloveCamUpdateService(xloveCam, Map.of(FILTER_PARAM, "5")); - tabs.add(createTab("Trans", updateService)); + Map tabMap = new HashMap<>(); + tabMap.put("1", "Young Women"); + tabMap.put("13", "Ladies"); + tabMap.put("6", "Mature Female"); + tabMap.put("2", "Couples"); + tabMap.put("3", "Lesbian"); + tabMap.put("7", "Male"); + tabMap.put("5", "Trans"); + List enabledTabs = getXlovecamTabs(); + for (String tab : enabledTabs) { + String title = tabMap.getOrDefault(tab, tab); + updateService = new XloveCamUpdateService(xloveCam, Map.of(FILTER_PARAM, tab)); + tabs.add(createTab(title, updateService)); + } return tabs; } @@ -73,4 +63,8 @@ public class XloveCamTabProvider extends AbstractTabProvider { return tab; } + private List getXlovecamTabs() { + return new ArrayList<>(Config.getInstance().getSettings().xlovecamTabs); + } + } diff --git a/common/pom.xml b/common/pom.xml index 7d5df002..94efdff9 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -1,6 +1,6 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 common diff --git a/common/src/main/java/ctbrec/Settings.java b/common/src/main/java/ctbrec/Settings.java index 9552c133..29badd3c 100644 --- a/common/src/main/java/ctbrec/Settings.java +++ b/common/src/main/java/ctbrec/Settings.java @@ -53,20 +53,20 @@ public class Settings { public String bongacamsBaseUrl = "https://bongacams.com"; public String bongaPassword = ""; public String bongaUsername = ""; - public Set bongaTabs = new HashSet<>(); + public Set bongaTabs = new HashSet<>(Arrays.asList("female")); public String cam4Password = ""; public String cam4Username = ""; - public Set cam4Tabs = new HashSet<>(); + public Set cam4Tabs = new HashSet<>(Arrays.asList("female")); public String camsodaPassword = ""; public String camsodaUsername = ""; - public Set camsodaTabs = new HashSet<>(); + public Set camsodaTabs = new HashSet<>(Arrays.asList("f")); public String chaturbatePassword = ""; public String chaturbateUsername = ""; public String chaturbateBaseUrl = "https://chaturbate.com"; @Deprecated public boolean chaturbateUseFlaresolverr = false; public int chaturbateMsBetweenRequests = 3000; - public Set chaturbateRegions = new HashSet<>(); + public Set chaturbateTabs = new HashSet<>(Arrays.asList("f")); public boolean chooseStreamQuality = false; public String colorAccent = "#FFFFFF"; public String colorBase = "#FFFFFF"; @@ -77,9 +77,9 @@ public class Settings { public int defaultPriority = 50; public boolean deleteOrphanedRecordingMetadata = true; public boolean determineResolution = false; - public List disabledSites = new ArrayList<>(); + public List disabledSites = new ArrayList<>(Arrays.asList("Streamray", "WinkTv")); public String downloadFilename = "$sanitize(${modelName})_$format(${localDateTime})"; - public Set dreamcamTabs = new HashSet<>(); + public Set dreamcamTabs = new HashSet<>(Arrays.asList("girls")); public List eventHandlers = new ArrayList<>(); public boolean eventsSuspended = false; public boolean fastScrollSpeed = true; @@ -185,6 +185,7 @@ public class Settings { public boolean showPlayerStarting = false; public String showupUsername = ""; public String showupPassword = ""; + public Set showupTabs = new HashSet<>(Arrays.asList("female")); public boolean singlePlayer = true; @Deprecated public int splitRecordings = 0; @@ -195,8 +196,11 @@ public class Settings { public boolean startMinimized = false; public String streamatePassword = ""; public String streamateUsername = ""; + public Set streamateTabs = new HashSet<>(Arrays.asList("f,ff")); + public Set streamrayTabs = new HashSet<>(Arrays.asList("F")); public String stripchatUsername = ""; public String stripchatPassword = ""; + public Set stripchatTabs = new HashSet<>(Arrays.asList("girls")); public boolean stripchatUseXhamster = false; public boolean stripchatUseSuperchat = false; public List tabOrder = new ArrayList<>(); @@ -220,6 +224,7 @@ public class Settings { public String webinterfacePassword = "sucks"; public String xlovecamUsername = ""; public String xlovecamPassword = ""; + public Set xlovecamTabs = new HashSet<>(Arrays.asList("1")); public boolean stripchatVR = true; public boolean streamrayRecordGoalShows = false; public int thumbCacheSize = 16;