forked from j62/ctbrec
1
0
Fork 0

Update MFC model state when a page is loaded, so that offline models are detected as offline

This commit is contained in:
0xb00bface 2022-12-26 19:00:58 +01:00
parent 8004915125
commit adf129a0c0
7 changed files with 93 additions and 82 deletions

View File

@ -1,35 +1,30 @@
package ctbrec.ui.sites.myfreecams; package ctbrec.ui.sites.myfreecams;
import static ctbrec.io.HttpConstants.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ctbrec.Config; import ctbrec.Config;
import ctbrec.Model; import ctbrec.Model;
import ctbrec.StringUtil; import ctbrec.StringUtil;
import ctbrec.sites.mfc.MyFreeCams; import ctbrec.sites.mfc.*;
import ctbrec.sites.mfc.MyFreeCamsClient;
import ctbrec.sites.mfc.MyFreeCamsModel;
import ctbrec.sites.mfc.SessionState;
import ctbrec.sites.mfc.User;
import ctbrec.ui.SiteUiFactory; import ctbrec.ui.SiteUiFactory;
import ctbrec.ui.tabs.PaginatedScheduledService; import ctbrec.ui.tabs.PaginatedScheduledService;
import javafx.concurrent.Task; import javafx.concurrent.Task;
import okhttp3.Request; import okhttp3.Request;
import okhttp3.Response; import okhttp3.Response;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import static ctbrec.io.HttpConstants.REFERER;
import static ctbrec.io.HttpConstants.USER_AGENT;
public class FriendsUpdateService extends PaginatedScheduledService { public class FriendsUpdateService extends PaginatedScheduledService {
private static final Logger LOG = LoggerFactory.getLogger(FriendsUpdateService.class); private static final Logger LOG = LoggerFactory.getLogger(FriendsUpdateService.class);
private MyFreeCams myFreeCams; private final MyFreeCams myFreeCams;
private Mode mode = Mode.ONLINE; private Mode mode = Mode.ONLINE;
public enum Mode { public enum Mode {
@ -42,7 +37,7 @@ public class FriendsUpdateService extends PaginatedScheduledService {
@Override @Override
protected Task<List<Model>> createTask() { protected Task<List<Model>> createTask() {
return new Task<List<Model>>() { return new Task<>() {
@Override @Override
public List<Model> call() throws IOException { public List<Model> call() throws IOException {
if (StringUtil.isBlank(ctbrec.Config.getInstance().getSettings().mfcUsername)) { if (StringUtil.isBlank(ctbrec.Config.getInstance().getSettings().mfcUsername)) {
@ -76,9 +71,10 @@ public class FriendsUpdateService extends PaginatedScheduledService {
} }
}) })
.sorted((m1, m2) -> (int) (m2.getCamScore() - m1.getCamScore())) .sorted((m1, m2) -> (int) (m2.getCamScore() - m1.getCamScore()))
.skip((page - 1) * 50l) .skip((page - 1) * 50L)
.limit(50) .limit(50)
.collect(Collectors.toList()); .map(Model.class::cast)
.toList();
} }
} }

View File

@ -2,26 +2,21 @@ package ctbrec.ui.sites.myfreecams;
import ctbrec.Model; import ctbrec.Model;
import ctbrec.sites.mfc.MyFreeCamsClient;
import ctbrec.sites.mfc.SessionState; import ctbrec.sites.mfc.SessionState;
import ctbrec.sites.mfc.User; import ctbrec.sites.mfc.User;
import ctbrec.ui.tabs.PaginatedScheduledService;
import javafx.concurrent.Task; import javafx.concurrent.Task;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
public class HDCamsUpdateService extends PaginatedScheduledService { public class HDCamsUpdateService extends MyFreeCamsAbstractUpdateService {
@Override @Override
protected Task<List<Model>> createTask() { protected Task<List<Model>> createTask() {
return new Task<>() { return new Task<>() {
@Override @Override
public List<Model> call() { public List<Model> call() {
var client = MyFreeCamsClient.getInstance(); return HDCamsUpdateService.super.getModels().stream()
var modelsPerPage = 50;
return client.getModels().stream()
.filter(m -> m.getPreview() != null) .filter(m -> m.getPreview() != null)
.filter(m -> m.getStreamUrl() != null) .filter(m -> m.getStreamUrl() != null)
.filter(m -> Optional.ofNullable(client.getSessionState(m)) .filter(m -> Optional.ofNullable(client.getSessionState(m))
@ -39,8 +34,8 @@ public class HDCamsUpdateService extends PaginatedScheduledService {
} }
}) })
.sorted((m1, m2) -> (int) (m2.getCamScore() - m1.getCamScore())) .sorted((m1, m2) -> (int) (m2.getCamScore() - m1.getCamScore()))
.skip((page - 1L) * modelsPerPage) .skip((page - 1L) * MODELS_PER_PAGE)
.limit(modelsPerPage) .limit(MODELS_PER_PAGE)
.map(Model.class::cast) .map(Model.class::cast)
.toList(); .toList();
} }

View File

@ -0,0 +1,35 @@
package ctbrec.ui.sites.myfreecams;
import ctbrec.GlobalThreadPool;
import ctbrec.Model;
import ctbrec.sites.mfc.MyFreeCamsClient;
import ctbrec.sites.mfc.MyFreeCamsModel;
import ctbrec.ui.tabs.PaginatedScheduledService;
import lombok.extern.slf4j.Slf4j;
import java.util.List;
@Slf4j
public abstract class MyFreeCamsAbstractUpdateService extends PaginatedScheduledService {
static final int MODELS_PER_PAGE = 50;
MyFreeCamsClient client = MyFreeCamsClient.getInstance();
protected List<MyFreeCamsModel> getModels() {
List<MyFreeCamsModel> models = client.getModels().stream()
.toList();
for (Model model : models) {
GlobalThreadPool.submit(() -> {
try {
client.getSessionState(model);
model.isOnline(true);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} catch (Exception e) {
log.debug("Couldn't update model on line state", e);
}
});
}
return models;
}
}

View File

@ -1,24 +1,18 @@
package ctbrec.ui.sites.myfreecams; package ctbrec.ui.sites.myfreecams;
import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;
import ctbrec.Model; import ctbrec.Model;
import ctbrec.sites.mfc.MyFreeCamsClient;
import ctbrec.ui.tabs.PaginatedScheduledService;
import javafx.concurrent.Task; import javafx.concurrent.Task;
public class NewModelService extends PaginatedScheduledService { import java.util.List;
public class NewModelService extends MyFreeCamsAbstractUpdateService {
@Override @Override
protected Task<List<Model>> createTask() { protected Task<List<Model>> createTask() {
return new Task<List<Model>>() { return new Task<>() {
@Override @Override
public List<Model> call() throws IOException { public List<Model> call() {
var client = MyFreeCamsClient.getInstance(); return NewModelService.super.getModels().stream()
var modelsPerPage = 50;
return client.getModels().stream()
.filter(m -> m.getPreview() != null) .filter(m -> m.getPreview() != null)
.filter(m -> m.getStreamUrl() != null) .filter(m -> m.getStreamUrl() != null)
.filter(m -> { .filter(m -> {
@ -29,9 +23,10 @@ public class NewModelService extends PaginatedScheduledService {
} }
}) })
.sorted((m1, m2) -> m2.getViewerCount() - m1.getViewerCount()) .sorted((m1, m2) -> m2.getViewerCount() - m1.getViewerCount())
.skip( (page-1) * (long)modelsPerPage) .skip((page - 1) * (long) MODELS_PER_PAGE)
.limit(modelsPerPage) .limit(MODELS_PER_PAGE)
.collect(Collectors.toList()); .map(Model.class::cast)
.toList();
} }
}; };
} }

View File

@ -1,25 +1,20 @@
package ctbrec.ui.sites.myfreecams; package ctbrec.ui.sites.myfreecams;
import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;
import ctbrec.Model; import ctbrec.Model;
import ctbrec.sites.mfc.MyFreeCamsClient;
import ctbrec.ui.tabs.PaginatedScheduledService;
import javafx.concurrent.Task; import javafx.concurrent.Task;
public class OnlineCamsUpdateService extends PaginatedScheduledService { import java.util.List;
public class OnlineCamsUpdateService extends MyFreeCamsAbstractUpdateService {
@Override @Override
protected Task<List<Model>> createTask() { protected Task<List<Model>> createTask() {
return new Task<List<Model>>() { return new Task<>() {
@Override @Override
public List<Model> call() throws IOException { public List<Model> call() {
var client = MyFreeCamsClient.getInstance();
var modelsPerPage = 50; return OnlineCamsUpdateService.super.getModels().stream()
return client.getModels().stream()
.filter(m -> m.getPreview() != null) .filter(m -> m.getPreview() != null)
.filter(m -> m.getStreamUrl() != null) .filter(m -> m.getStreamUrl() != null)
.filter(m -> { .filter(m -> {
@ -33,9 +28,10 @@ public class OnlineCamsUpdateService extends PaginatedScheduledService {
} }
}) })
.sorted((m1, m2) -> (int) (m2.getCamScore() - m1.getCamScore())) .sorted((m1, m2) -> (int) (m2.getCamScore() - m1.getCamScore()))
.skip( (page-1) * (long)modelsPerPage) .skip((page - 1) * (long) MODELS_PER_PAGE)
.limit(modelsPerPage) .limit(MODELS_PER_PAGE)
.collect(Collectors.toList()); .map(Model.class::cast)
.toList();
} }
}; };
} }

View File

@ -1,24 +1,18 @@
package ctbrec.ui.sites.myfreecams; package ctbrec.ui.sites.myfreecams;
import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;
import ctbrec.Model; import ctbrec.Model;
import ctbrec.sites.mfc.MyFreeCamsClient;
import ctbrec.ui.tabs.PaginatedScheduledService;
import javafx.concurrent.Task; import javafx.concurrent.Task;
public class PopularModelService extends PaginatedScheduledService { import java.util.List;
public class PopularModelService extends MyFreeCamsAbstractUpdateService {
@Override @Override
protected Task<List<Model>> createTask() { protected Task<List<Model>> createTask() {
return new Task<List<Model>>() { return new Task<>() {
@Override @Override
public List<Model> call() throws IOException { public List<Model> call() {
var client = MyFreeCamsClient.getInstance(); return PopularModelService.super.getModels().stream()
var modelsPerPage = 50;
return client.getModels().stream()
.filter(m -> m.getPreview() != null) .filter(m -> m.getPreview() != null)
.filter(m -> m.getStreamUrl() != null) .filter(m -> m.getStreamUrl() != null)
.filter(m -> { .filter(m -> {
@ -32,9 +26,10 @@ public class PopularModelService extends PaginatedScheduledService {
} }
}) })
.sorted((m1, m2) -> m2.getViewerCount() - m1.getViewerCount()) .sorted((m1, m2) -> m2.getViewerCount() - m1.getViewerCount())
.skip( (page-1) * (long)modelsPerPage) .skip((page - 1) * (long) MODELS_PER_PAGE)
.limit(modelsPerPage) .limit(MODELS_PER_PAGE)
.collect(Collectors.toList()); .map(Model.class::cast)
.toList();
} }
}; };
} }

View File

@ -1,17 +1,16 @@
package ctbrec.ui.sites.myfreecams; package ctbrec.ui.sites.myfreecams;
import java.io.IOException;
import java.util.Collection;
import ctbrec.sites.mfc.MyFreeCams; import ctbrec.sites.mfc.MyFreeCams;
import ctbrec.sites.mfc.MyFreeCamsClient; import ctbrec.sites.mfc.MyFreeCamsClient;
import ctbrec.sites.mfc.SessionState; import ctbrec.sites.mfc.SessionState;
import javafx.concurrent.ScheduledService; import javafx.concurrent.ScheduledService;
import javafx.concurrent.Task; import javafx.concurrent.Task;
import java.util.Collection;
public class TableUpdateService extends ScheduledService<Collection<SessionState>> { public class TableUpdateService extends ScheduledService<Collection<SessionState>> {
private MyFreeCams mfc; private final MyFreeCams mfc;
public TableUpdateService(MyFreeCams mfc) { public TableUpdateService(MyFreeCams mfc) {
this.mfc = mfc; this.mfc = mfc;
@ -19,9 +18,9 @@ public class TableUpdateService extends ScheduledService<Collection<SessionState
@Override @Override
protected Task<Collection<SessionState>> createTask() { protected Task<Collection<SessionState>> createTask() {
return new Task<Collection<SessionState>>() { return new Task<>() {
@Override @Override
public Collection<SessionState> call() throws IOException { public Collection<SessionState> call() {
MyFreeCamsClient client = mfc.getClient(); MyFreeCamsClient client = mfc.getClient();
return client.getSessionStates(); return client.getSessionStates();
} }