Skip to content

Instantly share code, notes, and snippets.

@varundwarkani
Created April 25, 2021 10:25
Show Gist options
  • Save varundwarkani/12a7fa36f98a0e52201d80890d999fbc to your computer and use it in GitHub Desktop.
Save varundwarkani/12a7fa36f98a0e52201d80890d999fbc to your computer and use it in GitHub Desktop.
public class UpcomingMatchesDataSource extends PageKeyedDataSource<Integer, UpcomingMatch> {
private static final String LOGGER = UpcomingMatchesDataSource.class.getName();
public static final int PAGE_SIZE = 5;
private static Integer PAGE_KEY = 0;
private UpcomingMatchesRepository upcomingMatchesRepository;
UpcomingMatchesDataSource(UpcomingMatchesRepository upcomingMatchesRepository) {
this.upcomingMatchesRepository = upcomingMatchesRepository;
}
@Override
public void loadInitial(@NonNull LoadInitialParams<Integer> params, @NonNull LoadInitialCallback<Integer, UpcomingMatch> callback) {
Log.d(LOGGER, "loading Initial");
upcomingMatchesRepository.getUpcomingMatches(PAGE_KEY, PAGE_SIZE)
.subscribe(new Observer<UpcomingMatchesAPIResponse>() {
@Override
public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) {
Log.d(LOGGER, "onSubscribe of loadInitial");
}
@Override
public void onNext(@io.reactivex.annotations.NonNull UpcomingMatchesAPIResponse upcomingMatchesAPIResponse) {
Log.d(LOGGER, "onNext of loadInitial - " + upcomingMatchesAPIResponse.getData().size());
List<UpcomingMatch> upcomingMatches = processModelData(upcomingMatchesAPIResponse);
callback.onResult(upcomingMatches, null, PAGE_KEY + PAGE_SIZE);
}
@Override
public void onError(@io.reactivex.annotations.NonNull Throwable e) {
Log.d(LOGGER, "onError of loadInitial - " + e.getMessage());
}
@Override
public void onComplete() {
Log.d(LOGGER, "onComplete of loadInitial");
}
});
}
@Override
public void loadBefore(@NonNull LoadParams<Integer> params, @NonNull LoadCallback<Integer, UpcomingMatch> callback) {
Log.d(LOGGER, "loading before");
Integer newKey = (PAGE_KEY > 0) ? PAGE_KEY - PAGE_SIZE : null;
upcomingMatchesRepository.getUpcomingMatches(params.key, PAGE_SIZE)
.subscribe(new Observer<UpcomingMatchesAPIResponse>() {
@Override
public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) {
Log.d(LOGGER, "onSubscribe of loadBefore");
}
@Override
public void onNext(@io.reactivex.annotations.NonNull UpcomingMatchesAPIResponse upcomingMatchesAPIResponse) {
Log.d(LOGGER, "onNext of loadBefore");
List<UpcomingMatch> upcomingMatches = processModelData(upcomingMatchesAPIResponse);
callback.onResult(upcomingMatches, newKey);
}
@Override
public void onError(@io.reactivex.annotations.NonNull Throwable e) {
Log.d(LOGGER, "onError of loadBefore - " + e.getMessage());
}
@Override
public void onComplete() {
Log.d(LOGGER, "onComplete of loadBefore");
}
});
}
@Override
public void loadAfter(@NonNull LoadParams<Integer> params, @NonNull LoadCallback<Integer, UpcomingMatch> callback) {
Log.d(LOGGER, "loading after");
upcomingMatchesRepository.getUpcomingMatches(params.key, PAGE_SIZE)
.subscribe(new Observer<UpcomingMatchesAPIResponse>() {
@Override
public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) {
Log.d(LOGGER, "onSubscribe of loadAfter");
}
@Override
public void onNext(@io.reactivex.annotations.NonNull UpcomingMatchesAPIResponse upcomingMatchesAPIResponse) {
Log.d(LOGGER, "onNext of loadAfter - " + upcomingMatchesAPIResponse.getData().size());
List<UpcomingMatch> upcomingMatches = processModelData(upcomingMatchesAPIResponse);
Integer key = (upcomingMatchesAPIResponse.isHasmore()) ? PAGE_KEY + PAGE_SIZE : null;
callback.onResult(upcomingMatches, key);
}
@Override
public void onError(@io.reactivex.annotations.NonNull Throwable e) {
Log.d(LOGGER, "onError of loadAfter - " + e.getMessage());
}
@Override
public void onComplete() {
Log.d(LOGGER, "onComplete of loadAfter");
}
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment