package eu.kanade.tachiyomi.extension.all.mangaforfree import eu.kanade.tachiyomi.multisrc.madara.Madara import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.SourceFactory import java.util.concurrent.TimeUnit import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor import okhttp3.OkHttpClient import eu.kanade.tachiyomi.annotations.Nsfw class MangaForFreeFactory : SourceFactory { override fun createSources(): List = listOf( MangaForFreeEN(), MangaForFreeKO(), MangaForFreeALL(), ) } class MangaForFreeEN : MangaForFree("MangaForFree.net", "https://mangaforfree.net", "en") { override fun chapterListSelector() = "li.wp-manga-chapter:not(:contains(Raw))" } class MangaForFreeKO : MangaForFree("MangaForFree.net", "https://mangaforfree.net", "ko") { override fun chapterListSelector() = "li.wp-manga-chapter:contains(Raw)" } class MangaForFreeALL : MangaForFree("MangaForFree.net", "https://mangaforfree.net", "all") @Nsfw abstract class MangaForFree( override val name: String, override val baseUrl: String, override val lang: String ) : Madara(name, baseUrl, lang) { private val rateLimitInterceptor = RateLimitInterceptor(1) override val client: OkHttpClient = network.cloudflareClient.newBuilder() .connectTimeout(10, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS) .addNetworkInterceptor(rateLimitInterceptor) .build() override fun getGenreList() = listOf( Genre("Action", "action"), Genre("Adult", "adult"), Genre("Adventure", "adventure"), Genre("Anime", "anime"), Genre("Cartoon", "cartoon"), Genre("Comedy", "comedy"), Genre("Comic", "comic"), Genre("Completed", "completed"), Genre("Cooking", "cooking"), Genre("Detective", "detective"), Genre("Doujinshi", "doujinshi"), Genre("Drama", "drama"), Genre("Ecchi", "ecchi"), Genre("Fanstasy", "fantasy"), Genre("Gender bender", "gender-bender"), Genre("Harem", "harem"), Genre("Historical", "historical"), Genre("Horror", "horror"), Genre("Josei", "josei"), Genre("Live action", "live-action"), Genre("Manga", "manga"), Genre("Manhua", "manhua"), Genre("Manhwa", "manhwa"), Genre("Martial arts", "martial-arts"), Genre("Mature", "mature"), Genre("Mecha", "mecha"), Genre("Mystery", "mystery"), Genre("One shot", "one-shot"), Genre("Psychological", "psychological"), Genre("Romance", "romance"), Genre("School Life", "school-life"), Genre("Sci-fi", "sci-fi"), Genre("Seinen", "seinen"), Genre("Shoujo", "shoujo"), Genre("Shoujo ai", "shoujo-ai"), Genre("Shounen", "shounen"), Genre("Shounen ai", "shounen-ai"), Genre("Slice of Life", "slice-of-life"), Genre("Smut", "smut"), Genre("Soft Yaoi", "soft-yaoi"), Genre("Soft Yuri", "soft-yuri"), Genre("Sports", "sports"), Genre("Supernatural", "supernatural"), Genre("Tragedy", "tragedy"), Genre("Webtoon", "webtoon"), Genre("Yaoi", "yaoi"), Genre("Yuri", "yuri"), ) }