X-Git-Url: https://git.mdrn.pl/wl-app.git/blobdiff_plain/48b2fe9f7c2dc3d9aeaaa6dbfb27c7da4f3235ff..269195b3729c1bdc22e9053ee4ebca667ea8549d:/Android/app/src/main/java/com/moiseum/wolnelektury/connection/RestClient.java diff --git a/Android/app/src/main/java/com/moiseum/wolnelektury/connection/RestClient.java b/Android/app/src/main/java/com/moiseum/wolnelektury/connection/RestClient.java new file mode 100644 index 0000000..35eb345 --- /dev/null +++ b/Android/app/src/main/java/com/moiseum/wolnelektury/connection/RestClient.java @@ -0,0 +1,107 @@ +package com.moiseum.wolnelektury.connection; + +import android.content.Context; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.moiseum.wolnelektury.BuildConfig; +import com.moiseum.wolnelektury.base.WLApplication; +import com.moiseum.wolnelektury.connection.interceptors.NewApiInterceptor; +import com.moiseum.wolnelektury.connection.interceptors.OAuthSigningInterceptor; +import com.moiseum.wolnelektury.connection.interceptors.UnauthorizedInterceptor; +import com.moiseum.wolnelektury.connection.models.OAuthTokenModel; +import com.moiseum.wolnelektury.connection.services.BooksService; + +import java.io.File; +import java.util.Random; +import java.util.concurrent.TimeUnit; + +import okhttp3.Cache; +import okhttp3.OkHttpClient; +import okhttp3.logging.HttpLoggingInterceptor; +import retrofit2.Call; +import retrofit2.Retrofit; +import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; +import retrofit2.converter.gson.GsonConverterFactory; + +/** + * @author golonkos. + */ + +public class RestClient { + public static final int PAGINATION_LIMIT = 30; + + public static final String MEDIA_URL = "http://wolnelektury.pl/media/"; + public static final String MEDIA_URL_HTTPS = "https://wolnelektury.pl/media/"; + public static final String BASE_URL = "https://wolnelektury.pl/api/"; + public static final String WEB_OAUTH_AUTHORIZATION_URL = ""; + public static final String WEB_PAYPAL_FORM_URL = ""; + + private static final String CACHE_DIR = "responses"; + private static final int CACHE_SIZE_MB = 10; + + private static final String CONSUMER_KEY = ""; + private static final String CONSUMER_SECRET = ""; + + private final Retrofit retrofit; + private final OAuthSigningInterceptor oAuthInterceptor; + + public RestClient(Context context) { + OAuthTokenModel currentToken = WLApplication.getInstance().getPreferences().getAccessToken(); + oAuthInterceptor = new OAuthSigningInterceptor(CONSUMER_KEY, CONSUMER_SECRET, new Random()); + if (currentToken != null) { + oAuthInterceptor.setToken(currentToken.getToken(), currentToken.getTokenSecret()); + } + UnauthorizedInterceptor unauthorizedInterceptor = new UnauthorizedInterceptor(); + NewApiInterceptor newApiInterceptor = new NewApiInterceptor(); + + GsonBuilder gsonBuilder = new GsonBuilder(); + //gsonBuilder.registerTypeAdapter(Date.class, new RestClientDateSerializer()); + + Gson gson = gsonBuilder.create(); + + int cacheSize = CACHE_SIZE_MB * 1024 * 1024; + File cacheDir = new File(context.getCacheDir(), CACHE_DIR); + Cache cache = new Cache(cacheDir, cacheSize); + + OkHttpClient.Builder builder = new OkHttpClient.Builder(); + builder.interceptors().add(newApiInterceptor); + builder.interceptors().add(oAuthInterceptor); + builder.interceptors().add(unauthorizedInterceptor); + if (BuildConfig.DEBUG) { + HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(); + loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.HEADERS); + builder.interceptors().add(loggingInterceptor); + } + builder.writeTimeout(60, TimeUnit.SECONDS); + builder.readTimeout(60, TimeUnit.SECONDS); + builder.connectTimeout(60, TimeUnit.SECONDS); + + OkHttpClient client = builder.cache(cache).build(); + retrofit = new Retrofit.Builder() + .baseUrl(BASE_URL) + .addConverterFactory(GsonConverterFactory.create(gson)) + .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) + .client(client) + .build(); + } + + public Call call(RestClientCallback restClientCallback, Class clazz) { + S service = createService(clazz); + Call call = restClientCallback.execute(service); + call.enqueue(restClientCallback); + return call; + } + + public S createService(Class clazz) { + return retrofit.create(clazz); + } + + public void clearOAuthTokens() { + oAuthInterceptor.setToken(null, null); + } + + public BooksService obtainBookService() { + return retrofit.create(BooksService.class); + } +}