package io.github.droidkaigi.confsched.api; import android.support.annotation.NonNull; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import java.util.List; import javax.inject.Inject; import javax.inject.Singleton; import io.github.droidkaigi.confsched.model.Contributor; import io.github.droidkaigi.confsched.model.Session; import io.github.droidkaigi.confsched.model.SessionFeedback; import io.github.droidkaigi.confsched.util.LocaleUtil; import okhttp3.OkHttpClient; import retrofit2.Response; import retrofit2.Retrofit; import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; import retrofit2.http.Field; import retrofit2.http.FormUrlEncoded; import retrofit2.http.GET; import retrofit2.http.POST; import retrofit2.http.Path; import rx.Observable; @Singleton public class DroidKaigiClient { private static final String SESSIONS_API_ROUTES = "/konifar/droidkaigi2016/master/app/src/main/res/raw/"; private final DroidKaigiService service; private final GoogleFormService googleFormService; private final GithubService githubService; @Inject public DroidKaigiClient(OkHttpClient client) { Retrofit feedburnerRetrofit = new Retrofit.Builder() .client(client) .baseUrl("https://raw.githubusercontent.com") .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create(createGson())) .build(); service = feedburnerRetrofit.create(DroidKaigiService.class); Retrofit googleFormRetrofit = new Retrofit.Builder() .client(client) .baseUrl("https://docs.google.com/forms/d/") .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create(createGson())) .build(); googleFormService = googleFormRetrofit.create(GoogleFormService.class); Retrofit githubRetrofit = new Retrofit.Builder() .client(client) .baseUrl("https://api.github.com") .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create(createGson())) .build(); githubService = githubRetrofit.create(GithubService.class); } public static Gson createGson() { return new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create(); } public Observable<List<Session>> getSessions(@NonNull String languageId) { switch (languageId) { case LocaleUtil.LANG_JA_ID: return service.getSessionsJa(); case LocaleUtil.LANG_AR_ID: return service.getSessionsAr(); case LocaleUtil.LANG_KO_ID: return service.getSessionsKo(); case LocaleUtil.LANG_EN_ID: return service.getSessionsEn(); default: return service.getSessionsEn(); } } public Observable<Response<Void>> submitSessionFeedback(SessionFeedback f) { return googleFormService.submitSessionFeedback(f.sessionId, f.sessionName, f.relevancy, f.asExpected, f.difficulty, f.knowledgeable, f.comment); } public Observable<List<Contributor>> getContributors() { return githubService.getContributors("konifar", "droidkaigi2016"); } public interface DroidKaigiService { @GET(SESSIONS_API_ROUTES + "sessions_ja.json") Observable<List<Session>> getSessionsJa(); @GET(SESSIONS_API_ROUTES + "sessions_en.json") Observable<List<Session>> getSessionsEn(); @GET(SESSIONS_API_ROUTES + "sessions_ko.json") Observable<List<Session>> getSessionsKo(); @GET(SESSIONS_API_ROUTES + "sessions_ar.json") Observable<List<Session>> getSessionsAr(); } public interface GoogleFormService { @POST("1PrHh5PXH1NkBbDe7eFfOuu311X4LlyKF95TBYFFy6nw/formResponse") @FormUrlEncoded Observable<Response<Void>> submitSessionFeedback( @Field("entry.36792886") int id, @Field("entry.288043897") String name, @Field("entry.1914381797") int relevancy, @Field("entry.907172560") int asExpected, @Field("entry.1839418272") int difficulty, @Field("entry.675295234") int knowledgeable, @Field("entry.1455307059") String comment ); } public interface GithubService { @GET("/repos/{owner}/{repo}/contributors?per_page=100") Observable<List<Contributor>> getContributors(@Path("owner") String owner, @Path("repo") String repo); } }