/*
* Copyright (c) 2015 OpenSilk Productions LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package syncthing.api;
import com.google.gson.Gson;
import com.squareup.okhttp.OkHttpClient;
import java.util.concurrent.TimeUnit;
import dagger.Module;
import dagger.Provides;
import retrofit.GsonConverterFactory;
import retrofit.Retrofit;
import retrofit.RxJavaCallAdapterFactory;
/**
* Created by drew on 3/4/15.
*/
@Module
public class SyncthingApiModule {
static final int CONNECT_TIMEOUT_MILLIS = 15 * 1000; // 15s
static final int READ_TIMEOUT_MILLIS = 20 * 1000; // 20s
@Provides @SessionScope
public SyncthingApi provideSyncthingApi(
Gson gson, OkHttpClient okClient, SyncthingApiConfig config
) {
OkHttpClient client = okClient.clone();
client.setConnectTimeout(CONNECT_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
client.setReadTimeout(READ_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
client.setSslSocketFactory(SyncthingSSLSocketFactory.create(config.getCACert()));
client.setHostnameVerifier(new NullHostNameVerifier());
client.interceptors().add(new SyncthingApiInterceptor(config));
Retrofit.Builder b = new Retrofit.Builder()
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create(gson))
.client(client)
.baseUrl(config.getBaseUrl());
if (BuildConfig.DEBUG) {
b.validateEagerly();
}
return b.build().create(SyncthingApi.class);
}
}