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.VideoByVideoIdQueryBuilder; 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; /** * The class for interacting with the Holodex API */ public class Holodex { private HolodexService service; /** * Instantiates a new Holodex with the default base url * * @param apiKey the api key */ public Holodex(String apiKey) { initializeHolodexService(apiKey, "https://holodex.net"); } /** * Instantiates a new Holodex with a custom base url * * @param apiKey the api key * @param baseUrl the base url */ public Holodex(String apiKey, String baseUrl) { 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); } /** * Gets a list of upcoming and/or live SimpleVideos matching the VideoQueryBuilder attributes * * @param queryBuilder the query builder * @return A list of upcoming and/or live SimpleVideos * @throws HolodexException the holodex exception */ 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); } /** * Gets a list of videos matching the VideoQueryBuilder attributes * * @param queryBuilder the query builder * @return list of videos * @throws HolodexException the holodex exception */ public List