package com.wangdaye.mysplash.common.data.service;
import android.net.Uri;
import com.google.gson.GsonBuilder;
import com.wangdaye.mysplash.common.data.api.FollowingApi;
import com.wangdaye.mysplash.common.data.entity.unsplash.FollowingFeed;
import com.wangdaye.mysplash.common.utils.widget.interceptor.FollowingInterceptor;
import okhttp3.OkHttpClient;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
/**
* Feed service.
* */
public class FollowingService {
private Call call;
public static FollowingService getService() {
return new FollowingService();
}
private OkHttpClient buildClient() {
return new OkHttpClient.Builder()
.addInterceptor(new FollowingInterceptor())
.build();
}
private FollowingApi buildApi(OkHttpClient client) {
return new Retrofit.Builder()
.baseUrl("https://unsplash.com/")
.client(client)
.addConverterFactory(
GsonConverterFactory.create(
new GsonBuilder().setLenient().create()))
.build()
.create((FollowingApi.class));
}
public void requestFollowingFeed(String url, final OnRequestFollowingFeedListener l) {
String after = Uri.parse(url).getQueryParameter("after");
Call<FollowingFeed> getFeed = buildApi(buildClient()).getFollowingFeed(after);
getFeed.enqueue(new Callback<FollowingFeed>() {
@Override
public void onResponse(Call<FollowingFeed> call, retrofit2.Response<FollowingFeed> response) {
if (l != null) {
l.onRequestFollowingFeedSuccess(call, response);
}
}
@Override
public void onFailure(Call<FollowingFeed> call, Throwable t) {
if (l != null) {
l.onRequestFollowingFeedFailed(call, t);
}
}
});
call = getFeed;
}
public void setFollowUser(String username, final boolean follow, final OnFollowListener l) {
Call<ResponseBody> followRequest;
if (follow) {
followRequest = buildApi(buildClient()).follow(username);
} else {
followRequest = buildApi(buildClient()).cancelFollow(username);
}
followRequest.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if (l != null) {
if (follow) {
l.onFollowSuccess(call, response);
} else {
l.onCancelFollowSuccess(call, response);
}
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
if (l != null) {
if (follow) {
l.onFollowFailed(call, t);
} else {
l.onCancelFollowFailed(call, t);
}
}
}
});
call = followRequest;
}
public void cancel() {
if (call != null) {
call.cancel();
}
}
// interface.
public interface OnRequestFollowingFeedListener {
void onRequestFollowingFeedSuccess(Call<FollowingFeed> call, Response<FollowingFeed> response);
void onRequestFollowingFeedFailed(Call<FollowingFeed> call, Throwable t);
}
public interface OnFollowListener {
void onFollowSuccess(Call<ResponseBody> call, Response<ResponseBody> response);
void onCancelFollowSuccess(Call<ResponseBody> call, Response<ResponseBody> response);
void onFollowFailed(Call<ResponseBody> call, Throwable t);
void onCancelFollowFailed(Call<ResponseBody> call, Throwable t);
}
}