diff --git a/src/main/java/ctbrec/sites/mfc/MyFreeCamsModel.java b/src/main/java/ctbrec/sites/mfc/MyFreeCamsModel.java index f25b2db1..2a98bdad 100644 --- a/src/main/java/ctbrec/sites/mfc/MyFreeCamsModel.java +++ b/src/main/java/ctbrec/sites/mfc/MyFreeCamsModel.java @@ -40,6 +40,7 @@ public class MyFreeCamsModel extends AbstractModel { private int uid; private String hlsUrl; private double camScore; + private int viewerCount; private State state; private int resolution[]; private MyFreeCams site; @@ -232,6 +233,8 @@ public class MyFreeCamsModel extends AbstractModel { LOG.warn("Couldn't url decode topic", e); } }); + + viewerCount = Optional.ofNullable(state.getM()).map((m) -> m.getRc()).orElseGet(() -> 0); } @Override @@ -252,6 +255,14 @@ public class MyFreeCamsModel extends AbstractModel { this.uid = uid; } + public int getViewerCount() { + return viewerCount; + } + + public void setViewerCount(int viewerCount) { + this.viewerCount = viewerCount; + } + @Override public void setSite(Site site) { if(site instanceof MyFreeCams) { diff --git a/src/main/java/ctbrec/sites/mfc/MyFreeCamsTabProvider.java b/src/main/java/ctbrec/sites/mfc/MyFreeCamsTabProvider.java index 336486c9..f188d458 100644 --- a/src/main/java/ctbrec/sites/mfc/MyFreeCamsTabProvider.java +++ b/src/main/java/ctbrec/sites/mfc/MyFreeCamsTabProvider.java @@ -43,6 +43,12 @@ public class MyFreeCamsTabProvider extends TabProvider { updateService.setPeriod(new Duration(TimeUnit.SECONDS.toMillis(10))); tabs.add(hd); + updateService = new PopularModelService(); + ThumbOverviewTab pop = new ThumbOverviewTab("Most Popular", updateService, myFreeCams); + pop.setRecorder(recorder); + updateService.setPeriod(new Duration(TimeUnit.SECONDS.toMillis(10))); + tabs.add(pop); + return tabs; } diff --git a/src/main/java/ctbrec/sites/mfc/PopularModelService.java b/src/main/java/ctbrec/sites/mfc/PopularModelService.java new file mode 100644 index 00000000..05dc4032 --- /dev/null +++ b/src/main/java/ctbrec/sites/mfc/PopularModelService.java @@ -0,0 +1,30 @@ +package ctbrec.sites.mfc; + +import java.io.IOException; +import java.util.List; +import java.util.stream.Collectors; + +import ctbrec.Model; +import ctbrec.ui.PaginatedScheduledService; +import javafx.concurrent.Task; + +public class PopularModelService extends PaginatedScheduledService { + + @Override + protected Task> createTask() { + return new Task>() { + @Override + public List call() throws IOException { + MyFreeCamsClient client = MyFreeCamsClient.getInstance(); + int modelsPerPage = 50; + return client.getModels().stream() + .filter(m -> m.getPreview() != null) + .filter(m -> m.getStreamUrl() != null) + .sorted((m1, m2) -> m2.getViewerCount() - m1.getViewerCount()) + .skip( (page-1) * modelsPerPage) + .limit(modelsPerPage) + .collect(Collectors.toList()); + } + }; + } +}