BarInsta/app/src/main/java/awais/instagrabber/asyncs/DiscoverPostFetchService.java

71 lines
2.4 KiB
Java
Raw Normal View History

2020-11-01 06:02:54 +00:00
package awais.instagrabber.asyncs;
import java.util.Collections;
2020-11-01 06:02:54 +00:00
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
2020-11-01 06:02:54 +00:00
import awais.instagrabber.customviews.helpers.PostFetcher;
import awais.instagrabber.interfaces.FetchListener;
import awais.instagrabber.repositories.responses.Media;
import awais.instagrabber.repositories.responses.discover.TopicalExploreFeedResponse;
2021-01-23 04:33:36 +00:00
import awais.instagrabber.repositories.responses.WrappedMedia;
2020-11-01 06:02:54 +00:00
import awais.instagrabber.webservices.DiscoverService;
import awais.instagrabber.webservices.ServiceCallback;
public class DiscoverPostFetchService implements PostFetcher.PostFetchService {
private static final String TAG = "DiscoverPostFetchService";
private final DiscoverService discoverService;
2021-07-25 20:34:05 +00:00
private String maxId;
2020-11-01 06:02:54 +00:00
private boolean moreAvailable = false;
2021-07-25 20:34:05 +00:00
public DiscoverPostFetchService() {
2020-11-01 06:02:54 +00:00
discoverService = DiscoverService.getInstance();
}
@Override
public void fetch(final FetchListener<List<Media>> fetchListener) {
2021-07-25 20:34:05 +00:00
discoverService.topicalExplore(maxId, new ServiceCallback<TopicalExploreFeedResponse>() {
2020-11-01 06:02:54 +00:00
@Override
public void onSuccess(final TopicalExploreFeedResponse result) {
2020-11-01 06:02:54 +00:00
if (result == null) {
onFailure(new RuntimeException("result is null"));
return;
}
2021-06-30 02:43:17 +00:00
moreAvailable = result.getMoreAvailable();
2021-07-25 20:34:05 +00:00
maxId = result.getNextMaxId();
2021-01-23 04:33:36 +00:00
final List<WrappedMedia> items = result.getItems();
final List<Media> posts;
if (items == null) {
posts = Collections.emptyList();
} else {
posts = items.stream()
2021-01-23 04:33:36 +00:00
.map(WrappedMedia::getMedia)
.filter(Objects::nonNull)
.collect(Collectors.toList());
}
2020-11-01 06:02:54 +00:00
if (fetchListener != null) {
fetchListener.onResult(posts);
2020-11-01 06:02:54 +00:00
}
}
@Override
public void onFailure(final Throwable t) {
if (fetchListener != null) {
fetchListener.onFailure(t);
}
}
});
}
@Override
public void reset() {
2021-07-25 20:34:05 +00:00
maxId = null;
2020-11-01 06:02:54 +00:00
}
@Override
public boolean hasNextPage() {
return moreAvailable;
}
}