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 000000000..72b78599d Binary files /dev/null and b/src/pt/animesvision/res/mipmap-hdpi/ic_launcher.png differ 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 000000000..6b9685c85 Binary files /dev/null and b/src/pt/animesvision/res/mipmap-mdpi/ic_launcher.png differ 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 000000000..6fc747c92 Binary files /dev/null and b/src/pt/animesvision/res/mipmap-xhdpi/ic_launcher.png differ 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 000000000..f0e989a3c Binary files /dev/null and b/src/pt/animesvision/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/src/pt/animesvision/res/mipmap-xxxhdpi/ic_launcher.png b/src/pt/animesvision/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..1ebb1ad9a Binary files /dev/null and b/src/pt/animesvision/res/mipmap-xxxhdpi/ic_launcher.png differ 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