forked from j62/ctbrec
1
0
Fork 0
ctbrec/client/src/main/java/ctbrec/ui/sites/streamray/StreamrayUpdateService.java

53 lines
1.5 KiB
Java

package ctbrec.ui.sites.streamray;
import ctbrec.Model;
import ctbrec.sites.streamray.Streamray;
import ctbrec.sites.streamray.StreamrayModel;
import javafx.concurrent.Task;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import java.io.IOException;
import java.time.Duration;
import java.time.Instant;
import java.util.List;
import java.util.function.Predicate;
@Slf4j
public class StreamrayUpdateService extends AbstractStreamrayUpdateService {
private List<StreamrayModel> models;
private Instant lastListInfoRequest = Instant.EPOCH;
@Setter
protected Predicate<StreamrayModel> filter;
public StreamrayUpdateService(Streamray site, Predicate<StreamrayModel> filter) {
super(site);
this.filter = filter;
}
@Override
protected Task<List<Model>> createTask() {
return new Task<>() {
@Override
public List<Model> call() throws IOException {
return getModels().stream()
.filter(filter)
.skip((page - 1) * (long) modelsPerPage)
.limit(modelsPerPage)
.map(Model.class::cast)
.toList();
}
};
}
private List<StreamrayModel> getModels() throws IOException {
if (models == null || Duration.between(lastListInfoRequest, Instant.now()).getSeconds() >= 10) {
models = site.loadModelList();
lastListInfoRequest = Instant.now();
}
return models;
}
}