From 2f0ef47acf297f442924ce61d39a1a8c60df3b80 Mon Sep 17 00:00:00 2001 From: 0xb00bface <0xboobface@gmail.com> Date: Mon, 14 Dec 2020 21:28:10 +0100 Subject: [PATCH] Add more category tabs for CamSoda --- CHANGELOG.md | 1 + .../ui/sites/camsoda/CamsodaTabProvider.java | 11 ++- .../sites/camsoda/CamsodaUpdateService.java | 98 +++++++++---------- .../ctbrec/sites/camsoda/CamsodaModel.java | 9 ++ 4 files changed, 67 insertions(+), 52 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index af417890..226f2eee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ 3.10.9 ======================== +* Added more category tabs for CamSoda * Added button to the "Recording" tab to go over all model URLs and check, if the account still exists 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 d90ba6e7..8a460a08 100644 --- a/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaTabProvider.java +++ b/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaTabProvider.java @@ -4,6 +4,7 @@ import static ctbrec.sites.camsoda.Camsoda.*; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.function.Predicate; import ctbrec.recorder.Recorder; @@ -16,6 +17,7 @@ import javafx.scene.control.Tab; public class CamsodaTabProvider extends TabProvider { + private static final String API_URL = BASE_URI + "/api/v1/browse/online"; private Camsoda camsoda; private Recorder recorder; CamsodaFollowedTab followedTab; @@ -29,8 +31,13 @@ public class CamsodaTabProvider extends TabProvider { @Override public List getTabs(Scene scene) { List tabs = new ArrayList<>(); - tabs.add(createTab("Online", BASE_URI + "/api/v1/browse/online", m -> true)); - //tabs.add(createTab("New", BASE_URI + "/api/v1/browse/online", CamsodaModel::isNew)); + tabs.add(createTab("All", API_URL, m -> true)); + tabs.add(createTab("New", API_URL, CamsodaModel::isNew)); + tabs.add(createTab("Female", API_URL, m -> Objects.equals("f", m.getGender()))); + tabs.add(createTab("Male", API_URL, m -> Objects.equals("m", m.getGender()))); + tabs.add(createTab("Couples", API_URL, m -> Objects.equals("c", m.getGender()))); + tabs.add(createTab("Trans", API_URL, m -> Objects.equals("t", m.getGender()))); + //tabs.add(createTab("#petite", BASE_URI + "/api/v1/browse/tag-petite", m -> true)); followedTab.setRecorder(recorder); followedTab.setScene(scene); tabs.add(followedTab); diff --git a/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaUpdateService.java b/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaUpdateService.java index 1b8510d4..27e90dd6 100644 --- a/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaUpdateService.java +++ b/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaUpdateService.java @@ -74,60 +74,58 @@ public class CamsodaUpdateService extends PaginatedScheduledService { if (response.isSuccessful()) { String body = response.body().string(); JSONObject json = new JSONObject(body); - if (json.optBoolean("status")) { - JSONArray template = json.getJSONArray("template"); - JSONArray results = json.getJSONArray("results"); - for (int i = 0; i < results.length(); i++) { - Object result = results.getJSONObject(i).get("tpl"); - CamsodaModel model; - try { - if (result instanceof JSONObject) { - JSONObject tpl = (JSONObject) result; - String name = tpl.getString(Integer.toString(getTemplateIndex(template, "username"))); - model = (CamsodaModel) camsoda.createModel(name); - model.setDescription(tpl.getString(Integer.toString(getTemplateIndex(template, "subject_html")))); - model.setSortOrder(tpl.getFloat(Integer.toString(getTemplateIndex(template, "sort_value")))); - String preview = "https:" + tpl.getString(Integer.toString(getTemplateIndex(template, "thumb"))); - model.setPreview(preview); - String displayName = tpl.getString(Integer.toString(getTemplateIndex(template, "display_name"))); - model.setDisplayName(displayName.replaceAll("[^a-zA-Z0-9]", "")); - if (model.getDisplayName().isBlank()) { - model.setDisplayName(name); - } - model.setOnlineState(tpl.getString(Integer.toString(getTemplateIndex(template, "stream_name"))).isEmpty() ? OFFLINE : ONLINE); - try { - String statusIndex = Integer.toString(getTemplateIndex(template, "status")); - if (tpl.has(statusIndex)) { - model.setOnlineStateByStatus(tpl.getString(statusIndex)); - } - } catch (NoSuchElementException e) { - } - models.add(model); - } else if (result instanceof JSONArray) { - JSONArray tpl = (JSONArray) result; - String name = tpl.getString(getTemplateIndex(template, "username")); - model = (CamsodaModel) camsoda.createModel(name); - model.setSortOrder(tpl.getFloat(getTemplateIndex(template, "sort_value"))); - model.setDescription(tpl.getString(getTemplateIndex(template, "subject_html"))); - String preview = "https:" + tpl.getString(getTemplateIndex(template, "thumb")); - model.setPreview(preview); - model.setOnlineStateByStatus(tpl.getString(getTemplateIndex(template, "status"))); - String displayName = tpl.getString(getTemplateIndex(template, "display_name")); - model.setDisplayName(displayName.replaceAll("[^a-zA-Z0-9]", "")); - if (model.getDisplayName().isBlank()) { - model.setDisplayName(name); - } - models.add(model); + JSONArray template = json.getJSONArray("template"); + JSONArray results = json.getJSONArray("results"); + for (int i = 0; i < results.length(); i++) { + JSONObject result = results.getJSONObject(i); + Object templateObject = result.get("tpl"); + CamsodaModel model; + try { + if (templateObject instanceof JSONObject) { + JSONObject tpl = (JSONObject) templateObject; + String name = tpl.getString(Integer.toString(getTemplateIndex(template, "username"))); + model = (CamsodaModel) camsoda.createModel(name); + model.setDescription(tpl.getString(Integer.toString(getTemplateIndex(template, "subject_html")))); + model.setSortOrder(tpl.getFloat(Integer.toString(getTemplateIndex(template, "sort_value")))); + model.setNew(result.optBoolean("new")); + model.setGender(tpl.getString(Integer.toString(getTemplateIndex(template, "gender")))); + String preview = "https:" + tpl.getString(Integer.toString(getTemplateIndex(template, "thumb"))); + model.setPreview(preview); + String displayName = tpl.getString(Integer.toString(getTemplateIndex(template, "display_name"))); + model.setDisplayName(displayName.replaceAll("[^a-zA-Z0-9]", "")); + if (model.getDisplayName().isBlank()) { + model.setDisplayName(name); } - } catch (Exception e) { - LOG.warn("Couldn't parse one of the models: {}", result, e); + model.setOnlineState(tpl.getString(Integer.toString(getTemplateIndex(template, "stream_name"))).isEmpty() ? OFFLINE : ONLINE); + try { + String statusIndex = Integer.toString(getTemplateIndex(template, "status")); + if (tpl.has(statusIndex)) { + model.setOnlineStateByStatus(tpl.getString(statusIndex)); + } + } catch (NoSuchElementException e) { + } + models.add(model); + } else if (templateObject instanceof JSONArray) { + JSONArray tpl = (JSONArray) templateObject; + String name = tpl.getString(getTemplateIndex(template, "username")); + model = (CamsodaModel) camsoda.createModel(name); + model.setSortOrder(tpl.getFloat(getTemplateIndex(template, "sort_value"))); + model.setDescription(tpl.getString(getTemplateIndex(template, "subject_html"))); + String preview = "https:" + tpl.getString(getTemplateIndex(template, "thumb")); + model.setPreview(preview); + model.setOnlineStateByStatus(tpl.getString(getTemplateIndex(template, "status"))); + String displayName = tpl.getString(getTemplateIndex(template, "display_name")); + model.setDisplayName(displayName.replaceAll("[^a-zA-Z0-9]", "")); + if (model.getDisplayName().isBlank()) { + model.setDisplayName(name); + } + models.add(model); } + } catch (Exception e) { + LOG.warn("Couldn't parse one of the models: {}", result, e); } - return models; - } else { - LOG.debug("Response was not successful: {}", json); - return Collections.emptyList(); } + return models; } else { throw new HttpException(response.code(), response.message()); } diff --git a/common/src/main/java/ctbrec/sites/camsoda/CamsodaModel.java b/common/src/main/java/ctbrec/sites/camsoda/CamsodaModel.java index e980eb78..6266f8e1 100644 --- a/common/src/main/java/ctbrec/sites/camsoda/CamsodaModel.java +++ b/common/src/main/java/ctbrec/sites/camsoda/CamsodaModel.java @@ -47,6 +47,7 @@ public class CamsodaModel extends AbstractModel { private static final Logger LOG = LoggerFactory.getLogger(CamsodaModel.class); private transient List streamSources = null; private transient boolean isNew; + private transient String gender; private float sortOrder = 0; private Random random = new Random(); @@ -344,4 +345,12 @@ public class CamsodaModel extends AbstractModel { public void setNew(boolean isNew) { this.isNew = isNew; } + + public String getGender() { + return gender; + } + + public void setGender(String gender) { + this.gender = gender; + } }