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.FeedModel;
|
|
|
|
import awais.instagrabber.models.enums.PostItemType;
|
2020-12-20 18:35:16 +00:00
|
|
|
import awais.instagrabber.repositories.responses.PostsFetchResponse;
|
|
|
|
import awais.instagrabber.webservices.GraphQLService;
|
2020-11-02 13:00:07 +00:00
|
|
|
import awais.instagrabber.webservices.ProfileService;
|
|
|
|
import awais.instagrabber.webservices.ServiceCallback;
|
|
|
|
|
|
|
|
public class SavedPostFetchService implements PostFetcher.PostFetchService {
|
|
|
|
private final ProfileService profileService;
|
2020-12-20 18:35:16 +00:00
|
|
|
private final GraphQLService graphQLService;
|
2020-11-02 13:00:07 +00:00
|
|
|
private final String profileId;
|
|
|
|
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 boolean moreAvailable;
|
|
|
|
|
2020-12-20 18:35:16 +00:00
|
|
|
public SavedPostFetchService(final String profileId, final PostItemType type, final boolean isLoggedIn) {
|
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;
|
|
|
|
graphQLService = isLoggedIn ? null : GraphQLService.getInstance();
|
|
|
|
profileService = isLoggedIn ? ProfileService.getInstance() : null;
|
2020-11-02 13:00:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void fetch(final FetchListener<List<FeedModel>> fetchListener) {
|
2020-12-20 18:35:16 +00:00
|
|
|
final ServiceCallback<PostsFetchResponse> callback = new ServiceCallback<PostsFetchResponse>() {
|
2020-11-02 13:00:07 +00:00
|
|
|
@Override
|
2020-12-20 18:35:16 +00:00
|
|
|
public void onSuccess(final PostsFetchResponse result) {
|
2020-11-02 13:00:07 +00:00
|
|
|
if (result == null) return;
|
2020-12-20 18:35:16 +00:00
|
|
|
nextMaxId = result.getNextCursor();
|
|
|
|
moreAvailable = result.hasNextPage();
|
2020-11-02 13:00:07 +00:00
|
|
|
if (fetchListener != null) {
|
2020-12-20 18:35:16 +00:00
|
|
|
fetchListener.onResult(result.getFeedModels());
|
2020-11-02 13:00:07 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onFailure(final Throwable t) {
|
|
|
|
// Log.e(TAG, "onFailure: ", t);
|
|
|
|
if (fetchListener != null) {
|
|
|
|
fetchListener.onFailure(t);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
switch (type) {
|
|
|
|
case LIKED:
|
|
|
|
profileService.fetchLiked(nextMaxId, callback);
|
|
|
|
break;
|
|
|
|
case TAGGED:
|
2020-12-20 18:35:16 +00:00
|
|
|
if (isLoggedIn) profileService.fetchTagged(profileId, nextMaxId, callback);
|
|
|
|
else graphQLService.fetchTaggedPosts(profileId, 30, nextMaxId, callback);
|
2020-11-02 13:00:07 +00:00
|
|
|
break;
|
|
|
|
case SAVED:
|
|
|
|
default:
|
|
|
|
profileService.fetchSaved(nextMaxId, callback);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void reset() {
|
|
|
|
nextMaxId = null;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean hasNextPage() {
|
|
|
|
return moreAvailable;
|
|
|
|
}
|
|
|
|
}
|