package ani.dantotsu.others import ani.dantotsu.media.anime.Episode import ani.dantotsu.client import ani.dantotsu.tryWithSuspend import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable object Jikan { const val apiUrl = "https://api.jikan.moe/v4/" suspend inline fun query(endpoint: String): T? { return tryWithSuspend { client.get("$apiUrl$endpoint").parsed() } } suspend fun getEpisodes(malId: Int): Map { var hasNextPage = true var page = 0 val eps = mutableMapOf() while (hasNextPage) { page++ val res = query("anime/$malId/episodes?page=$page") res?.data?.forEach { val ep = it.malID.toString() eps[ep] = Episode(ep, title = it.title, //Personal revenge with 34566 :prayge: filler = if(malId!=34566) it.filler else true ) } hasNextPage = res?.pagination?.hasNextPage == true } return eps } @Serializable data class EpisodeResponse( val pagination: Pagination? = null, val data: List? = null ) { @Serializable data class Datum( @SerialName("mal_id") val malID: Int, val title: String? = null, val filler: Boolean, // val recap: Boolean, ) @Serializable data class Pagination( @SerialName("has_next_page") val hasNextPage: Boolean? = null ) } }