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

82 lines
2.9 KiB
Java
Raw Normal View History

2020-11-02 13:00:07 +00:00
package awais.instagrabber.asyncs;
import java.util.List;
import awais.instagrabber.customviews.helpers.PostFetcher;
import awais.instagrabber.interfaces.FetchListener;
import awais.instagrabber.models.enums.PostItemType;
import awais.instagrabber.repositories.responses.Media;
2020-12-20 18:35:16 +00:00
import awais.instagrabber.repositories.responses.PostsFetchResponse;
import awais.instagrabber.utils.CoroutineUtilsKt;
import awais.instagrabber.webservices.GraphQLRepository;
import awais.instagrabber.webservices.ProfileRepository;
import kotlin.coroutines.Continuation;
import kotlinx.coroutines.Dispatchers;
2020-11-02 13:00:07 +00:00
public class SavedPostFetchService implements PostFetcher.PostFetchService {
private final ProfileRepository profileRepository;
private final GraphQLRepository graphQLRepository;
private final long profileId;
2020-11-02 13:00:07 +00:00
private final PostItemType type;
2020-12-20 18:35:16 +00:00
private final boolean isLoggedIn;
2020-11-02 13:00:07 +00:00
private String nextMaxId;
private final String collectionId;
2020-11-02 13:00:07 +00:00
private boolean moreAvailable;
public SavedPostFetchService(final long profileId, final PostItemType type, final boolean isLoggedIn, final String collectionId) {
2020-11-02 13:00:07 +00:00
this.profileId = profileId;
this.type = type;
2020-12-20 18:35:16 +00:00
this.isLoggedIn = isLoggedIn;
this.collectionId = collectionId;
graphQLRepository = isLoggedIn ? null : GraphQLRepository.Companion.getInstance();
profileRepository = isLoggedIn ? ProfileRepository.Companion.getInstance() : null;
2020-11-02 13:00:07 +00:00
}
@Override
public void fetch(final FetchListener<List<Media>> fetchListener) {
final Continuation<PostsFetchResponse> callback = CoroutineUtilsKt.getContinuation((result, t) -> {
if (t != null) {
2020-11-02 13:00:07 +00:00
if (fetchListener != null) {
fetchListener.onFailure(t);
}
return;
}
if (result == null) return;
nextMaxId = result.getNextCursor();
moreAvailable = result.getHasNextPage();
if (fetchListener != null) {
fetchListener.onResult(result.getFeedModels());
2020-11-02 13:00:07 +00:00
}
}, Dispatchers.getIO());
2020-11-02 13:00:07 +00:00
switch (type) {
case LIKED:
profileRepository.fetchLiked(nextMaxId, callback);
2020-11-02 13:00:07 +00:00
break;
case TAGGED:
if (isLoggedIn) profileRepository.fetchTagged(profileId, nextMaxId, callback);
else graphQLRepository.fetchTaggedPosts(
profileId,
30,
nextMaxId,
callback
);
2020-11-02 13:00:07 +00:00
break;
case COLLECTION:
2020-11-02 13:00:07 +00:00
case SAVED:
profileRepository.fetchSaved(nextMaxId, collectionId, callback);
2020-11-02 13:00:07 +00:00
break;
}
}
@Override
public void reset() {
nextMaxId = null;
}
@Override
public boolean hasNextPage() {
return moreAvailable;
}
}