package com.wangdaye.mysplash.common.data.service;
import com.wangdaye.mysplash.BuildConfig;
import com.wangdaye.mysplash.Mysplash;
import com.wangdaye.mysplash.common.data.api.GetStreamApi;
import com.wangdaye.mysplash.common.utils.manager.AuthManager;
import com.wangdaye.mysplash.common.utils.widget.interceptor.GetStreamInterceptor;
import okhttp3.OkHttpClient;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
/**
* Get stream service.
* */
public class GetStreamService {
// widget
private Call call;
public static GetStreamService getService() {
return new GetStreamService();
}
private OkHttpClient buildClient() {
return new OkHttpClient.Builder()
.addInterceptor(new GetStreamInterceptor())
.build();
}
private GetStreamApi buildApi(OkHttpClient client) {
return new Retrofit.Builder()
.baseUrl(Mysplash.STREAM_API_BASE_URL)
.client(client)
.build()
.create((GetStreamApi.class));
}
public void requestFirstPageStream(final OnRequestStreamListener l) {
if (AuthManager.getInstance().isAuthorized()
&& AuthManager.getInstance().getNumericId() >= 0) {
requestFirstPageStream(AuthManager.getInstance().getNumericId(), l);
}
}
private void requestFirstPageStream(int numeric_id, final OnRequestStreamListener l) {
Call<ResponseBody> getFirstPageStream = buildApi(buildClient())
.getFirstPageStream(
numeric_id, Mysplash.DEFAULT_PER_PAGE, BuildConfig.GET_STREAM_KEY, "unspecified");
getFirstPageStream.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if (l != null) {
l.onRequestEnrichSucceed(call, response);
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
if (l != null) {
l.onRequestEnrichFailed(call, t);
}
}
});
call = getFirstPageStream;
}
public void requestNextPageStream(String nextPage, final OnRequestStreamListener l) {
Call<ResponseBody> getNextPageStream = buildApi(buildClient()).getNextPageStream(nextPage);
getNextPageStream.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if (l != null) {
l.onRequestEnrichSucceed(call, response);
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
if (l != null) {
l.onRequestEnrichFailed(call, t);
}
}
});
call = getNextPageStream;
}
public String getStreamUsablePart(String stream) {
String result = "\"results\": ";
return "stream_feed="
+ stream.substring(
stream.indexOf(result) + result.length(),
stream.lastIndexOf("]") + 1);
}
public void cancel() {
if (call != null) {
call.cancel();
}
}
// interface.
public interface OnRequestStreamListener {
void onRequestEnrichSucceed(Call<ResponseBody> call, Response<ResponseBody> response);
void onRequestEnrichFailed(Call<ResponseBody> call, Throwable t);
}
}