forked from j62/ctbrec
53 lines
1.5 KiB
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;
|
|
}
|
|
}
|