From 2e1728c73b5f7eed2f1bae437b8ffbfdab5db8ea Mon Sep 17 00:00:00 2001 From: Claudemirovsky <63046606+Claudemirovsky@users.noreply.github.com> Date: Sun, 5 Mar 2023 09:45:12 -0300 Subject: [PATCH] Re-add AnimesVision (#1364) * Revert "Remove AnimesVision (#1311)" This reverts commit 04aec5ab5c2aaa088cd7be4bda56eb414b16bc72. * fix compilation with jsoup 1.15.3 * Minor refactor * Fix video extraction + speedup * Add warning to non-logged users * Bump version --- src/pt/animesvision/AndroidManifest.xml | 24 + src/pt/animesvision/build.gradle | 19 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2924 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1607 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4489 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7956 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 11701 bytes .../pt/animesvision/AVFilters.kt | 1507 +++++++++++++++++ .../pt/animesvision/AVUrlActivity.kt | 43 + .../pt/animesvision/AnimesVision.kt | 390 +++++ .../pt/animesvision/dto/AnimesVisionDto.kt | 41 + .../extractors/GlobalVisionExtractor.kt | 16 + 12 files changed, 2040 insertions(+) create mode 100644 src/pt/animesvision/AndroidManifest.xml create mode 100644 src/pt/animesvision/build.gradle create mode 100644 src/pt/animesvision/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/animesvision/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/animesvision/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/animesvision/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/animesvision/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/animesvision/src/eu/kanade/tachiyomi/animeextension/pt/animesvision/AVFilters.kt create mode 100644 src/pt/animesvision/src/eu/kanade/tachiyomi/animeextension/pt/animesvision/AVUrlActivity.kt create mode 100644 src/pt/animesvision/src/eu/kanade/tachiyomi/animeextension/pt/animesvision/AnimesVision.kt create mode 100644 src/pt/animesvision/src/eu/kanade/tachiyomi/animeextension/pt/animesvision/dto/AnimesVisionDto.kt create mode 100644 src/pt/animesvision/src/eu/kanade/tachiyomi/animeextension/pt/animesvision/extractors/GlobalVisionExtractor.kt diff --git a/src/pt/animesvision/AndroidManifest.xml b/src/pt/animesvision/AndroidManifest.xml new file mode 100644 index 000000000..9365278ac --- /dev/null +++ b/src/pt/animesvision/AndroidManifest.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + diff --git a/src/pt/animesvision/build.gradle b/src/pt/animesvision/build.gradle new file mode 100644 index 000000000..f70f61336 --- /dev/null +++ b/src/pt/animesvision/build.gradle @@ -0,0 +1,19 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'kotlinx-serialization' + +ext { + extName = 'AnimesVision' + pkgNameSuffix = 'pt.animesvision' + extClass = '.AnimesVision' + extVersionCode = 16 + libVersion = '13' +} + +dependencies { + implementation(project(':lib-voe-extractor')) + implementation(project(':lib-streamtape-extractor')) + implementation(project(':lib-dood-extractor')) +} + +apply from: "$rootDir/common.gradle" diff --git a/src/pt/animesvision/res/mipmap-hdpi/ic_launcher.png b/src/pt/animesvision/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..72b78599dcfd23bbca285b62172903177a87324a GIT binary patch literal 2924 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 literal 0 HcmV?d00001 diff --git a/src/pt/animesvision/res/mipmap-mdpi/ic_launcher.png b/src/pt/animesvision/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..6b9685c85246309e0e5170e0ddc66e50d58a4222 GIT binary patch literal 1607 zcmV-N2Dtf&P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv0RI600RN!9r;`8x00(qQO+^Rh0}ll*C%eo>6#xJQOG!jQRA}Dq*voHJ=N*Uf z=RIf6%y`atE=)W&4mO6^#x4*No2w13F(P0=+FV+xsEAFaWJA?bD%47(EmGPpsxD{= zY9f`SsZv!KqGlD5q?Cx8uj80v*?cUym|02-Q7L3wrruVw})6fPRI6k-u~6k zNt9J^=uXa>cF-ofBjn*p`gKm{reanpWwumYb;bInf~K3%=OXp{=oL%Jee@xE<+I4#0`uq25mV*y`baZsEcUK#uBf|`(`q;LmiB)wg=*glL#~;wvx}NE&Nos1UIPkr_ ze0=r{wY9bE|4t_tFI}bi#kE8u5&quw369eF>7j#se*Pk<{sD5z!06aV@Z*mNY~7An zS^?1rhFyWLdL?>QHTi#>!JZh$zw;%u`81KhegZppkw4o-;FZ^iWip6Z9OJvM6YlT9 z*U$(>8!a4rhK5!3e0si@HEUKA3P+ir&yvgAyz=U+NTs2aL^=|Lz;F1On0(CUmNuSW z_X2mv9}x{xYzl<}Pv#zDSr&;UQN9}NW4iYODwiX)ZVSe9^%MtsaI*6#DN*@6 zB2tPoGevG}2&9AVHwm=1QM_`AnfHH3;r!qj9`${~IF&sc*g!bgu0{ni0M zL--7Y8AhgOk=V%e93l`z7y;DqO+92;!zqJ*B~^F!BmQS z_wUnKSA~>|0H4nwY=#&bzDZ40l6*eL_}32!n^zq-~q*4T0+R%+4GM~knc!=-0RRm+pFzOnR zlaG+aEcV0uSOdLKR|87nYiVuevwvRV=v!}b@|_bjH#eh%L3(bA)2Gj{b9*ZaupNo+ z^AiY$xOMX~cUG@taBzr3B2GytgyTTxOKmJ){w`l$y~gv6E2%7B!lS9j{AX+wYi1Tq z6Z_T;thq^q0$uos?>~sXVLc*QMzO04y`d4OkfnIx9N{BJdFJ>Bh-8w?AAXO&c_Yfo zll}A)jJgpP%rl%<@ zOLAvygwkl7*_lbo%9r8~EPiSAb+rftW4G^;NW>^FE2F#n3OD}UjZvB)vTYBAv0*Yd z28cB8KxjJBDiB!Pggx;!nV$268k&$+fz0)8!p-gYzp;+u=yfvv|01+{6G%yBq>o6; zZe;oi0`E5J0X)D{JrCgaJb>Ht0B+9%xIGWx_B?>w^8jw|sR#TI2(=buNo)Ok0000b zbVXQnWMOn=I%9HWVRU5xGB7eSEif}JF*Q^$H99mkIyE&bFfckWFfC#gm;e9(C3Hnt zbYx+4WjbwdWNBu305UK#GA%GOEipAzFf}?fH99plD=;uRFfd#{tt0>d002ovPDHLk FV1mKl=KTNw literal 0 HcmV?d00001 diff --git a/src/pt/animesvision/res/mipmap-xhdpi/ic_launcher.png b/src/pt/animesvision/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..6fc747c92121422a5179e6013edec01d71edeffd GIT binary patch literal 4489 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 V2`H5+z8eBS2VtO5t^WAse*qDwO0NI_ literal 0 HcmV?d00001 diff --git a/src/pt/animesvision/res/mipmap-xxhdpi/ic_launcher.png b/src/pt/animesvision/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..f0e989a3c2dd2942964ebb12baafc3c5e53555be GIT binary patch literal 7956 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 literal 0 HcmV?d00001 diff --git a/src/pt/animesvision/src/eu/kanade/tachiyomi/animeextension/pt/animesvision/AVFilters.kt b/src/pt/animesvision/src/eu/kanade/tachiyomi/animeextension/pt/animesvision/AVFilters.kt new file mode 100644 index 000000000..a3b24a5d1 --- /dev/null +++ b/src/pt/animesvision/src/eu/kanade/tachiyomi/animeextension/pt/animesvision/AVFilters.kt @@ -0,0 +1,1507 @@ +package eu.kanade.tachiyomi.animeextension.pt.animesvision + +import eu.kanade.tachiyomi.animesource.model.AnimeFilter +import eu.kanade.tachiyomi.animesource.model.AnimeFilterList + +object AVFilters { + + open class QueryPartFilter( + displayName: String, + val vals: Array>, + ) : AnimeFilter.Select( + displayName, + vals.map { it.first }.toTypedArray(), + ) { + fun toQueryPart() = vals[state].second + } + + open class CheckBoxFilterList(name: String, values: List) : AnimeFilter.Group(name, values) + private class CheckBoxVal(name: String, state: Boolean = false) : AnimeFilter.CheckBox(name, state) + + private inline fun AnimeFilterList.asQueryPart(): String { + return this.filterIsInstance().joinToString("") { + (it as QueryPartFilter).toQueryPart() + } + } + + class TypeFilter : QueryPartFilter("Tipo", AVFiltersData.types) + class StatusFilter : QueryPartFilter("Status", AVFiltersData.status) + class LanguageFilter : QueryPartFilter("Idioma", AVFiltersData.languages) + class SortFilter : QueryPartFilter("Ordenar", AVFiltersData.orders) + class InitialYearFilter : QueryPartFilter("Ano Inicial", AVFiltersData.initialYear) + class LastYearFilter : QueryPartFilter("Ano Final", AVFiltersData.lastYear) + class FansubFilter : QueryPartFilter("Fansubs", AVFiltersData.fansubs) + class SeasonFilter : QueryPartFilter("Temporada", AVFiltersData.seasons) + class StudioFilter : QueryPartFilter("Estúdio", AVFiltersData.studios) + class ProducerFilter : QueryPartFilter("Produtora", AVFiltersData.producers) + + class GenresFilter : CheckBoxFilterList( + "Gêneros", + AVFiltersData.genres.map { CheckBoxVal(it.first, false) }, + ) + + val filterList = AnimeFilterList( + TypeFilter(), + StatusFilter(), + LanguageFilter(), + SortFilter(), + InitialYearFilter(), + LastYearFilter(), + FansubFilter(), + SeasonFilter(), + StudioFilter(), + ProducerFilter(), + GenresFilter(), + ) + + data class FilterSearchParams( + val type: String = "", + val status: String = "", + val language: String = "", + val sort: String = "padrao", + val initial_year: String = "1917", + val last_year: String = "2023", + val fansub: String = "", + val season: String = "", + val studio: String = "", + val producer: String = "", + val genres: String = "", + ) + + internal fun getSearchParameters(filters: AnimeFilterList): FilterSearchParams { + if (filters.isEmpty()) return FilterSearchParams() + + val genres: String = filters.filterIsInstance() + .mapNotNull { filter -> + filter.state.mapNotNull { format -> + if (format.state) { + AVFiltersData.genres.find { it.first == format.name }!!.second + } else { null } + }.joinToString(",") + }.joinToString("") + + return FilterSearchParams( + filters.asQueryPart(), + filters.asQueryPart(), + filters.asQueryPart(), + filters.asQueryPart(), + filters.asQueryPart(), + filters.asQueryPart(), + filters.asQueryPart(), + filters.asQueryPart(), + filters.asQueryPart(), + filters.asQueryPart(), + genres, + ) + } + + private object AVFiltersData { + + val every = Pair("Todos", "") + val types = arrayOf( + every, + Pair("Animes", "1"), + Pair("Filmes", "2"), + Pair("Doramas", "4"), + Pair("Cartoons", "5"), + Pair("Live Actions", "6"), + ) + + val status = arrayOf( + every, + Pair("Finalizado", "1"), + Pair("Sendo exibido", "2"), + Pair("Ainda não exibido", "3"), + ) + + val languages = arrayOf( + every, + Pair("Legendados", "1"), + Pair("Dublados", "2"), + ) + + val orders = arrayOf( + Pair("Padrão", ""), + Pair("Adicionado Recentemente", "adicionado_recentemente"), + Pair("Atualizado Recentemente", "atualizado_recentemente"), + Pair("Título de A-Z", "titulo_az"), + Pair("Mais visualizados", "mais_visualizados"), + ) + + val initialYear = (1917..2023).map { + Pair(it.toString(), it.toString()) + }.toTypedArray() + + val lastYear = initialYear.reversed().toTypedArray() + + val seasons = arrayOf( + every, + Pair("Inverno 2023", "164"), + Pair("Inverno 2022", "157"), + Pair("Primavera 2022", "159"), + Pair("Verão 2022", "161"), + Pair("Outono 2022", "162"), + Pair("Inverno 2021", "1"), + Pair("Primavera 2021", "152"), + Pair("Verão 2021", "155"), + Pair("Outono 2021", "156"), + Pair("Inverno 2020", "5"), + Pair("Primavera 2020", "4"), + Pair("Verão 2020", "3"), + Pair("Outono 2020", "2"), + Pair("Inverno 2019", "23"), + Pair("Primavera 2019", "18"), + Pair("Verão 2019", "7"), + Pair("Outono 2019", "6"), + Pair("Inverno 2018", "75"), + Pair("Primavera 2018", "73"), + Pair("Verão 2018", "69"), + Pair("Outono 2018", "67"), + Pair("Inverno 2017", "131"), + Pair("Primavera 2017", "128"), + Pair("Verão 2017", "126"), + Pair("Outono 2017", "76"), + Pair("Inverno 2016", "139"), + Pair("Primavera 2016", "138"), + Pair("Verão 2016", "137"), + Pair("Outono 2016", "134"), + Pair("Inverno 2015", "147"), + Pair("Primavera 2015", "146"), + Pair("Verão 2015", "145"), + Pair("Outono 2015", "144"), + Pair("Inverno 2014", "151"), + Pair("Primavera 2014", "150"), + Pair("Verão 2014", "149"), + Pair("Outono 2014", "148"), + Pair("Verão 2013", "154"), + Pair("Outono 2013", "153"), + Pair("Inverno 2007", "140"), + Pair("Primavera 2007", "141"), + Pair("Verão 2007", "142"), + Pair("Outono 2007", "143"), + Pair("Inverno 2006", "132"), + Pair("Primavera 2006", "133"), + Pair("Verão 2006", "135"), + Pair("Outono 2006", "136"), + Pair("Inverno 2005", "125"), + Pair("Primavera 2005", "127"), + Pair("Verão 2005", "129"), + Pair("Outono 2005", "130"), + Pair("Inverno 2004", "121"), + Pair("Primavera 2004", "122"), + Pair("Verão 2004", "123"), + Pair("Outono 2004", "124"), + Pair("Inverno 2003", "117"), + Pair("Primavera 2003", "118"), + Pair("Verão 2003", "119"), + Pair("Outono 2003", "120"), + Pair("Inverno 2002", "113"), + Pair("Primavera 2002", "114"), + Pair("Verão 2002", "115"), + Pair("Outono 2002", "116"), + Pair("Inverno 2001", "110"), + Pair("Primavera 2001", "111"), + Pair("Verão 2001", "112"), + Pair("Outono 2001", "109"), + Pair("Inverno 2000", "105"), + Pair("Primavera 2000", "107"), + Pair("Verão 2000", "108"), + Pair("Outono 2000", "106"), + Pair("Inverno 1999", "101"), + Pair("Primavera 1999", "102"), + Pair("Verão 1999", "104"), + Pair("Outono 1999", "103"), + Pair("Inverno 1998", "97"), + Pair("Primavera 1998", "98"), + Pair("Verão 1998", "99"), + Pair("Outono 1998", "100"), + Pair("Inverno 1997", "95"), + Pair("Primavera 1997", "93"), + Pair("Verão 1997", "94"), + Pair("Outono 1997", "96"), + Pair("Inverno 1996", "89"), + Pair("Primavera 1996", "90"), + Pair("Verão 1996", "92"), + Pair("Outono 1996", "91"), + Pair("Inverno 1995", "85"), + Pair("Primavera 1995", "86"), + Pair("Verão 1995", "88"), + Pair("Outono 1995", "87"), + Pair("Inverno 1994", "81"), + Pair("Primavera 1994", "82"), + Pair("Verão 1994", "84"), + Pair("Outono 1994", "83"), + Pair("Inverno 1993", "77"), + Pair("Primavera 1993", "78"), + Pair("Verão 1993", "79"), + Pair("Outono 1993", "80"), + Pair("Inverno 1992", "68"), + Pair("Primavera 1992", "71"), + Pair("Verão 1992", "70"), + Pair("Outono 1992", "74"), + Pair("Inverno 1991", "63"), + Pair("Primavera 1991", "64"), + Pair("Verão 1991", "65"), + Pair("Outono 1991", "66"), + Pair("Inverno 1990", "60"), + Pair("Primavera 1990", "61"), + Pair("Outono 1990", "62"), + Pair("Inverno 1989", "56"), + Pair("Primavera 1989", "57"), + Pair("Verão 1989", "58"), + Pair("Outono 1989", "59"), + Pair("Inverno 1988", "52"), + Pair("Primavera 1988", "53"), + Pair("Verão 1988", "54"), + Pair("Outono 1988", "55"), + Pair("Inverno 1987", "48"), + Pair("Primavera 1987", "49"), + Pair("Verão 1987", "50"), + Pair("Outono 1987", "51"), + Pair("Inverno 1986", "43"), + Pair("Primavera 1986", "45"), + Pair("Verão 1986", "46"), + Pair("Outono 1986", "47"), + Pair("Inverno 1985", "39"), + Pair("Primavera 1985", "40"), + Pair("Verão 1985", "41"), + Pair("Outono 1985", "42"), + Pair("Inverno 1984", "36"), + Pair("Primavera 1984", "37"), + Pair("Outono 1984", "38"), + Pair("Inverno 1983", "32"), + Pair("Primavera 1983", "33"), + Pair("Verão 1983", "35"), + Pair("Outono 1983", "34"), + Pair("Inverno 1982", "30"), + Pair("Primavera 1982", "28"), + Pair("Verão 1982", "29"), + Pair("Outono 1982", "31"), + Pair("Inverno 1981", "24"), + Pair("Primavera 1981", "25"), + Pair("Verão 1981", "26"), + Pair("Outono 1981", "27"), + Pair("Outono 1980", "22"), + Pair("Inverno 1979", "19"), + Pair("Primavera 1979", "20"), + Pair("Inverno 1978", "16"), + Pair("Outono 1978", "17"), + ) + val fansubs = arrayOf( + every, + Pair("AMA", "ama"), + Pair("ANSK", "ansk"), + Pair("Absolute", "absolute"), + Pair("Aenianos", "aenianos"), + Pair("Akogare", "akogare"), + Pair("Anipakku", "anipakku"), + Pair("Armagedon", "armagedon"), + Pair("Atlantida", "atlantida"), + Pair("BAS", "bas"), + Pair("Dollars", "dollars"), + Pair("Elite", "elite fansub"), + Pair("Eternal Animes", "eternal animes"), + Pair("Fênix Sub", "fênix sub"), + Pair("Hacchi", "hacchi"), + Pair("Hacchi", "hacchi"), + Pair("Infinite", "infinite"), + Pair("Kiyoteru", "kiyoteru"), + Pair("Kyoshiro", "kyoshiro"), + Pair("Lolicons Anônimos", "lolicons anonimos"), + Pair("Nippon", "nippon"), + Pair("Oficial", "oficial"), + Pair("Proxy", "proxy"), + Pair("SubVision", "subvision"), + ) + + val studios = arrayOf( + every, + Pair("3xCube", "329"), + Pair("8bit", "75"), + Pair("A-1 Pictures", "39"), + Pair("A-Real", "233"), + Pair("A.C.G.T.", "185"), + Pair("Acca effe", "301"), + Pair("Actas", "133"), + Pair("AIC ASTA", "146"), + Pair("AIC Build", "277"), + Pair("AIC Classic", "237"), + Pair("AIC Frontier", "221"), + Pair("AIC PLUS+", "159"), + Pair("AIC Spirits", "110"), + Pair("AIC", "88"), + Pair("Ajia-Do", "93"), + Pair("Albacrow", "290"), + Pair("Anima&Co.", "274"), + Pair("animate Film", "90"), + Pair("Animation Do", "327"), + Pair("Animation Staff Room", "310"), + Pair("Ankama Animations", "214"), + Pair("Annapuru", "156"), + Pair("APPP", "138"), + Pair("ARECT", "332"), + Pair("Arms", "101"), + Pair("Artland", "130"), + Pair("Artmic", "89"), + Pair("Arvo Animation", "67"), + Pair("Asahi Production", "179"), + Pair("Asatsu DK", "147"), + Pair("Ascension", "308"), + Pair("Ashi Production", "189"), + Pair("asread.", "36"), + Pair("Asura Film", "199"), + Pair("AtelierPontdarc", "6"), + Pair("AXsiZ", "70"), + Pair("B.CMAY PICTURES", "154"), + Pair("B&T", "260"), + Pair("Bakken Record", "309"), + Pair("Bandai Namco Pictures", "132"), + Pair("Barnum Studio", "300"), + Pair("Bee Media", "119"), + Pair("Bee Train", "94"), + Pair("BeSTACK", "192"), + Pair("Bibury Animation Studios", "144"), + Pair("BigFireBird Animation", "249"), + Pair("Blade", "126"), + Pair("Bones", "9"), + Pair("Bouncy", "203"), + Pair("Brain's Base", "96"), + Pair("Bridge", "105"), + Pair("C-Station", "242"), + Pair("C2C", "53"), + Pair("CANDY BOX", "177"), + Pair("Chaos Project", "235"), + Pair("Children's Playground Entertainment", "66"), + Pair("China Literature Limited", "225"), + Pair("CLAP", "335"), + Pair("CloverWorks", "150"), + Pair("Colored Pencil Animation", "92"), + Pair("CoMix Wave Films", "19"), + Pair("Connect", "44"), + Pair("Craftar Studios", "184"), + Pair("Creators in Pack", "208"), + Pair("CygamesPictures", "294"), + Pair("D.A.S.T.", "165"), + Pair("DandeLion Animation Studio", "161"), + Pair("Darts", "291"), + Pair("Daume", "35"), + Pair("David Production", "83"), + Pair("Digital Network Animation", "341"), + Pair("Diomedéa", "32"), + Pair("DLE", "111"), + Pair("DMM.futureworks", "153"), + Pair("Doga Kobo", "37"), + Pair("domerica", "272"), + Pair("Dongwoo A&E", "181"), + Pair("DRAWIZ", "320"), + Pair("Drive", "157"), + Pair("Dwango", "81"), + Pair("Dynamic Planning", "190"), + Pair("Dynamo Pictures", "173"), + Pair("E&G Films", "288"), + Pair("Egg Firm", "85"), + Pair("Eiken", "134"), + Pair("EKACHI EPILKA", "56"), + Pair("Emon", "125"), + Pair("EMT Squared", "164"), + Pair("Encourage Films", "86"), + Pair("ENGI", "4"), + Pair("Ezόla", "246"), + Pair("Fanworks", "155"), + Pair("feel.", "65"), + Pair("Felix Film", "231"), + Pair("Fifth Avenue", "169"), + Pair("Filmlink International", "140"), + Pair("FILMONY", "311"), + Pair("FLAGSHIP LINE", "64"), + Pair("G-angle", "240"), + Pair("G&G Entertainment", "304"), + Pair("Gainax Kyoto", "232"), + Pair("Gainax", "80"), + Pair("Gallop", "186"), + Pair("Gambit", "52"), + Pair("Gathering", "259"), + Pair("GEEK TOYS", "261"), + Pair("GEMBA", "280"), + Pair("Geno Studio", "26"), + Pair("GIFTanimation", "47"), + Pair("Giga Production", "302"), + Pair("Ginga Ya", "295"), + Pair("GoHands", "31"), + Pair("Gonzo", "116"), + Pair("Gosay Studio", "313"), + Pair("Graphinica", "63"), + Pair("Green Monster Team", "248"), + Pair("GRIZZLY", "337"), + Pair("Group TAC", "117"), + Pair("Grouper Productions", "183"), + Pair("Hal Film Maker", "14"), + Pair("Haoliners Animation League", "124"), + Pair("Hiro Media", "253"), + Pair("Hoods Drifters Studio", "265"), + Pair("Hoods Entertainment", "79"), + Pair("HORNETS", "298"), + Pair("Hotline", "198"), + Pair("HOTZIPANG", "158"), + Pair("I.Gzwei", "299"), + Pair("ILCA", "281"), + Pair("IMAGICA Lab.", "315"), + Pair("Imagineer", "166"), + Pair("Indivision", "57"), + Pair("Ishimori Entertainment", "333"), + Pair("Issen", "285"), + Pair("ixtl", "215"), + Pair("Iyasakadou Film", "247"), + Pair("J.C.Staff", "8"), + Pair("Japan Vistec", "123"), + Pair("K-Factory", "128"), + Pair("Kachidoki Studio", "278"), + Pair("Kamikaze Douga", "23"), + Pair("Karaku", "127"), + Pair("Khara", "238"), + Pair("Kigumi", "342"), + Pair("Kinema Citrus", "22"), + Pair("Kitty Film Mitaka Studio", "129"), + Pair("Kitty Films", "131"), + Pair("Knack Productions", "142"), + Pair("Kyoto Animation", "76"), + Pair("l-a-unch・BOX", "122"), + Pair("L²Studio", "102"), + Pair("LandQ studios", "257"), + Pair("Lapin Track", "229"), + Pair("Larx Entertainment", "40"), + Pair("Lay-duce", "171"), + Pair("Lerche", "49"), + Pair("Lesprit", "91"), + Pair("LEVELS", "321"), + Pair("LIDENFILMS Kyoto Studio", "58"), + Pair("LIDENFILMS Osaka Studio", "306"), + Pair("LIDENFILMS", "55"), + Pair("Life Work", "296"), + Pair("LMD", "137"), + Pair("M.S.C", "220"), + Pair("Madhouse", "45"), + Pair("Magia Doraglier", "314"), + Pair("Magic Bus", "234"), + Pair("Maho Film", "108"), + Pair("Manglobe", "100"), + Pair("MAPPA", "7"), + Pair("Marone", "251"), + Pair("Marvy Jack", "178"), + Pair("Marza Animation Planet", "330"), + Pair("Millepensee", "218"), + Pair("Minami Machi Bugyousho", "222"), + Pair("MMT Technology", "322"), + Pair("Mushi Production", "175"), + Pair("Namu Animation", "250"), + Pair("NAZ", "149"), + Pair("Nexus", "141"), + Pair("Nice Boat Animation", "317"), + Pair("Nihon Ad Systems", "293"), + Pair("Nippon Animation", "34"), + Pair("Nomad", "43"), + Pair("Nut", "262"), + Pair("Oh! Production", "254"), + Pair("Okuruto Noboru", "191"), + Pair("OLM Digital", "286"), + Pair("OLM Team Yoshioka", "339"), + Pair("OLM", "28"), + Pair("Orange", "95"), + Pair("Ordet", "269"), + Pair("Original Force", "324"), + Pair("P.A. Works", "98"), + Pair("P.I.C.S.", "312"), + Pair("Palm Studio", "118"), + Pair("Passione", "72"), + Pair("Pastel", "78"), + Pair("Picture Magic", "268"), + Pair("Pierrot Plus", "10"), + Pair("Pine Jam", "106"), + Pair("Platinum Vision", "263"), + Pair("Polygon Pictures", "77"), + Pair("PPM", "180"), + Pair("PRA", "87"), + Pair("Primastea", "282"), + Pair("Production +h.", "343"), + Pair("production doA", "136"), + Pair("Production GoodBook", "264"), + Pair("Production I.G", "21"), + Pair("Production IMS", "99"), + Pair("Production Reed", "197"), + Pair("Project No.9", "209"), + Pair("Purple Cow Studio Japan", "270"), + Pair("Quad", "338"), + Pair("Qualia Animation", "104"), + Pair("Radix", "160"), + Pair("RAMS", "245"), + Pair("Remic", "307"), + Pair("Revoroot", "284"), + Pair("Rising Force", "168"), + Pair("Robot Communications", "266"), + Pair("Rockwell Eyes", "244"), + Pair("Ruo Hong Culture", "319"), + Pair("Saetta", "305"), + Pair("Samsara Animation Studio", "318"), + Pair("Sanrio", "256"), + Pair("SANZIGEN", "170"), + Pair("Satelight", "46"), + Pair("Science SARU", "27"), + Pair("Seven Arcs Pictures", "202"), + Pair("Seven Arcs", "42"), + Pair("Seven Stone Entertainment", "292"), + Pair("Shaft", "30"), + Pair("Shanghai Foch Film and TV Culture Investment", "267"), + Pair("Shenying Animation", "336"), + Pair("Shin-Ei Animation", "84"), + Pair("Shinkuukan", "283"), + Pair("Shirogumi", "151"), + Pair("Shuka", "82"), + Pair("SIDO LIMITED", "303"), + Pair("Signal.MD", "73"), + Pair("SILVER LINK.", "1"), + Pair("Soft Garage", "213"), + Pair("Sola Digital Arts", "279"), + Pair("Soyep", "297"), + Pair("Space Neko Company", "115"), + Pair("Sprite Animation Studios", "287"), + Pair("Square Enix", "326"), + Pair("Steve N' Steven", "243"), + Pair("Stingray", "174"), + Pair("Studio 3Hz", "148"), + Pair("Studio 4°C", "172"), + Pair("Studio A-CAT", "120"), + Pair("Studio Animal", "331"), + Pair("Studio Bind", "74"), + Pair("Studio Blanc", "38"), + Pair("Studio Chizu", "210"), + Pair("Studio Colorido", "25"), + Pair("Studio Comet", "187"), + Pair("Studio Crocodile", "228"), + Pair("Studio Daisy", "323"), + Pair("Studio Deen", "12"), + Pair("Studio elle", "121"), + Pair("Studio Fantasia", "33"), + Pair("Studio Flad", "68"), + Pair("Studio Flag", "328"), + Pair("Studio Ghibli", "112"), + Pair("Studio Gokumi", "54"), + Pair("Studio Hibari", "205"), + Pair("Studio Jemi", "48"), + Pair("Studio Kafka", "334"), + Pair("Studio Kai", "193"), + Pair("Studio Kyuuma", "201"), + Pair("Studio LAN", "226"), + Pair("Studio Lings", "216"), + Pair("Studio Live", "230"), + Pair("Studio Matrix", "143"), + Pair("studio MOTHER", "340"), + Pair("Studio Nue", "217"), + Pair("Studio Palette", "71"), + Pair("Studio Pierrot", "2"), + Pair("Studio Ponoc", "206"), + Pair("Studio PuYUKAI", "196"), + Pair("Studio Rikka", "41"), + Pair("Studio Signal", "275"), + Pair("Studio Signpost", "11"), + Pair("Studio Unicorn", "252"), + Pair("Studio VOLN", "236"), + Pair("Studio World", "258"), + Pair("Sublimation", "51"), + Pair("Sunrise Beyond", "50"), + Pair("Sunrise", "29"), + Pair("SynergySP", "59"), + Pair("Tatsunoko Production", "17"), + Pair("Team TillDawn", "188"), + Pair("Team YokkyuFuman", "113"), + Pair("teamKG", "289"), + Pair("Tear Studio", "316"), + Pair("Telecom Animation Film", "182"), + Pair("Tencent Animation & Comics", "224"), + Pair("Tezuka Productions", "18"), + Pair("The Answer Studio", "139"), + Pair("Think Corporation", "255"), + Pair("TMS Entertainment", "13"), + Pair("TNK", "109"), + Pair("Todos", ""), + Pair("Toei Animation", "3"), + Pair("Toho Interactive Animation", "223"), + Pair("Tokyo Kids", "114"), + Pair("Tokyo Media Connections", "204"), + Pair("Tokyo Movie Shinsha", "135"), + Pair("Tomason", "195"), + Pair("Topcraft", "273"), + Pair("Trans Arts", "219"), + Pair("Tri-Slash", "211"), + Pair("Triangle Staff", "271"), + Pair("TriF Studio", "207"), + Pair("Trigger", "24"), + Pair("Trinet Entertainment", "200"), + Pair("TROYCA", "163"), + Pair("Twilight Studio", "241"), + Pair("TYO Animations", "107"), + Pair("Typhoon Graphics", "227"), + Pair("ufotable", "20"), + Pair("Vega Entertainment", "60"), + Pair("Venet", "145"), + Pair("View Works", "276"), + Pair("Visual Flight", "239"), + Pair("W-Toon Studio", "152"), + Pair("Wan Wei Mao Donghua", "325"), + Pair("WAO World", "167"), + Pair("White Fox", "97"), + Pair("Wit Studio", "16"), + Pair("Wolfsbane", "69"), + Pair("XEBEC M2", "103"), + Pair("Xebec", "15"), + Pair("XFLAG Pictures", "212"), + Pair("Yaoyorozu", "194"), + Pair("Yokohama Animation Lab", "5"), + Pair("Yostar Pictures", "176"), + Pair("Yumeta Company", "62"), + Pair("Zero-G", "61"), + Pair("Zexcs", "162"), + ) + + val producers = arrayOf( + every, + Pair("12 Diary Holders", "67"), + Pair("1st PLACE", "432"), + Pair("3xCube", "482"), + Pair("5pb.", "358"), + Pair("81 Produce", "119"), + Pair("A-1 Pictures", "650"), + Pair("A-Craft", "567"), + Pair("A-Line", "467"), + Pair("A-Sketch", "129"), + Pair("A3", "361"), + Pair("ABC Animation", "2"), + Pair("Abe Shuuji Jimusho", "594"), + Pair("AbemaTV", "726"), + Pair("AC Create", "622"), + Pair("AC-Bu", "677"), + Pair("ADK Emotions", "489"), + Pair("ADK Marketing Solutions", "111"), + Pair("Adores", "500"), + Pair("Aeon Entertainment", "317"), + Pair("AG-ONE", "642"), + Pair("Age Global Networks", "241"), + Pair("Agent 21", "764"), + Pair("Ai Addiction", "274"), + Pair("AIC Rights", "466"), + Pair("AIC", "208"), + Pair("AKABEiSOFT2", "728"), + Pair("Akatsuki", "487"), + Pair("Akita Shoten", "442"), + Pair("Alchemist", "647"), + Pair("Amber Film Works", "712"), + Pair("AMG Entertainment", "632"), + Pair("AMG MUSIC", "519"), + Pair("Amuse", "316"), + Pair("Amusement Media Academy", "507"), + Pair("AN Entertainment", "435"), + Pair("Anima&Co.", "267"), + Pair("Animaruya", "434"), + Pair("animate Film", "256"), + Pair("Animatic", "297"), + Pair("Animation 21", "623"), + Pair("Animation Do", "459"), + Pair("Animatsu Entertainment", "638"), + Pair("Animax", "164"), + Pair("Anime Beans", "695"), + Pair("Anime Consortium Japan", "250"), + Pair("Anime R", "497"), + Pair("Aniplex", "4"), + Pair("Ankama", "453"), + Pair("Annapuru", "347"), + Pair("Aoni Entertainment", "375"), + Pair("Aoni Production", "641"), + Pair("APDREAM", "686"), + Pair("Apollon", "444"), + Pair("AQUA ARIS", "269"), + Pair("Aquamarine", "702"), + Pair("AQUAPLUS", "512"), + Pair("arma bianca", "532"), + Pair("Arquebuse", "645"), + Pair("Artist Management Office", "249"), + Pair("Artmic", "465"), + Pair("Asahi Broadcasting", "162"), + Pair("Asahi Production", "176"), + Pair("Asahi Shimbun", "276"), + Pair("Asatsu DK", "143"), + Pair("ASCII Media Works", "204"), + Pair("Ashi Production", "579"), + Pair("Ashisuto", "724"), + Pair("Asmik Ace", "144"), + Pair("AT-X", "22"), + Pair("Atelier Musa", "215"), + Pair("Atlus", "651"), + Pair("Audio Highs", "236"), + Pair("Audio Planning U", "568"), + Pair("Audio Tanaka", "303"), + Pair("Avex Entertainment", "141"), + Pair("Avex Pictures", "18"), + Pair("Avex Technologies", "755"), + Pair("AZ Creative", "494"), + Pair("Azumaker", "424"), + Pair("Bandai Channel", "527"), + Pair("Bandai Namco Arts", "98"), + Pair("Bandai Namco Entertainment", "78"), + Pair("Bandai Namco Games", "216"), + Pair("Bandai Namco Live Creative", "293"), + Pair("Bandai Namco Rights Marketing", "404"), + Pair("Bandai Spirits", "96"), + Pair("Bandai Visual", "48"), + Pair("Banpresto", "152"), + Pair("Barnum Studio", "376"), + Pair("Beijing Enlight Pictures", "570"), + Pair("Beijing IMMG", "680"), + Pair("Being", "495"), + Pair("Beyond C.", "339"), + Pair("Big Bang", "696"), + Pair("Big West", "401"), + Pair("BIGFACE", "477"), + Pair("BIGLOBE", "461"), + Pair("bilibili", "159"), + Pair("Bit grooove promotion", "12"), + Pair("Bit Promotion", "336"), + Pair("BloomZ", "631"), + Pair("BMG Japan", "485"), + Pair("BookLive", "592"), + Pair("Bouncy", "171"), + Pair("Brave Hearts", "572"), + Pair("Bridge", "451"), + Pair("Broccoli", "170"), + Pair("BS Asahi", "369"), + Pair("BS Fuji", "118"), + Pair("BS Japan", "454"), + Pair("BS NTV", "194"), + Pair("BS-TBS", "286"), + Pair("BS11", "108"), + Pair("Bulls Eye", "535"), + Pair("Bungeishunjuu", "640"), + Pair("Bushiroad Move", "186"), + Pair("Bushiroad Music", "181"), + Pair("Bushiroad", "95"), + Pair("Buzz Wave", "766"), + Pair("C & I entertainment", "698"), + Pair("C-one", "625"), + Pair("CA-Cygames Anime Fund", "541"), + Pair("Cammot", "251"), + Pair("Capcom", "281"), + Pair("CBC Television", "323"), + Pair("CBS", "163"), + Pair("chara-ani.com", "66"), + Pair("Chiba TV", "421"), + Pair("Children's Playground Entertainment", "380"), + Pair("China Animation Characters", "476"), + Pair("China Film Animation", "679"), + Pair("China Literature Limited", "475"), + Pair("Christmas Holly", "581"), + Pair("Chrono Gear Creative", "462"), + Pair("Chugai Mining", "212"), + Pair("Chukyo TV Broadcasting", "97"), + Pair("CIC", "731"), + Pair("Cloud22", "455"), + Pair("Coamix", "563"), + Pair("Cocoro Free", "636"), + Pair("Code", "87"), + Pair("COLOPL", "658"), + Pair("Comic Animation", "518"), + Pair("Comic Umenohone", "582"), + Pair("comico", "445"), + Pair("COMICSMART", "717"), + Pair("CoMix Wave Films", "377"), + Pair("Contents Seed", "116"), + Pair("Cosmic Ray", "299"), + Pair("Cospa", "193"), + Pair("CREi", "736"), + Pair("Crest", "777"), + Pair("Cromea", "254"), + Pair("Crunchyroll SC Anime Fund", "183"), + Pair("CTW", "656"), + Pair("CUCURI", "771"), + Pair("Culture Entertainment", "595"), + Pair("CyberAgent", "99"), + Pair("CyberConnect2", "763"), + Pair("CyberStep", "552"), + Pair("Cyclone Graphics", "242"), + Pair("Cygames", "165"), + Pair("d-rights", "209"), + Pair("D-techno", "121"), + Pair("D.A.S.T.", "659"), + Pair("D.N. Dream Partners", "418"), + Pair("Da Huoniao Donghua", "683"), + Pair("Dai Nippon Printing", "393"), + Pair("Daiichi Shokai", "270"), + Pair("Daiichikosho", "606"), + Pair("Darts", "585"), + Pair("Daume", "732"), + Pair("DAX Production", "76"), + Pair("Dear Stage inc.", "147"), + Pair("Deho Gallery", "711"), + Pair("Delfi Sound", "70"), + Pair("Delightworks", "734"), + Pair("DeNA", "104"), + Pair("Dentsu Meitetsu Communications", "753"), + Pair("Dentsu", "26"), + Pair("Digital Frontier", "379"), + Pair("Digital Works", "730"), + Pair("Directions", "86"), + Pair("DIVE II Entertainment", "34"), + Pair("DMM Music", "106"), + Pair("DMM pictures", "62"), + Pair("DMM.com Labo", "573"), + Pair("DMM.com", "313"), + Pair("DMM.futureworks", "327"), + Pair("Docomo Anime Store", "127"), + Pair("Dream Creation", "300"), + Pair("Dream Force", "537"), + Pair("Dream Shift", "546"), + Pair("Drecom", "665"), + Pair("Duckbill Entertainment", "437"), + Pair("dugout", "16"), + Pair("Dwango", "68"), + Pair("Dynamic Planning", "569"), + Pair("Dynamo Pictures", "520"), + Pair("e-notion", "610"), + Pair("E&G Films", "217"), + Pair("Earth Star Entertainment", "328"), + Pair("eBooK Initiative Japan", "646"), + Pair("Echoes", "302"), + Pair("Egg Firm", "79"), + Pair("ELF-IN", "271"), + Pair("EMI", "387"), + Pair("Emon", "229"), + Pair("Enoki Films", "357"), + Pair("ensky", "513"), + Pair("entama", "130"), + Pair("Enterbrain", "153"), + Pair("Epicross", "463"), + Pair("eStream", "776"), + Pair("Eswood", "333"), + Pair("Evil Line Records", "312"), + Pair("Exa International", "314"), + Pair("Exit Tunes", "306"), + Pair("Eye Move", "372"), + Pair("F.M.F", "329"), + Pair("f4samurai", "363"), + Pair("FABTONE", "720"), + Pair("famima.com", "390"), + Pair("FanFan Inc.", "262"), + Pair("Fanworks", "539"), + Pair("FBC", "562"), + Pair("feng", "285"), + Pair("Fields", "291"), + Pair("FILMONY", "673"), + Pair("Flex Comix", "158"), + Pair("flying DOG", "23"), + Pair("Forecast Communications", "268"), + Pair("Fosun Entertainment Japan", "768"), + Pair("Free-Will", "257"), + Pair("Front Line", "604"), + Pair("Front Wing", "185"), + Pair("Frontier Works", "20"), + Pair("Fuji Creative", "123"), + Pair("Fuji TV", "7"), + Pair("Fuji&gumi Games", "706"), + Pair("Fujimi Shobo", "234"), + Pair("Fujio Production", "714"), + Pair("Fujipacific Music", "259"), + Pair("Fujishouji", "545"), + Pair("Fukuoka Broadcasting System", "385"), + Pair("FuRyu", "120"), + Pair("Futabasha", "491"), + Pair("FUTURE LEAP", "657"), + Pair("G-mode", "471"), + Pair("G&G Entertainment", "601"), + Pair("GAGA", "470"), + Pair("Gainax", "528"), + Pair("Gakken", "597"), + Pair("Gallop", "587"), + Pair("Gamegate", "308"), + Pair("GANSIS", "311"), + Pair("GDH", "213"), + Pair("Genco", "64"), + Pair("Geneon Universal Entertainment", "94"), + Pair("Gentosha Comics", "207"), + Pair("Gigno Systems", "373"), + Pair("Global Solutions", "175"), + Pair("Glovision", "56"), + Pair("Gonzo", "620"), + Pair("Good Smile Company", "148"), + Pair("Good Smile Film", "246"), + Pair("GOON TRAX", "719"), + Pair("GRANTdesign", "634"), + Pair("Graphinica", "243"), + Pair("GREE Entertainment", "205"), + Pair("Green Bunny", "578"), + Pair("Greenwood", "586"), + Pair("Group TAC", "222"), + Pair("GYAO!", "128"), + Pair("Gzbrain", "635"), + Pair("Hakoniwa Academy Student Council", "427"), + Pair("Hakuhodo DY Media Partners", "51"), + Pair("Hakuhodo DY Music & Pictures", "115"), + Pair("Hakusensha", "53"), + Pair("Hal Film Maker", "63"), + Pair("Half H.P Studio", "107"), + Pair("Haoliners Animation League", "230"), + Pair("Happinet Pictures", "58"), + Pair("Happy Elements", "433"), + Pair("Harappa", "509"), + Pair("Harmony Gold", "499"), + Pair("Hawkeye", "684"), + Pair("Hayakawa Shobou", "508"), + Pair("Heart Company", "112"), + Pair("HeART-BIT", "739"), + Pair("Heewon Entertainment", "664"), + Pair("Heiwa", "457"), + Pair("Heroz", "618"), + Pair("High Kick Entertainment", "210"), + Pair("Highlights Entertainment", "406"), + Pair("Hikari TV", "543"), + Pair("Hiroshima Television", "90"), + Pair("HJ Holdings", "746"), + Pair("HOBBY BASE Yellow Submarine", "556"), + Pair("Hobby Japan", "289"), + Pair("Hobibox", "332"), + Pair("Hochi Shimbun", "577"), + Pair("Hokkaido Azmacy", "740"), + Pair("Hokkaido Cultural Broadcasting", "630"), + Pair("Hoods Entertainment", "514"), + Pair("HoriPro International", "648"), + Pair("HoriPro", "378"), + Pair("Hotline", "103"), + Pair("HOTZIPANG", "325"), + Pair("Houbunsha", "72"), + Pair("Hulu", "381"), + Pair("I was a Ballerina", "264"), + Pair("I Will", "588"), + Pair("i0+", "177"), + Pair("ibis Capital Partners", "699"), + Pair("Ichigo Animation", "517"), + Pair("Ichijinsha", "360"), + Pair("Idea Factory", "138"), + Pair("ILCA", "749"), + Pair("Ima Group", "479"), + Pair("IMAGICA Lab.", "155"), + Pair("ImaginAsian Entertainment", "770"), + Pair("Imagine", "296"), + Pair("INCS toenter", "114"), + Pair("Index", "551"), + Pair("Infinite", "192"), + Pair("iQIYI", "748"), + Pair("it's", "157"), + Pair("Iwatobi High School Swimming Club", "741"), + Pair("J.C.Staff", "506"), + Pair("Japan Home Video", "619"), + Pair("Japan Sleeve", "596"), + Pair("Japan Volleyball Association", "765"), + Pair("jeux d'eau", "362"), + Pair("Jinnan Studio", "160"), + Pair("JM Animation", "338"), + Pair("JR East Marketing & Communications", "42"), + Pair("JTB Entertainment", "179"), + Pair("JTB Next Creation", "554"), + Pair("Jumondo", "287"), + Pair("Just Production", "391"), + Pair("JY Animation", "292"), + Pair("K-Factory", "627"), + Pair("Kadokawa Animation", "727"), + Pair("Kadokawa Contents Gate", "167"), + Pair("Kadokawa Daiei Studio", "515"), + Pair("Kadokawa Media (Taiwan)", "671"), + Pair("Kadokawa Media House", "113"), + Pair("Kadokawa Pictures Japan", "65"), + Pair("Kadokawa Shoten", "57"), + Pair("Kadokawa", "11"), + Pair("Kakao Japan", "492"), + Pair("Kamikaze Douga", "745"), + Pair("Kanetsu Investment", "174"), + Pair("Kanon Sound", "188"), + Pair("Kansai Telecasting", "228"), + Pair("KBS", "150"), + Pair("KDDI", "550"), + Pair("KEN ON", "417"), + Pair("KENMedia", "218"), + Pair("Khara", "414"), + Pair("Kids Station", "219"), + Pair("King Records", "74"), + Pair("Kinoshita Group Holdings", "247"), + Pair("Kinoshita Koumuten", "350"), + Pair("Kinoshita Management", "589"), + Pair("Kinyosha", "602"), + Pair("Kitty Films", "231"), + Pair("Kiyosumi High School Mahjong Club", "607"), + Pair("KJJ Animation", "682"), + Pair("KLab", "83"), + Pair("KlockWorx", "55"), + Pair("Kobunsha", "742"), + Pair("Kodansha", "36"), + Pair("Koei Tecmo Games", "663"), + Pair("Konami Digital Entertainment", "729"), + Pair("Konami", "468"), + Pair("KSS", "9"), + Pair("Kyoraku Industrial Holdings", "59"), + Pair("Lantis", "49"), + Pair("Lawson Entertainment", "45"), + Pair("Lawson HMV Entertainment", "41"), + Pair("Legs", "166"), + Pair("Level-5", "480"), + Pair("Liber Entertainment", "284"), + Pair("Libre", "574"), + Pair("LIDENFILMS", "662"), + Pair("LINE Corporation", "415"), + Pair("LinkedBrain", "549"), + Pair("Live Viewing Japan", "616"), + Pair("Lucent Pictures Entertainment", "576"), + Pair("Lucky Paradise", "750"), + Pair("m.o.e.", "536"), + Pair("M.S.C", "469"), + Pair("Mad Box", "681"), + Pair("Madhouse", "713"), + Pair("Mag Garden", "25"), + Pair("MAGES.", "73"), + Pair("Magic Bus", "187"), + Pair("Magic Capsule", "61"), + Pair("MAGNET", "85"), + Pair("Maho Film", "722"), + Pair("Mainichi Broadcasting System", "14"), + Pair("Manga Productions", "345"), + Pair("Marine Entertainment", "516"), + Pair("Marubeni", "456"), + Pair("Marui Group", "195"), + Pair("Marvel Entertainment", "410"), + Pair("Marvelous AQL", "309"), + Pair("Marvelous", "149"), + Pair("Media Do", "279"), + Pair("Media Factory", "137"), + Pair("Media Rings", "674"), + Pair("MediaLink Entertainment Limited", "538"), + Pair("MediaNet Pictures", "140"), + Pair("Medicos Entertainment", "226"), + Pair("Mellow Head", "599"), + Pair("Melonbooks", "639"), + Pair("Memory-Tech", "252"), + Pair("Micro Magazine Publishing", "109"), + Pair("Milestone Music Publishing", "202"), + Pair("Milky Cartoon", "621"), + Pair("Mill Creek Entertainment", "349"), + Pair("Mime Corporation", "156"), + Pair("Minami Machi Bugyousho", "305"), + Pair("Miracle Bus", "238"), + Pair("Miracle Robo", "237"), + Pair("Mirai-Kojo", "555"), + Pair("Mixer", "690"), + Pair("Miyagi Television Broadcasting", "383"), + Pair("Miyazaki Broadcasting", "633"), + Pair("Mobcast", "321"), + Pair("Möbius Tone", "708"), + Pair("Moonbell", "548"), + Pair("Movic", "28"), + Pair("Muse Communication", "168"), + Pair("Music Brains", "775"), + Pair("Music Ray'n", "203"), + Pair("My Theater D.D.", "407"), + Pair("Myrica Music", "184"), + Pair("NADA Holdings", "439"), + Pair("Nagoya Broadcasting Network", "398"), + Pair("Naver Webtoons", "474"), + Pair("NAZ", "557"), + Pair("NBCUniversal Entertainment Japan", "13"), + Pair("NEC Avenue", "443"), + Pair("Nelke Planning", "685"), + Pair("Nelvana", "426"), + Pair("NetEase", "399"), + Pair("Netflix", "84"), + Pair("NewGin", "580"), + Pair("Nexon", "122"), + Pair("NHK Enterprises", "134"), + Pair("NHK-BS2", "628"), + Pair("NHK", "30"), + Pair("NHN PlayArt", "478"), + Pair("NIANTIC", "386"), + Pair("NichiNare", "227"), + Pair("Nichion", "190"), + Pair("Nihon Ad Systems", "81"), + Pair("Nihon Falcom", "522"), + Pair("Nihon Keizai Koukokusha", "413"), + Pair("Nikkatsu", "341"), + Pair("Nintendo", "697"), + Pair("Nippon Animation", "335"), + Pair("Nippon Columbia", "92"), + Pair("Nippon Cultural Broadcasting", "105"), + Pair("Nippon Ichi Software", "412"), + Pair("Nippon Shuppan Hanbai (Nippan) K.K.", "490"), + Pair("Nippon Television Music", "364"), + Pair("Nippon Television Network", "77"), + Pair("Nishinippon Broadcasting", "504"), + Pair("Nitroplus", "180"), + Pair("North Stars Pictures", "342"), + Pair("Notes", "126"), + Pair("NTT Docomo", "253"), + Pair("NTT Plala", "182"), + Pair("OB Planning", "125"), + Pair("Office ENDLESS", "273"), + Pair("OLM", "502"), + Pair("Omnibus Japan", "133"), + Pair("On The Run", "304"), + Pair("On-Lead", "762"), + Pair("ONEMUSIC", "436"), + Pair("Orange", "605"), + Pair("Orchid Seed", "359"), + Pair("Overlap", "337"), + Pair("Palm Studio", "221"), + Pair("Parco", "609"), + Pair("Pazzy Entertainment", "561"), + Pair("pH Studio", "294"), + Pair("Pia", "591"), + Pair("Pierrot Plus", "611"), + Pair("Pink Pineapple", "511"), + Pair("Pioneer LDC", "298"), + Pair("Planet", "721"), + Pair("Plum", "488"), + Pair("Plus One", "735"), + Pair("Po10tial", "751"), + Pair("Polygon Pictures", "688"), + Pair("Pony Canyon Enterprise", "38"), + Pair("Pony Canyon", "35"), + Pair("PPP", "703"), + Pair("PRA", "233"), + Pair("Production Ace", "290"), + Pair("Production I.G", "19"), + Pair("Q-Tec", "244"), + Pair("Qiying Animation", "744"), + Pair("QREAZY", "759"), + Pair("Quaras", "629"), + Pair("Quatre Stella", "761"), + Pair("RAB Aomori Broadcasting", "738"), + Pair("Radio Osaka", "608"), + Pair("Radix", "422"), + Pair("Raku High Student Council", "351"), + Pair("Rakuonsha", "5"), + Pair("Rakuten", "521"), + Pair("RAY", "161"), + Pair("Remic", "603"), + Pair("Rex Entertainment", "704"), + Pair("Rialto Entertainment", "486"), + Pair("RightTracks", "670"), + Pair("Rironsha", "278"), + Pair("Robot Communications", "343"), + Pair("Romantica club !!", "747"), + Pair("Rondo Robe", "223"), + Pair("Royal Limousine", "530"), + Pair("Ryukyu Asahi Broadcasting", "348"), + Pair("S-TAR7", "716"), + Pair("Saban Brands", "689"), + Pair("Sakura Create", "69"), + Pair("Sammy", "154"), + Pair("Sankyo Planning", "752"), + Pair("Sanrio", "295"), + Pair("Sanyo Bussan", "669"), + Pair("SANZIGEN", "472"), + Pair("Sapporo Television Broadcasting", "382"), + Pair("Satelight", "531"), + Pair("Sav! The World Productions", "31"), + Pair("SB Creative", "409"), + Pair("Scarlet", "769"), + Pair("Science SARU", "60"), + Pair("Sega Interactive", "718"), + Pair("Sega", "322"), + Pair("Seikaisha", "737"), + Pair("Seven", "566"), + Pair("Shaft", "756"), + Pair("Shanghai Animation Film Studio", "450"), + Pair("Shanghai Tiantan Culture & Media", "438"), + Pair("Shelty", "558"), + Pair("Shimogumi", "593"), + Pair("Shin-Ei Animation", "320"), + Pair("Shinchosha", "501"), + Pair("Shinshokan", "245"), + Pair("Shizuoka Daiichi Television", "384"), + Pair("Shochiku Music Publishing", "767"), + Pair("Shochiku", "21"), + Pair("Shogakukan Music & Digital Entertainment", "542"), + Pair("Shogakukan-Shueisha Productions", "91"), + Pair("Shogakukan", "82"), + Pair("Shounen Gahousha", "334"), + Pair("Shout! Factory", "612"), + Pair("Show Corporation", "452"), + Pair("Showgate", "50"), + Pair("Shueisha", "6"), + Pair("Shufunotomo", "151"), + Pair("Shun Produce", "263"), + Pair("SILVER LINK.", "694"), + Pair("SKY Perfect Well Think", "353"), + Pair("SKY PerfecTV!", "275"), + Pair("Slow Curve", "272"), + Pair("SME Visual Works", "255"), + Pair("Smile Company", "40"), + Pair("Smiral Animation", "330"), + Pair("Soeishinsha", "324"), + Pair("Soft Garage", "258"), + Pair("SoftBank Creative", "248"), + Pair("SoftX", "523"), + Pair("Sogo Vision", "135"), + Pair("Sol Blade", "397"), + Pair("Sola Entertainment", "473"), + Pair("Sonilude", "169"), + Pair("Sony Creative Products", "498"), + Pair("Sony Interactive Entertainment", "666"), + Pair("Sony Music Communications", "71"), + Pair("Sony Music Entertainment", "29"), + Pair("Sony Music Solutions", "110"), + Pair("Sony PCL", "52"), + Pair("Sony Pictures Entertainment", "211"), + Pair("Sotsu Music Publishing", "214"), + Pair("Sotsu", "32"), + Pair("Sound Team Don Juan", "365"), + Pair("Souten no Ken", "691"), + Pair("Sovat Theater", "583"), + Pair("Spacey Music Entertainment", "534"), + Pair("Spectrum", "772"), + Pair("SPO Entertainment", "565"), + Pair("Square Enix", "1"), + Pair("Starchild Records", "132"), + Pair("Stardust Promotion", "615"), + Pair("Starry Cube", "654"), + Pair("Steve N' Steven", "449"), + Pair("STORY", "44"), + Pair("Straight Edge", "80"), + Pair("Strawberry Meets Pictures", "743"), + Pair("Stray Cats", "355"), + Pair("Studio A-CAT", "102"), + Pair("Studio Blanc", "701"), + Pair("Studio CHANT", "301"), + Pair("Studio Comet", "661"), + Pair("Studio elle", "280"), + Pair("Studio Fantasia", "428"), + Pair("Studio GOONEYS", "687"), + Pair("Studio Gram", "733"), + Pair("Studio Hibari", "265"), + Pair("Studio Jack", "47"), + Pair("Studio Junio", "754"), + Pair("Studio Kai", "705"), + Pair("Studio Kelmadick", "392"), + Pair("Studio Kikan", "199"), + Pair("Studio Kyuuma", "510"), + Pair("Studio LAN", "481"), + Pair("Studio Mausu", "33"), + Pair("Studio Mir", "571"), + Pair("Studio Moriken", "660"), + Pair("Studio NOIX", "346"), + Pair("Studio Nue", "402"), + Pair("Studio Pastoral", "405"), + Pair("Studio Pierrot", "493"), + Pair("Studio Saki Makura", "668"), + Pair("Studio Shamrock", "307"), + Pair("Studio Take Off", "693"), + Pair("Studio Tulip", "260"), + Pair("Studio Wombat", "626"), + Pair("Studio Zain", "408"), + Pair("studioGONG", "389"), + Pair("StudioRF Inc.", "544"), + Pair("Sumitomo", "145"), + Pair("Sumzap", "17"), + Pair("Sun TV", "93"), + Pair("Sunny Side Up", "440"), + Pair("Sunrise Music Publishing", "403"), + Pair("Sunrise", "239"), + Pair("SUPA LOVE", "653"), + Pair("Synergy Japan", "758"), + Pair("SynergySP", "757"), + Pair("T.O Entertainment", "644"), + Pair("Tablier Communications", "526"), + Pair("Takahashi Studio", "447"), + Pair("Takara Tomy A.R.T.S", "368"), + Pair("Takeshobo", "173"), + Pair("TAKI Corporation", "614"), + Pair("tamakoshi", "655"), + Pair("TAP", "8"), + Pair("Tapioca", "464"), + Pair("Tatsunoko Production", "598"), + Pair("TBS", "131"), + Pair("TC Entertainment", "356"), + Pair("TEAM Entertainment Inc.", "760"), + Pair("Techno Sound", "37"), + Pair("Teichiku Entertainment", "564"), + Pair("Telecom Animation Film", "318"), + Pair("Tencent Animation & Comics", "525"), + Pair("Tencent Japan", "524"), + Pair("Tencent Penguin Pictures", "282"), + Pair("Tezuka Productions", "352"), + Pair("The Answer Studio", "575"), + Pair("Think Corporation", "559"), + Pair("THINKR", "547"), + Pair("Three Fat Samurai", "396"), + Pair("TMS Entertainment", "142"), + Pair("TMS Music", "189"), + Pair("TMS-Kyokuchi", "584"), + Pair("TO Books", "411"), + Pair("Tochigi TV", "643"), + Pair("Todas", ""), + Pair("Toei Agency", "172"), + Pair("Toei Animation", "266"), + Pair("Toei Video", "319"), + Pair("Tohan Corporation", "590"), + Pair("TOHO animation", "15"), + Pair("Toho Interactive Animation", "725"), + Pair("Toho Music", "206"), + Pair("Toho Visual Entertainment", "709"), + Pair("Tohokushinsha Film Corporation", "101"), + Pair("Tokuma Japan Communications", "232"), + Pair("Tokuma Shoten", "224"), + Pair("Tokyo Animator Gakuin", "553"), + Pair("Tokyo Kids", "400"), + Pair("Tokyo Movie Shinsha", "288"), + Pair("Tokyo MX", "24"), + Pair("Tokyo Theatres", "678"), + Pair("TOMY Company", "649"), + Pair("Top Marshal", "560"), + Pair("Top-Insight International", "310"), + Pair("Toppan Printing", "484"), + Pair("Toranoana", "198"), + Pair("Tose", "672"), + Pair("Toshiba Digital Frontiers", "675"), + Pair("Toshiba EMI", "431"), + Pair("Toshiba Entertainment", "220"), + Pair("Tosho Printing", "637"), + Pair("Toy's Factory", "146"), + Pair("Toyo Recording", "394"), + Pair("Trans Arts", "371"), + Pair("Trick Block", "88"), + Pair("Trigger", "533"), + Pair("Trilogy Future Studio", "225"), + Pair("Trinet Entertainment", "540"), + Pair("Trinity Sound", "235"), + Pair("TRUSS", "441"), + Pair("Tsuburaya Productions", "692"), + Pair("Tsukuru no Mori", "613"), + Pair("TSUTAYA", "723"), + Pair("TV Aichi", "429"), + Pair("TV Asahi Music", "617"), + Pair("TV Asahi", "196"), + Pair("TV Osaka", "366"), + Pair("TV Saitama", "420"), + Pair("TV Tokyo Music", "10"), + Pair("TV Tokyo", "3"), + Pair("Twin Engine", "46"), + Pair("TYO Animations", "460"), + Pair("Typhoon Graphics", "715"), + Pair("U-NEXT", "458"), + Pair("Ultra Super Pictures", "136"), + Pair("Universal Music Japan", "496"), + Pair("Universal Pictures Japan", "600"), + Pair("Universal Studios", "707"), + Pair("VAP", "75"), + Pair("Victor Entertainment", "39"), + Pair("Video Market", "529"), + Pair("Visual 80", "331"), + Pair("Visual Arts", "100"), + Pair("Visual Vision", "277"), + Pair("VIZ Media", "624"), + Pair("voque ting", "43"), + Pair("Voyager Entertainment", "503"), + Pair("VV-ALKLINE", "710"), + Pair("W-Toon Studio", "326"), + Pair("Walt Disney Japan", "416"), + Pair("Walt Disney Studios", "344"), + Pair("WAO World", "505"), + Pair("Wargaming Japan", "178"), + Pair("Warner Bros. Japan", "54"), + Pair("Warner Bros. Pictures", "448"), + Pair("Warner Music Japan", "425"), + Pair("Wave Master", "773"), + Pair("Wawayu Animation", "124"), + Pair("Wicky.Records", "370"), + Pair("Wolfsbane", "652"), + Pair("World Cosplay Summit", "367"), + Pair("WOWMAX", "774"), + Pair("WOWOW", "191"), + Pair("Xebec", "201"), + Pair("XFLAG Pictures", "446"), + Pair("XFLAG", "240"), + Pair("Xing", "388"), + Pair("Y&N Brothers", "700"), + Pair("Yahoo! Japan", "197"), + Pair("Yamasa", "283"), + Pair("Yaoqi", "200"), + Pair("Yokohama Animation Lab", "676"), + Pair("Yomiko Advertising", "89"), + Pair("Yomiuri Advertising", "315"), + Pair("Yomiuri Shimbun", "419"), + Pair("Yomiuri Telecasting", "27"), + Pair("Yomiuri TV Enterprise", "261"), + Pair("Yoshimoto Creative Agency", "395"), + Pair("Yostar Pictures", "354"), + Pair("Youmex", "430"), + Pair("YTV", "117"), + Pair("Yuhodo", "139"), + Pair("YUKE'S", "340"), + Pair("Zack Promotion", "374"), + Pair("ZERO-A", "483"), + Pair("Zero-G Room", "423"), + Pair("ZOOM ENTERPRISE", "667"), + ) + + val genres = arrayOf( + Pair("Amor de meninas", "amor-de-meninas"), + Pair("Amor de meninos", "amor-de-meninos"), + Pair("Artes Marciais", "artes-marciais"), + Pair("Avant Garde", "avant-garde"), + Pair("Aventura", "aventura"), + Pair("Ação", "acao"), + Pair("Comédia", "comedia"), + Pair("Cotidiano", "cotidiano"), + Pair("Demência", "demencia"), + Pair("Demônios", "demonios"), + Pair("Drama", "drama"), + Pair("Ecchi", "ecchi"), + Pair("Erotica", "erotica"), + Pair("Escolar", "escolar"), + Pair("Espacial", "espacial"), + Pair("Esportes", "esportes"), + Pair("Fantasia", "fantasia"), + Pair("Fatia de vida", "fatia-de-vida"), + Pair("Ficção Científica", "ficcao-cientifica"), + Pair("Game", "game"), + Pair("Garotos amam", "garotos-amam"), + Pair("Gourmet", "gourmet"), + Pair("Harém", "harem"), + Pair("Hentai", "hentai"), + Pair("Histórico", "historico"), + Pair("Horror", "horror"), + Pair("Infantil", "infantil"), + Pair("Josei", "josei"), + Pair("Magia", "magia"), + Pair("Mecha", "mecha"), + Pair("Militar", "militar"), + Pair("Mistério", "misterio"), + Pair("Musical", "musical"), + Pair("Paródia", "parodia"), + Pair("Policial", "policial"), + Pair("Psicológico", "psicologico"), + Pair("Romance", "romance"), + Pair("Samurai", "samurai"), + Pair("Sci-Fi", "sci-fi"), + Pair("Seinen", "seinen"), + Pair("Shoujo", "shoujo"), + Pair("Shoujo-Ai", "shoujo-ai"), + Pair("Shounen", "shounen"), + Pair("Shounen-Ai", "shounen-ai"), + Pair("Slice of Life", "slice-of-life"), + Pair("Sobrenatural", "sobrenatural"), + Pair("Super Poderes", "super-poderes"), + Pair("Suspense", "suspense"), + Pair("Terror", "terror"), + Pair("Thriller", "thriller"), + Pair("Tragédia", "tragedia"), + Pair("Vampiros", "vampiros"), + Pair("Vanguarda", "vanguarda"), + Pair("Vida Escolar", "vida-escolar"), + Pair("Vida de trabalho", "vida-de-trabalho"), + Pair("Yaoi", "yaoi"), + Pair("Yuri", "yuri"), + ) + } +} diff --git a/src/pt/animesvision/src/eu/kanade/tachiyomi/animeextension/pt/animesvision/AVUrlActivity.kt b/src/pt/animesvision/src/eu/kanade/tachiyomi/animeextension/pt/animesvision/AVUrlActivity.kt new file mode 100644 index 000000000..c4c72c25b --- /dev/null +++ b/src/pt/animesvision/src/eu/kanade/tachiyomi/animeextension/pt/animesvision/AVUrlActivity.kt @@ -0,0 +1,43 @@ +package eu.kanade.tachiyomi.animeextension.pt.animesvision + +import android.app.Activity +import android.content.ActivityNotFoundException +import android.content.Intent +import android.os.Bundle +import android.util.Log +import kotlin.system.exitProcess + +/** + * Springboard that accepts https://animes.vision// intents + * and redirects them to the main Aniyomi process. + */ +class AVUrlActivity : Activity() { + + private val TAG = "AVUrlActivity" + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val pathSegments = intent?.data?.pathSegments + if (pathSegments != null && pathSegments.size > 1) { + val type = pathSegments[0] + val item = pathSegments[1] + val searchQuery = "$type/$item" + val mainIntent = Intent().apply { + action = "eu.kanade.tachiyomi.ANIMESEARCH" + putExtra("query", "${AnimesVision.PREFIX_SEARCH}$searchQuery") + putExtra("filter", packageName) + } + + try { + startActivity(mainIntent) + } catch (e: ActivityNotFoundException) { + Log.e(TAG, e.toString()) + } + } else { + Log.e(TAG, "could not parse uri from intent $intent") + } + + finish() + exitProcess(0) + } +} diff --git a/src/pt/animesvision/src/eu/kanade/tachiyomi/animeextension/pt/animesvision/AnimesVision.kt b/src/pt/animesvision/src/eu/kanade/tachiyomi/animeextension/pt/animesvision/AnimesVision.kt new file mode 100644 index 000000000..c69d11798 --- /dev/null +++ b/src/pt/animesvision/src/eu/kanade/tachiyomi/animeextension/pt/animesvision/AnimesVision.kt @@ -0,0 +1,390 @@ +package eu.kanade.tachiyomi.animeextension.pt.animesvision + +import android.app.Application +import android.content.SharedPreferences +import androidx.preference.ListPreference +import androidx.preference.PreferenceScreen +import eu.kanade.tachiyomi.animeextension.pt.animesvision.dto.AVResponseDto +import eu.kanade.tachiyomi.animeextension.pt.animesvision.dto.PayloadData +import eu.kanade.tachiyomi.animeextension.pt.animesvision.dto.PayloadItem +import eu.kanade.tachiyomi.animeextension.pt.animesvision.extractors.GlobalVisionExtractor +import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource +import eu.kanade.tachiyomi.animesource.model.AnimeFilterList +import eu.kanade.tachiyomi.animesource.model.AnimesPage +import eu.kanade.tachiyomi.animesource.model.SAnime +import eu.kanade.tachiyomi.animesource.model.SEpisode +import eu.kanade.tachiyomi.animesource.model.Video +import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource +import eu.kanade.tachiyomi.lib.doodextractor.DoodExtractor +import eu.kanade.tachiyomi.lib.streamtapeextractor.StreamTapeExtractor +import eu.kanade.tachiyomi.lib.voeextractor.VoeExtractor +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.POST +import eu.kanade.tachiyomi.network.asObservableSuccess +import eu.kanade.tachiyomi.util.asJsoup +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.async +import kotlinx.coroutines.awaitAll +import kotlinx.coroutines.runBlocking +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json +import okhttp3.HttpUrl.Companion.toHttpUrlOrNull +import okhttp3.Interceptor +import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.RequestBody.Companion.toRequestBody +import okhttp3.Response +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import rx.Observable +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get +import java.io.IOException +import java.lang.Exception + +class AnimesVision : ConfigurableAnimeSource, ParsedAnimeHttpSource() { + + override val name = "AnimesVision" + + override val baseUrl = "https://animes.vision" + + override val lang = "pt-BR" + + override val supportsLatest = true + + override val client: OkHttpClient = network.cloudflareClient.newBuilder() + .addInterceptor(::loginInterceptor) + .build() + + private val json = Json { + ignoreUnknownKeys = true + } + + private val preferences: SharedPreferences by lazy { + Injekt.get().getSharedPreferences("source_$id", 0x0000) + } + + override fun headersBuilder() = super.headersBuilder() + .add("Referer", baseUrl) + .add("Accept-Language", ACCEPT_LANGUAGE) + + // ============================== Popular =============================== + private fun nextPageSelector(): String = "ul.pagination li.page-item:contains(›):not(.disabled)" + override fun popularAnimeSelector(): String = "div#anime-trending div.item > a.film-poster" + override fun popularAnimeRequest(page: Int): Request = GET(baseUrl) + + override fun popularAnimeFromElement(element: Element): SAnime { + val anime = SAnime.create().apply { + val img = element.selectFirst("img")!! + setUrlWithoutDomain(element.attr("href")) + title = img.attr("title") + thumbnail_url = img.attr("src") + } + return anime + } + + override fun popularAnimeNextPageSelector() = null + + // ============================== Episodes ============================== + override fun episodeListSelector(): String = "div.container div.screen-items > div.item" + + private fun getAllEps(response: Response): List { + val epList = mutableListOf() + val url = response.request.url.toString() + val doc = if (url.contains("/episodio-") || url.contains("/filme-")) { + getRealDoc(response.asJsoup()) + } else { response.asJsoup() } + + val epElementList = doc.select(episodeListSelector()) + epList.addAll(epElementList.map { episodeFromElement(it) }) + if (doc.hasNextPage()) { + val nextUrl = doc.selectFirst(nextPageSelector())!! + .selectFirst("a")!! + .attr("href") + val newResponse = client.newCall(GET(nextUrl)).execute() + epList.addAll(getAllEps(newResponse)) + } + return epList + } + override fun episodeListParse(response: Response): List { + return getAllEps(response).reversed() + } + + override fun episodeFromElement(element: Element): SEpisode { + val episode = SEpisode.create().apply { + setUrlWithoutDomain(element.selectFirst("a")!!.attr("href")) + val epName = element.selectFirst("h3")!!.text().trim() + name = epName + episode_number = try { + epName.substringAfterLast(" ").toFloat() + } catch (e: NumberFormatException) { 0F } + } + return episode + } + + // ============================ Video Links ============================= + override fun videoListParse(response: Response): List