package com.pina; import com.pina.datatypes.Channel; import com.pina.datatypes.SimpleVideo; import com.pina.datatypes.Video; import com.pina.query.ChannelQueryBuilder; import com.pina.query.VideoMetadataQueryBuilder; import com.pina.query.VideoQueryBuilder; import com.pina.query.VideosByChannelIDQueryBuilder; import okhttp3.OkHttpClient; import okhttp3.Request; import retrofit2.Call; import retrofit2.Response; import retrofit2.Retrofit; import retrofit2.converter.jackson.JacksonConverterFactory; import java.io.IOException; import java.util.List; public class Holodex { private HolodexService service; public Holodex(String apiKey) { initializeHolodexService(apiKey, "https://holodex.net"); } public Holodex(String apiKey, String baseUrl) { // purely for unit testing initializeHolodexService(apiKey, baseUrl); } private void initializeHolodexService(String apiKey, String baseUrl){ OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); httpClient.addInterceptor(chain -> { Request original = chain.request(); Request request = original.newBuilder() .header("X-APIKEY", apiKey) .method(original.method(), original.body()) .build(); return chain.proceed(request); }); Retrofit retrofit = new Retrofit.Builder() .baseUrl(baseUrl) .addConverterFactory(JacksonConverterFactory.create()) .client(httpClient.build()) .build(); service = retrofit.create(HolodexService.class); } public List getLiveAndUpcomingVideos(VideoQueryBuilder queryBuilder) throws HolodexException { Call> call = service.getLiveVideos(queryBuilder.getChannelId(), queryBuilder.getId(), queryBuilder.getInclude(), queryBuilder.getLang(), queryBuilder.getLimit(), queryBuilder.getMaxUpcomingHours(), queryBuilder.getMentionedChannelId(), queryBuilder.getOffset(), queryBuilder.getOrder(), queryBuilder.getOrg(), queryBuilder.getPaginated(), queryBuilder.getSort(), queryBuilder.getStatus(), queryBuilder.getTopic(), queryBuilder.getType()); return executeCall(call); } public List