Madara (#3265) New sources, updates
* Madara - new sources, fixes * arang
This commit is contained in:
parent
6b0b72dd83
commit
33250b7e19
|
@ -5,7 +5,7 @@ ext {
|
||||||
appName = 'Tachiyomi: Madara (multiple sources)'
|
appName = 'Tachiyomi: Madara (multiple sources)'
|
||||||
pkgNameSuffix = "all.madara"
|
pkgNameSuffix = "all.madara"
|
||||||
extClass = '.MadaraFactory'
|
extClass = '.MadaraFactory'
|
||||||
extVersionCode = 95
|
extVersionCode = 96
|
||||||
libVersion = '1.2'
|
libVersion = '1.2'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -128,8 +128,10 @@ abstract class Madara(
|
||||||
|
|
||||||
// Search Manga
|
// Search Manga
|
||||||
|
|
||||||
|
protected open fun searchPage(page: Int): String = "page/$page/"
|
||||||
|
|
||||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||||
val url = HttpUrl.parse("$baseUrl/page/$page/")!!.newBuilder()
|
val url = HttpUrl.parse("$baseUrl/${searchPage(page)}")!!.newBuilder()
|
||||||
url.addQueryParameter("s", query)
|
url.addQueryParameter("s", query)
|
||||||
url.addQueryParameter("post_type", "wp-manga")
|
url.addQueryParameter("post_type", "wp-manga")
|
||||||
filters.forEach { filter ->
|
filters.forEach { filter ->
|
||||||
|
@ -161,22 +163,19 @@ abstract class Madara(
|
||||||
url.addQueryParameter("m_orderby", filter.toUriPart())
|
url.addQueryParameter("m_orderby", filter.toUriPart())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
is GenreConditionFilter -> {
|
||||||
|
url.addQueryParameter("op", filter.toUriPart())
|
||||||
|
}
|
||||||
is GenreList -> {
|
is GenreList -> {
|
||||||
val genreInclude = mutableListOf<String>()
|
filter.state
|
||||||
filter.state.forEach {
|
.filter { it.state }
|
||||||
if (it.state) {
|
.let { list ->
|
||||||
genreInclude.add(it.id)
|
if (list.isNotEmpty()) { list.forEach { genre -> url.addQueryParameter("genre[]", genre.id) } }
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (genreInclude.isNotEmpty()) {
|
|
||||||
genreInclude.forEach { genre ->
|
|
||||||
url.addQueryParameter("genre[]", genre)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return GET(url.build().toString(), headers)
|
return GET(url.toString(), headers)
|
||||||
}
|
}
|
||||||
|
|
||||||
private class AuthorFilter : Filter.Text("Author")
|
private class AuthorFilter : Filter.Text("Author")
|
||||||
|
@ -192,6 +191,10 @@ abstract class Madara(
|
||||||
Pair("Most Views", "views"),
|
Pair("Most Views", "views"),
|
||||||
Pair("New", "new-manga")
|
Pair("New", "new-manga")
|
||||||
))
|
))
|
||||||
|
private class GenreConditionFilter : UriPartFilter("Genre condition", arrayOf(
|
||||||
|
Pair("or", ""),
|
||||||
|
Pair("and", "1")
|
||||||
|
))
|
||||||
private class GenreList(genres: List<Genre>) : Filter.Group<Genre>("Genres", genres)
|
private class GenreList(genres: List<Genre>) : Filter.Group<Genre>("Genres", genres)
|
||||||
class Genre(name: String, val id: String = name) : Filter.CheckBox(name)
|
class Genre(name: String, val id: String = name) : Filter.CheckBox(name)
|
||||||
|
|
||||||
|
@ -265,6 +268,7 @@ abstract class Madara(
|
||||||
OrderByFilter(),
|
OrderByFilter(),
|
||||||
Filter.Separator(),
|
Filter.Separator(),
|
||||||
Filter.Header("Genres may not work for all sources"),
|
Filter.Header("Genres may not work for all sources"),
|
||||||
|
GenreConditionFilter(),
|
||||||
GenreList(getGenreList())
|
GenreList(getGenreList())
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
package eu.kanade.tachiyomi.extension.all.madara
|
package eu.kanade.tachiyomi.extension.all.madara
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.source.Source
|
import eu.kanade.tachiyomi.source.Source
|
||||||
import eu.kanade.tachiyomi.source.SourceFactory
|
import eu.kanade.tachiyomi.source.SourceFactory
|
||||||
import eu.kanade.tachiyomi.source.model.Filter
|
import eu.kanade.tachiyomi.source.model.Filter
|
||||||
import eu.kanade.tachiyomi.source.model.FilterList
|
import eu.kanade.tachiyomi.source.model.FilterList
|
||||||
import eu.kanade.tachiyomi.source.model.MangasPage
|
|
||||||
import eu.kanade.tachiyomi.source.model.Page
|
import eu.kanade.tachiyomi.source.model.Page
|
||||||
import eu.kanade.tachiyomi.source.model.SChapter
|
import eu.kanade.tachiyomi.source.model.SChapter
|
||||||
import eu.kanade.tachiyomi.source.model.SManga
|
import eu.kanade.tachiyomi.source.model.SManga
|
||||||
|
@ -56,7 +56,6 @@ class MadaraFactory : SourceFactory {
|
||||||
MangaDods(),
|
MangaDods(),
|
||||||
MangaKiss(),
|
MangaKiss(),
|
||||||
MangaKomi(),
|
MangaKomi(),
|
||||||
MangaLaw(),
|
|
||||||
Mangalek(),
|
Mangalek(),
|
||||||
MangaLord(),
|
MangaLord(),
|
||||||
MangaRead(),
|
MangaRead(),
|
||||||
|
@ -95,7 +94,6 @@ class MadaraFactory : SourceFactory {
|
||||||
TsubakiNoScan(),
|
TsubakiNoScan(),
|
||||||
UnknownScans(),
|
UnknownScans(),
|
||||||
Wakamics(),
|
Wakamics(),
|
||||||
WordRain(),
|
|
||||||
WuxiaWorld(),
|
WuxiaWorld(),
|
||||||
YaoiToshokan(),
|
YaoiToshokan(),
|
||||||
YokaiJump(),
|
YokaiJump(),
|
||||||
|
@ -121,7 +119,10 @@ class MadaraFactory : SourceFactory {
|
||||||
MangaYosh(),
|
MangaYosh(),
|
||||||
Reisubs(),
|
Reisubs(),
|
||||||
MangaReadOrg(),
|
MangaReadOrg(),
|
||||||
TurkceManga()
|
TurkceManga(),
|
||||||
|
EinherjarScan(),
|
||||||
|
KnightNoScanlation(),
|
||||||
|
DoujinYosh()
|
||||||
// Removed by request of site owner
|
// Removed by request of site owner
|
||||||
// EarlyManga(),
|
// EarlyManga(),
|
||||||
// MangaGecesi(),
|
// MangaGecesi(),
|
||||||
|
@ -148,6 +149,7 @@ class AoCTranslations : Madara("Agent of Change Translations", "https://aoc.moe"
|
||||||
override fun headersBuilder(): Headers.Builder = super.headersBuilder().add("Referer", baseUrl)
|
override fun headersBuilder(): Headers.Builder = super.headersBuilder().add("Referer", baseUrl)
|
||||||
override fun popularMangaSelector() = "div.page-item-detail.manga:has(span.chapter)"
|
override fun popularMangaSelector() = "div.page-item-detail.manga:has(span.chapter)"
|
||||||
override fun chapterListSelector() = "li.wp-manga-chapter:has(a)"
|
override fun chapterListSelector() = "li.wp-manga-chapter:has(a)"
|
||||||
|
@SuppressLint("DefaultLocale")
|
||||||
override fun chapterListParse(response: Response): List<SChapter> {
|
override fun chapterListParse(response: Response): List<SChapter> {
|
||||||
return response.asJsoup().let { document ->
|
return response.asJsoup().let { document ->
|
||||||
document.select(chapterListSelector()).let { normalChapters ->
|
document.select(chapterListSelector()).let { normalChapters ->
|
||||||
|
@ -215,20 +217,6 @@ class WuxiaWorld : Madara("WuxiaWorld", "https://wuxiaworld.site", "en") {
|
||||||
override fun popularMangaNextPageSelector() = "div.nav-previous.float-left"
|
override fun popularMangaNextPageSelector() = "div.nav-previous.float-left"
|
||||||
}
|
}
|
||||||
|
|
||||||
class WordRain : Madara("WordRain Translation", "https://wordrain69.com", "en") {
|
|
||||||
override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/manga-genre/manga/page/$page/?m_orderby=views", headers)
|
|
||||||
override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/manga-genre/manga/page/$page/?m_orderby=latest", headers)
|
|
||||||
override fun searchMangaParse(response: Response): MangasPage {
|
|
||||||
|
|
||||||
val url = HttpUrl.parse(response.request().url().toString())!!.newBuilder()
|
|
||||||
.addQueryParameter("genre[]", "manga").build()
|
|
||||||
val request: Request = Request.Builder().url(url).build()
|
|
||||||
val call = client.newCall(request)
|
|
||||||
val res: Response = call.execute()
|
|
||||||
return super.searchMangaParse(res)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class YoManga : Madara("Yo Manga", "https://yomanga.info", "en")
|
class YoManga : Madara("Yo Manga", "https://yomanga.info", "en")
|
||||||
|
|
||||||
class ManyToon : Madara("ManyToon", "https://manytoon.com", "en")
|
class ManyToon : Madara("ManyToon", "https://manytoon.com", "en")
|
||||||
|
@ -451,7 +439,39 @@ class NightComic : Madara("Night Comic", "https://nightcomic.com", "en") {
|
||||||
.build()
|
.build()
|
||||||
}
|
}
|
||||||
|
|
||||||
class Toonily : Madara("Toonily", "https://toonily.com", "en")
|
class Toonily : Madara("Toonily", "https://toonily.com", "en") {
|
||||||
|
override fun getGenreList(): List<Genre> = listOf(
|
||||||
|
Genre("Action", "action-webtoon"),
|
||||||
|
Genre("Adult", "adult-webtoon"),
|
||||||
|
Genre("Adventure", "adventure-webtoon"),
|
||||||
|
Genre("Comedy", "comedy-webtoon"),
|
||||||
|
Genre("Drama", "drama-webtoon"),
|
||||||
|
Genre("Fantasy", "fantasy-webtoon"),
|
||||||
|
Genre("Gender Bender", "gender-bender"),
|
||||||
|
Genre("Gossip", "gossip"),
|
||||||
|
Genre("Harem", "harem-webtoon"),
|
||||||
|
Genre("Historical", "webtoon-historical"),
|
||||||
|
Genre("Horror", "horror-webtoon"),
|
||||||
|
Genre("Josei", "josei-manga"),
|
||||||
|
Genre("Mature", "mature-webtoon"),
|
||||||
|
Genre("Mystery", "mystery-webtoon"),
|
||||||
|
Genre("NTR", "ntr-webtoon"),
|
||||||
|
Genre("Psychological", "psychological-webtoon"),
|
||||||
|
Genre("Romance", "romance-webtoon"),
|
||||||
|
Genre("School life", "school-life-webtoon"),
|
||||||
|
Genre("Sci-Fi", "scifi-webtoon"),
|
||||||
|
Genre("Seinen", "seinen-webtoon"),
|
||||||
|
Genre("Shoujo", "shoujo"),
|
||||||
|
Genre("Shounen", "shounen-webtoon"),
|
||||||
|
Genre("Slice of Life", "sliceoflife-webtoon"),
|
||||||
|
Genre("Supernatural", "supernatural-webtoon"),
|
||||||
|
Genre("Thriller", "thriller-webtoon"),
|
||||||
|
Genre("Tragedy", "tragedy"),
|
||||||
|
Genre("Vanilla", "vanilla-webtoon"),
|
||||||
|
Genre("Yaoi", "yaoi-webtoon"),
|
||||||
|
Genre("Yuri", "yuri-webtoon")
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
class PlotTwistScan : Madara("Plot Twist No Fansub", "https://www.plotwistscan.com", "es") {
|
class PlotTwistScan : Madara("Plot Twist No Fansub", "https://www.plotwistscan.com", "es") {
|
||||||
override fun chapterListParse(response: Response): List<SChapter> = super.chapterListParse(response).asReversed()
|
override fun chapterListParse(response: Response): List<SChapter> = super.chapterListParse(response).asReversed()
|
||||||
|
@ -494,8 +514,6 @@ class MiracleScans : Madara("Miracle Scans", "https://miraclescans.com", "en")
|
||||||
|
|
||||||
class Manhuasnet : Madara("Manhuas.net", "https://manhuas.net", "en")
|
class Manhuasnet : Madara("Manhuas.net", "https://manhuas.net", "en")
|
||||||
|
|
||||||
class MangaLaw : Madara("MangaLaw", "https://mangalaw.com", "ja", SimpleDateFormat("MM/dd/yyyy", Locale.US))
|
|
||||||
|
|
||||||
class MangaTX : Madara("MangaTX", "https://mangatx.com", "en")
|
class MangaTX : Madara("MangaTX", "https://mangatx.com", "en")
|
||||||
|
|
||||||
class ATMSubs : Madara("ATM-Subs", "https://atm-subs.fr", "fr", SimpleDateFormat("d MMMM yyyy", Locale("fr")))
|
class ATMSubs : Madara("ATM-Subs", "https://atm-subs.fr", "fr", SimpleDateFormat("d MMMM yyyy", Locale("fr")))
|
||||||
|
@ -704,7 +722,7 @@ class ArazNovel : Madara("ArazNovel", "https://www.araznovel.com", "tr", SimpleD
|
||||||
Genre("Soft Yuri", "soft-yuri"),
|
Genre("Soft Yuri", "soft-yuri"),
|
||||||
Genre("Yaoi", "yaoi"),
|
Genre("Yaoi", "yaoi"),
|
||||||
Genre("Yuri", "yuri")
|
Genre("Yuri", "yuri")
|
||||||
)
|
)
|
||||||
override fun chapterListParse(response: Response): List<SChapter> {
|
override fun chapterListParse(response: Response): List<SChapter> {
|
||||||
return getXhrChapters(response.asJsoup().select("div#manga-chapters-holder").attr("data-id")).let { document ->
|
return getXhrChapters(response.asJsoup().select("div#manga-chapters-holder").attr("data-id")).let { document ->
|
||||||
document.select("li.parent").let { elements ->
|
document.select("li.parent").let { elements ->
|
||||||
|
@ -735,11 +753,20 @@ class WeScans : Madara("WeScans", "https://wescans.xyz", "en") {
|
||||||
override fun getFilterList(): FilterList = FilterList()
|
override fun getFilterList(): FilterList = FilterList()
|
||||||
}
|
}
|
||||||
|
|
||||||
class ArangScans : Madara("Arang Scans", "https://www.arangscans.xyz", "en")
|
class ArangScans : Madara("Arang Scans", "https://www.arangscans.com", "en") {
|
||||||
|
// has very few manga
|
||||||
|
override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/manga?m_orderby=views", headers)
|
||||||
|
override fun popularMangaNextPageSelector(): String? = null
|
||||||
|
override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/manga?m_orderby=latest", headers)
|
||||||
|
override fun latestUpdatesNextPageSelector(): String? = null
|
||||||
|
}
|
||||||
|
|
||||||
class MangaHentai : Madara("Manga Hentai", "https://mangahentai.me", "en")
|
class MangaHentai : Madara("Manga Hentai", "https://mangahentai.me", "en")
|
||||||
|
|
||||||
class MangaPhoenix : Madara("Manga Phoenix", "https://mangaphoenix.com", "tr")
|
class MangaPhoenix : Madara("Manga Diyari", "https://mangadiyari.com", "tr") {
|
||||||
|
// Formerly "Manga Phoenix"
|
||||||
|
override val id = 4308007020001642101
|
||||||
|
}
|
||||||
|
|
||||||
class FirstKissManhua : Madara("1st Kiss Manhua", "https://1stkissmanhua.com", "en", SimpleDateFormat("d MMM yyyy", Locale.US)) {
|
class FirstKissManhua : Madara("1st Kiss Manhua", "https://1stkissmanhua.com", "en", SimpleDateFormat("d MMM yyyy", Locale.US)) {
|
||||||
override fun imageRequest(page: Page): Request = GET(page.imageUrl!!, headersBuilder().add("Referer", "https://1stkissmanga.com").build())
|
override fun imageRequest(page: Page): Request = GET(page.imageUrl!!, headersBuilder().add("Referer", "https://1stkissmanga.com").build())
|
||||||
|
@ -773,4 +800,108 @@ class Reisubs : Madara("Reisubs", "https://www.reisubs.xyz", "en")
|
||||||
|
|
||||||
class MangaReadOrg : Madara("MangaRead.org", "https://www.mangaread.org", "en", SimpleDateFormat("dd.MM.yyy", Locale.US))
|
class MangaReadOrg : Madara("MangaRead.org", "https://www.mangaread.org", "en", SimpleDateFormat("dd.MM.yyy", Locale.US))
|
||||||
|
|
||||||
class TurkceManga : Madara("Türkçe Manga", "https://turkcemanga.com", "tr")
|
class TurkceManga : Madara("Türkçe Manga", "https://turkcemanga.com", "tr") {
|
||||||
|
override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/page/$page/?s&post_type=wp-manga&m_orderby=views", headers)
|
||||||
|
override fun popularMangaSelector() = searchMangaSelector()
|
||||||
|
override fun popularMangaFromElement(element: Element): SManga = searchMangaFromElement(element)
|
||||||
|
override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/page/$page/?s&post_type=wp-manga&m_orderby=latest", headers)
|
||||||
|
override fun latestUpdatesSelector() = searchMangaSelector()
|
||||||
|
override fun latestUpdatesFromElement(element: Element): SManga = searchMangaFromElement(element)
|
||||||
|
}
|
||||||
|
|
||||||
|
class EinherjarScan : Madara("Einherjar Scan", "https://einherjarscans.space", "en")
|
||||||
|
|
||||||
|
class KnightNoScanlation : Madara("Knight no Scanlation", "https://knightnoscanlation.com", "es")
|
||||||
|
|
||||||
|
class DoujinYosh : Madara("DoujinYosh", "https://doujinyosh.work", "id") {
|
||||||
|
// source issue, doing this limits results to one page but not doing it returns no results at all
|
||||||
|
override fun searchPage(page: Int) = ""
|
||||||
|
override fun getGenreList() = listOf(
|
||||||
|
Genre("4 Koma", "4koma"),
|
||||||
|
Genre("Adult", "adult"),
|
||||||
|
Genre("Ahegao", "ahegao"),
|
||||||
|
Genre("Anal", "anal"),
|
||||||
|
Genre("Animal", "animal"),
|
||||||
|
Genre("Artist CG", "artist-cg"),
|
||||||
|
Genre("Big Breast", "big-breast"),
|
||||||
|
Genre("Big Penis", "big-penis"),
|
||||||
|
Genre("Bikini", "bikini"),
|
||||||
|
Genre("Black Mail", "black-mail"),
|
||||||
|
Genre("Blowjob", "blowjob"),
|
||||||
|
Genre("Body Swap", "body-swap"),
|
||||||
|
Genre("Bondage", "bondage"),
|
||||||
|
Genre("Cheating", "cheating"),
|
||||||
|
Genre("Crossdressing", "crossdressing"),
|
||||||
|
Genre("DILF", "dilf"),
|
||||||
|
Genre("Dark Skin", "dark-skin"),
|
||||||
|
Genre("Defloration", "defloration"),
|
||||||
|
Genre("Demon Girl", "demon-girl"),
|
||||||
|
Genre("Doujin", "doujin"),
|
||||||
|
Genre("Drugs", "drugs"),
|
||||||
|
Genre("Drunk", "drunk"),
|
||||||
|
Genre("Elf", "elf"),
|
||||||
|
Genre("Famele Only", "famele-only"),
|
||||||
|
Genre("Femdom", "femdom"),
|
||||||
|
Genre("Filming", "filming"),
|
||||||
|
Genre("Footjob", "footjob"),
|
||||||
|
Genre("Full Color", "full-color"),
|
||||||
|
Genre("Furry", "furry"),
|
||||||
|
Genre("Futanari", "futanari"),
|
||||||
|
Genre("Glasses", "glasses"),
|
||||||
|
Genre("Gore", "gore"),
|
||||||
|
Genre("Group", "group"),
|
||||||
|
Genre("Gyaru", "gyaru"),
|
||||||
|
Genre("Harem", "harem"),
|
||||||
|
Genre("Humiliation", "humiliation"),
|
||||||
|
Genre("Impregnation", "impregnation"),
|
||||||
|
Genre("Incest", "incest"),
|
||||||
|
Genre("Inverted Nipples", "inverted-nipples"),
|
||||||
|
Genre("Kemomimi", "kemomimi"),
|
||||||
|
Genre("Lactation", "lactation"),
|
||||||
|
Genre("Loli", "loli"),
|
||||||
|
Genre("Lolipai", "lolipai"),
|
||||||
|
Genre("MILF", "milf"),
|
||||||
|
Genre("Maid", "maid"),
|
||||||
|
Genre("Male Only", "male-only"),
|
||||||
|
Genre("Miko", "miko"),
|
||||||
|
Genre("Mind Break", "mind-break"),
|
||||||
|
Genre("Mind Control", "mind-control"),
|
||||||
|
Genre("Monster", "monster"),
|
||||||
|
Genre("Monster Girl", "monster-girl"),
|
||||||
|
Genre("Multi-Work Series", "multi-work-series"),
|
||||||
|
Genre("Nakadashi", "nakadashi"),
|
||||||
|
Genre("Netorare", "netorare"),
|
||||||
|
Genre("Otona (R18)", "otona"),
|
||||||
|
Genre("Oyakodon", "oyakodon"),
|
||||||
|
Genre("Paizuri", "paizuri"),
|
||||||
|
Genre("Pantyhose", "pantyhose"),
|
||||||
|
Genre("Pregnant", "pregnant"),
|
||||||
|
Genre("Prostitution", "prostitution"),
|
||||||
|
Genre("Rape", "rape"),
|
||||||
|
Genre("School Uniform", "school-uniform"),
|
||||||
|
Genre("Sex Toy", "sex-toy"),
|
||||||
|
Genre("Shota", "shota"),
|
||||||
|
Genre("Sister", "sister"),
|
||||||
|
Genre("Sleep", "sleep"),
|
||||||
|
Genre("Slime", "slime"),
|
||||||
|
Genre("Small Breast", "small-breast"),
|
||||||
|
Genre("Sole Female", "sole-female"),
|
||||||
|
Genre("Sole Male", "sole-male"),
|
||||||
|
Genre("Stocking", "stocking"),
|
||||||
|
Genre("Story Arc", "story-arc"),
|
||||||
|
Genre("Sweating", "sweating"),
|
||||||
|
Genre("Swimsuit", "swimsuit"),
|
||||||
|
Genre("Teacher", "teacher"),
|
||||||
|
Genre("Tentacles", "tentacles"),
|
||||||
|
Genre("Tomboy", "tomboy"),
|
||||||
|
Genre("Tomgirl", "tomgirl"),
|
||||||
|
Genre("Torture", "torture"),
|
||||||
|
Genre("Twins", "twins"),
|
||||||
|
Genre("Virginity", "virginity"),
|
||||||
|
Genre("Webtoon", "webtoon"),
|
||||||
|
Genre("XRay", "xray"),
|
||||||
|
Genre("Yandere", "yandere"),
|
||||||
|
Genre("Yaoi", "yaoi"),
|
||||||
|
Genre("Yuri", "yuri")
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue