From 8f15d8559eeb015cae8e848f82b6996d58dfde93 Mon Sep 17 00:00:00 2001 From: Claudemirovsky <63046606+Claudemirovsky@users.noreply.github.com> Date: Wed, 5 Jul 2023 07:56:01 +0000 Subject: [PATCH] feat(src/pt): Re-add AnimesVision for the 99898928374th time (#1839) --- src/pt/animesvision/AndroidManifest.xml | 23 + src/pt/animesvision/build.gradle | 21 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3005 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1626 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4429 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8715 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 12535 bytes .../pt/animesvision/AVFilters.kt | 1510 +++++++++++++++++ .../pt/animesvision/AVUrlActivity.kt | 43 + .../pt/animesvision/AnimesVision.kt | 356 ++++ .../pt/animesvision/dto/AnimesVisionDto.kt | 41 + .../extractors/GlobalVisionExtractor.kt | 17 + 12 files changed, 2011 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..8164a545f --- /dev/null +++ b/src/pt/animesvision/AndroidManifest.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + diff --git a/src/pt/animesvision/build.gradle b/src/pt/animesvision/build.gradle new file mode 100644 index 000000000..ff8cb3f0d --- /dev/null +++ b/src/pt/animesvision/build.gradle @@ -0,0 +1,21 @@ +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.kotlin.android) + alias(libs.plugins.kotlin.serialization) +} + +ext { + extName = 'AnimesVision' + pkgNameSuffix = 'pt.animesvision' + extClass = '.AnimesVision' + extVersionCode = 17 + 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..ed2a0a0045c8569a03b8d4f2df5527c9ba3873cc GIT binary patch literal 3005 zcmV;u3qtgXP)%|!VSwQrPy*4FBuG3radQ~Yhz1jnu%&3$Xk0}_*N6&* z*YjG2#*bA3vPM4E2{Z!YQAi`8MnK|%NTY%zRuBjDd52n4$He$8dK8oS`}@1PySu-q z)oR=5bUNp{5}yKPFc_>>W@*1v+l`f*E04C-0+Gw*8Yd^GYZ{H_)a~21AJQhPjpkE> zqCs>GcNw5v~{rsjVq!q&f^@o_qW^iZu<=O`44(ER-Td({ zkgR$0=AJ}*OKE9oAFcpP9kI6W8F$`d8_l)D)6??=xnl4``dCtuH9$%~Kfk|KR#qmG zay;r+zzT#VpREAvmu+hqGMTL0&CM;exVSil%F~)tktIOfc1Ir{pGdu4|0OlRqODjU zG(;X-p_rU#y;7;1S5;LNPi?H?OkxVj5+FHcbRr4HkYA^=#GHnJAf`+K0GE(M=2Bgi z=4@sSkV_q)DMmmIWwU1lqP81mz%3;}^JrIvxnOMxkb*Kh8v&VuF|9~U2hG7Z)+ay( zmO9U}J)sUzxnMvv6vog{_`8Dm!0_#VMjd8>Qa?|_0kUSf|94pR+Aa+sF*dViL9zDa zQzhSis$U!+8pWQlm^o!g0idBlSt(yyKzz1h?I>$LTSiVHL0&Qiu~^L3xMK?}2J0~0 zc8CH*m*G#1Vk{Qp1NBD&F$GKiCs2F1>mcF7yg5KDO5(Gj7~4n5iu^6j?1MrLtIJkS#z(DaafkRuxGJ$HtBuoy9j*Z2K^83P=nbA#q1YUKVBX z&2P(Y?Yht7R)CFdl%_Ue!8m(IY!NsZQR+ao*u5DE+O(5d%u$ZB-B zd?5pYeFuXk%qczq=g*x+McD)NdOrv>L5Hl|AE0giGRiVjQC(61&v%0%w^zZS*P-gi zYpBS-2G7nxuxr^0+T4rKl@~+xY6ldiZGv235BDAeAb-Idl^JO$zjYCw9fKfuaY0e$ zJ~%af1rGjyMsZdO^wr!nG;9at?Cku+C^j^78dfZf#Hyq%h@CS7oq7(y?&RedIw}G` z-O58;TpXfj&By+o>oIphJesv=iOBGgm=GR?!)Zs5ej*L|ckW^GXVExwVh?v^f~u-& zL@!u}KJUGQUR~crX;}qgwjRO75Bs8e@lup$rNJ|KH{{=62mD`xW^*!Rj}5S&{UvI& zTGX7$f%fVpIF1~RlHr5kJUkS39}T8QfjXezK8m8k;2H86WZgTVXwoP+I5&mrA7QvV zH3W}K?n?(qVef*3m21(|%bU)m7LzB0qU{?2*tKyvGR|Jb%z29t8xvUzC}n37Vizt) ztJdu>WZ?VQzAFU>j-1A!-D_|m_XYurL|RHR=EbeW(eIAKMP-lV4T)H=I0;$lX^<)H zpjwg$-1rHVse9n^&vFN?=xO(`6E^oDb27&OzS!7(-# znxxgxT*`)e@oMOf9fzGyGa$G>bQ`xon|X@L8Halupi&6|xi)Em!>Rl5_4Z>J*snW2 z3!e-h-&Tl;o&w)yURbbV8$Rsa3DL7-NkIfCZYAD+>n-^Dwt(hQ1@-kV+PCq8+RYiC z5}@M;HY5L+Uva;%2s7s=AbR>_v~Tq?R;=BEt;y@)5iuKf?{tKIUn&#>f>07Z4(hlS zs3Jger6ZJIM8J@F24ySaq3qU;08NDct0j<656ArppP>4eJb2Gr1*L0K)I2BxUT+7u zxdMyVKp*^pbbySbSeJnQ_}AB~uqbf{Mh)$YnR6FGr#B#c;#d@yRG`hPzPNqoKIX>8 z{RU{!Dg^fIj>>8S++AJpQVTDn9?L;sx7RW8^O-o3@(nW2UP0c?e5_l$4kQ{xMNP+F z`}9CqL=>_sWpIp{1)RGALwOl~jr$xguG>q1l2Lqg8=4NC47)L-P;=u)=rS^3KWrEb zUnM{mIT`oIe~juox8OY|5lS^FzVHF5QVG1)2DteP^eP1b8YPW_Y5`FI4jC7Y(9t2t z%*sKRPJh9%^z%5GoWo-?yK^EE3yL|&vQx763c?Z0z`qic+zM*x|4_I9H1?mVE<+()O73snc4$2=~>WT zzXXTBhoE%i5I9eq0!6p3s3|LloPO9+6d4AOVG~eYS%ix9iD#qYUTx`zW5-Y8>bb+v zKi0r2U?>#L{)EE)>tWDo@j~#YsLH(nnOq4~&-bA(C_u@fZLs%i1DB3HQMfq)az|%) z359PLmQ#jaFd84hIu2P-*0M6rVQ$D zw{!z5)s3xGvy`T7mIRQct7jH)EVGb8^N4{ZIUu3;Vq%pfrt^Hqnt>zUVy1xj)WmwP zCR8;nR<(BDWdV*ffcT&YRSn-wsLfg?^q zrhueYk}WnfRUaQL9ysCwSqjo(hIp2EVoM&D6Da8@#wo}gAijpM25M`Ta5FZehp3y2SfEfy1MJ%&yT$s!IA z)nxYBytx+e!4qRKAw3qDx8VUv35HLB0z1!=-6lZXdNCJ@L6P*$C2sZ46Th>uRaEo{UL+Lc7yLE85ZDwCE!24nWI?#cVst$~OJq7U{`v-EcST$!M zF3xaj;Z(#W4vtMP7BJSrDT!MaZcN<&&m$bJKO7(~J*Gszu&Pa>UQJQ|R2W}u@;txb z#0bdv&8za~RSCQulPW_aARdy9fEodbGuwXwvp0+1ePRB700000NkvXXu0mjfC~Isk 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..a8b447412401c82eeeddd57420bc0a68b59eb8d8 GIT binary patch literal 1626 zcmV-g2BrClP)WaBlqnK1!f-OARxt?jzbb1Eg}dfR($Thfr&U{$g&vQ` z=(}-X;NNHXw*LG4b1eVGo=4BiWHOsttu7^cR#~l9jt?OOph!#{+q zQlqcWjpV_pxYp80wrOanJB|m&%|OfVmoaK|CLP1$()n7X3>)d4hFtf^(A{8xGI1~z zdL#N>y>R_`6|v){z}Zj-m3bJt>Z_q0ItKCt6YRfLLpM4Lj;jscdz{u*^x3`ROE!SG zxHzu^*$>ahp3k-*Yw}Fw=jTJC(W3r*J#JX-SdsSv)^FI1cZ*hG^7I^Bss9yEJ+~Ys z9~a?Z{9Jn=;tzs-*+0UAGA-Y4@Z2yZx9xZ5pyBPQ;O87Sx`t zMSk9k*jDm6mgl{M&D+1gYq<-sdfi7Te*1Oo+Px2#8(Xnr*N5PDnFWQ(4Asns z(7Uq)F;k}?#+V3qb0ciqH(}7;gYcX_gYJtpaGa`!X+sIn+Y1o4J&jGcx$jeH0A%)K zg-nhg51#y$!Lm=Ar%l)iA9rCZqdKD6?n4V>yfNb0-ME zF_<>)z<|qzfm0U9<~<7A(&wcE=!_{iu>Sy_Ui>n?+Pf1qXX~-AtPCG+D8>hycXB+>k379i`7R(2#(6hf3uFDsoeQZ8t z9bLf4;pnfeg>v>>^c1gyW@Q09ZEbL!JP!5D9CYR{Mf~>_us!>vGyt7WXN@x^V@T?7 zT&g>XtOs+@Me_Cf)hoEqJOrGbLuy(&Y#r@rxBdmSmdrjqPAF8dAoFR+Nh5A*Zo$YA z!%%BE16x}Q;>Kpf(b`DA2tYY#2$_k}QTZH+HJm z5pBjKIGQh@uglvk*%~ng;P(MS6P!SO0n71VJv9G*U){_ATCFx{KOj^=C_`_t{=!eV zZNX9OZIErs|1Lg^Gq zkU;4gate`ek<1PRi*5uXFUeNIl}Z(|1EGL02oD{A^>r#1-9Y_> z1o7-|A*E6&=m0BBFtHLEtPmSpN9GT}Dq2eKEHUc-m$LyV6pDyBAOv8-xrVF2wjK4906uLeT@bfwaFv#WdPsqG>5&sFS=@en%J{fz+&N5Oc$n6C` zp(Q3YxgeE56p`(03M6DXivwY#ivO)ta5*W3r2IjO!~diZ06nH9C4m$@DGE~P%1tzW zG}3*f&~>q!r1bblp9%`JPE3ze;mTX$qqU+>0cgHc2)a7?pS9v>35%GU{{uuUlp#Lo YAO0y=i{}S?egFUf07*qoM6N<$f|&{UR{#J2 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..de9e87f4a1937d530c0fa45188bf4505a4014a10 GIT binary patch literal 4429 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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..f29432639 --- /dev/null +++ b/src/pt/animesvision/src/eu/kanade/tachiyomi/animeextension/pt/animesvision/AVFilters.kt @@ -0,0 +1,1510 @@ +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.getFirst(): R { + return first { it is R } as R + } + + private inline fun AnimeFilterList.parseCheckbox( + options: Array>, + ): String { + return (getFirst() as CheckBoxFilterList).state + .filter { it.state } + .map { checkbox -> options.find { it.first == checkbox.name }!!.second } + .filter(String::isNotBlank) + .joinToString(",") + } + + private inline fun AnimeFilterList.asQueryPart(): String { + return (getFirst() 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.INITIAL_YEAR) + class LastYearFilter : QueryPartFilter("Ano Final", AVFiltersData.LAST_YEAR) + 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 FILTER_LIST get() = 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() + + return FilterSearchParams( + filters.asQueryPart(), + filters.asQueryPart(), + filters.asQueryPart(), + filters.asQueryPart(), + filters.asQueryPart(), + filters.asQueryPart(), + filters.asQueryPart(), + filters.asQueryPart(), + filters.asQueryPart(), + filters.asQueryPart(), + filters.parseCheckbox(AVFiltersData.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 INITIAL_YEAR = (1917..2023).map { + Pair(it.toString(), it.toString()) + }.toTypedArray() + + val LAST_YEAR = INITIAL_YEAR.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..d8c55289f --- /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..fd17e9a96 --- /dev/null +++ b/src/pt/animesvision/src/eu/kanade/tachiyomi/animeextension/pt/animesvision/AnimesVision.kt @@ -0,0 +1,356 @@ +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.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 uy.kohesive.injekt.injectLazy +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 = network.cloudflareClient.newBuilder() + .addInterceptor(::loginInterceptor) + .build() + + private val json: Json by injectLazy() + + 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() = "ul.pagination li.page-item:contains(›):not(.disabled)" + override fun popularAnimeSelector() = "div#anime-trending div.item > a.film-poster" + override fun popularAnimeRequest(page: Int) = GET(baseUrl, headers) + + override fun popularAnimeFromElement(element: Element) = SAnime.create().apply { + val img = element.selectFirst("img")!! + setUrlWithoutDomain(element.attr("href")) + title = img.attr("title") + thumbnail_url = img.attr("src") + } + + override fun popularAnimeNextPageSelector() = null + + // ============================== Episodes ============================== + override fun episodeListSelector() = "div.container div.screen-items > div.item" + + private fun getAllEps(response: Response): List { + var doc = getRealDoc(response.use { it.asJsoup() }) + + return buildList { + do { + addAll(doc.select(episodeListSelector()).map(::episodeFromElement)) + if (doc.hasNextPage()) { + val nextUrl = doc.selectFirst(nextPageSelector())!! + .selectFirst("a")!! + .attr("href") + doc = client.newCall(GET(nextUrl)).execute().use { it.asJsoup() } + } + } while(doc.hasNextPage()) + } + } + override fun episodeListParse(response: Response): List { + return getAllEps(response).reversed() + } + + override fun episodeFromElement(element: Element) = SEpisode.create().apply { + setUrlWithoutDomain(element.selectFirst("a")!!.attr("href")) + val epName = element.selectFirst("h3")!!.text().trim() + name = epName + episode_number = epName.substringAfterLast(" ").toFloatOrNull() ?: 0F + } + + // ============================ Video Links ============================= + override fun videoListParse(response: Response): List