package com.hitherejoe.watchtower.data.remote;
import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import com.google.gson.GsonBuilder;
import com.hitherejoe.watchtower.WatchTowerApplication;
import com.hitherejoe.watchtower.data.BusEvent;
import retrofit.ErrorHandler;
import retrofit.RequestInterceptor;
import retrofit.RestAdapter;
import retrofit.RetrofitError;
import retrofit.client.Response;
import retrofit.converter.GsonConverter;
public class RetrofitHelper {
public WatchTowerService newWatchTowerService(final Context context) {
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(WatchTowerService.ENDPOINT)
.setErrorHandler(new ResponseErrorHandler(context))
.setLogLevel(RestAdapter.LogLevel.FULL)
.setConverter(new GsonConverter(new GsonBuilder().create()))
.setRequestInterceptor(new RequestInterceptor() {
@Override
public void intercept(RequestInterceptor.RequestFacade request) {
String accessToken = WatchTowerApplication.get(context).getComponent().dataManager().getPreferencesHelper().getToken();
if (accessToken != null) {
request.addHeader("Authorization", addBearerToken(accessToken));
}
}
})
.build();
return restAdapter.create(WatchTowerService.class);
}
public static String addBearerToken(String authToken) {
return "Bearer " + authToken;
}
private class ResponseErrorHandler implements ErrorHandler {
private Context mContext;
public ResponseErrorHandler(Context context) {
mContext = context;
}
@Override public Throwable handleError(RetrofitError cause) {
Response response = cause.getResponse();
if (response != null && (response.getStatus() == 401 || response.getStatus() == 403)) {
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
WatchTowerApplication.get(mContext).getComponent().eventBus().post(new BusEvent.AuthenticationError());
}
});
}
return cause;
}
}
}