diff --git a/src/all/ninehentai/AndroidManifest.xml b/src/all/ninehentai/AndroidManifest.xml index 30deb7f79..5ed068961 100644 --- a/src/all/ninehentai/AndroidManifest.xml +++ b/src/all/ninehentai/AndroidManifest.xml @@ -1,2 +1,23 @@ - + + + + + + + + + + + + + + + diff --git a/src/all/ninehentai/build.gradle b/src/all/ninehentai/build.gradle index 290075f61..f471c7fb0 100644 --- a/src/all/ninehentai/build.gradle +++ b/src/all/ninehentai/build.gradle @@ -1,11 +1,12 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' +apply plugin: 'kotlinx-serialization' ext { extName = 'NineHentai' pkgNameSuffix = 'all.ninehentai' extClass = '.NineHentai' - extVersionCode = 12 + extVersionCode = 13 libVersion = '1.2' containsNsfw = true } diff --git a/src/all/ninehentai/src/eu/kanade/tachiyomi/extension/all/ninehentai/Dto.kt b/src/all/ninehentai/src/eu/kanade/tachiyomi/extension/all/ninehentai/Dto.kt deleted file mode 100644 index e972c6b22..000000000 --- a/src/all/ninehentai/src/eu/kanade/tachiyomi/extension/all/ninehentai/Dto.kt +++ /dev/null @@ -1,31 +0,0 @@ -package eu.kanade.tachiyomi.extension.all.ninehentai - -import eu.kanade.tachiyomi.source.model.Filter - -data class Manga( - val id: Int, - var title: String, - val image_server: String, - val tags: List, - val total_page: Int -) - -class Tag( - val id: Int, - name: String, - val description: String = "null", - val type: Int = 1 -) : Filter.TriState(name) - -data class SearchRequest( - val text: String, - val page: Int, - val sort: Int, - val pages: Map = mapOf("range" to intArrayOf(0, 2000)), - val tag: Map -) - -data class Items( - val included: MutableList, - val excluded: MutableList -) diff --git a/src/all/ninehentai/src/eu/kanade/tachiyomi/extension/all/ninehentai/NHTags.kt b/src/all/ninehentai/src/eu/kanade/tachiyomi/extension/all/ninehentai/NHTags.kt deleted file mode 100644 index 984214805..000000000 --- a/src/all/ninehentai/src/eu/kanade/tachiyomi/extension/all/ninehentai/NHTags.kt +++ /dev/null @@ -1,1523 +0,0 @@ -package eu.kanade.tachiyomi.extension.all.ninehentai - -object NHTags { - fun getTagsList() = listOf( - Tag(id = 16712, name = "3d"), - Tag(id = 1054, name = "Abortion"), - Tag(id = 5198, name = "Absorption"), - Tag(id = 3576, name = "Adventitious Penis"), - Tag(id = 9348, name = "Adventitious Vagina"), - Tag(id = 25549, name = "Afro"), - Tag(id = 193, name = "Age Progression"), - Tag(id = 702, name = "Age Regression"), - Tag(id = 214, name = "Ahegao"), - Tag(id = 6636, name = "Albino"), - Tag(id = 10, name = "Alien"), - Tag(id = 1101, name = "Alien Girl"), - Tag(id = 215, name = "All The Way Through"), - Tag(id = 23272, name = "Already Uploaded"), - Tag(id = 288, name = "Amputee"), - Tag(id = 30, name = "Anal"), - Tag(id = 6266, name = "Anal Birth"), - Tag(id = 10530, name = "Animal On Animal"), - Tag(id = 11881, name = "Animal On Furry"), - Tag(id = 17056, name = "Animated"), - Tag(id = 4770, name = "Anorexic"), - Tag(id = 15880, name = "Anthology"), - Tag(id = 24975, name = "Ao No Sunadokei"), - Tag(id = 209, name = "Apron"), - Tag(id = 814, name = "Armpit Licking"), - Tag(id = 815, name = "Armpit Sex"), - Tag(id = 15974, name = "Artbook"), - Tag(id = 1705, name = "Asphyxiation"), - Tag(id = 1755, name = "Ass Expansion"), - Tag(id = 2148, name = "Assjob"), - Tag(id = 24352, name = "Atsushima Tetsuya"), - Tag(id = 673, name = "Aunt"), - Tag(id = 329, name = "Autofellatio"), - Tag(id = 5662, name = "Autopaizuri"), - Tag(id = 602, name = "Bald"), - Tag(id = 1689, name = "Ball Sucking"), - Tag(id = 5558, name = "Balljob"), - Tag(id = 6380, name = "Balls Expansion"), - Tag(id = 19880, name = "Ban Daiki"), - Tag(id = 36, name = "Bandages"), - Tag(id = 3424, name = "Bandaid"), - Tag(id = 16564, name = "Baphomet"), - Tag(id = 65, name = "Bbm"), - Tag(id = 860, name = "Bbw"), - Tag(id = 147, name = "Bdsm"), - Tag(id = 1154, name = "Bear"), - Tag(id = 4259, name = "Bear Boy"), - Tag(id = 2161, name = "Bear Girl"), - Tag(id = 744, name = "Beauty Mark"), - Tag(id = 2349, name = "Bee Girl"), - Tag(id = 25675, name = "Belial"), - Tag(id = 230, name = "Bestiality"), - Tag(id = 768, name = "Big Areolae"), - Tag(id = 175, name = "Big Ass"), - Tag(id = 1979, name = "Big Balls"), - Tag(id = 42, name = "Big Breasts"), - Tag(id = 559, name = "Big Clit"), - Tag(id = 5081, name = "Big Lips"), - Tag(id = 861, name = "Big Nipples"), - Tag(id = 127, name = "Big Penis"), - Tag(id = 5387, name = "Big Vagina"), - Tag(id = 130, name = "Bike Shorts"), - Tag(id = 201, name = "Bikini"), - Tag(id = 284, name = "Birth"), - Tag(id = 121, name = "Bisexual"), - Tag(id = 104, name = "Blackmail"), - Tag(id = 1057, name = "Blind"), - Tag(id = 1004, name = "Blindfold"), - Tag(id = 330, name = "Blood"), - Tag(id = 106, name = "Bloomers"), - Tag(id = 52, name = "Blowjob"), - Tag(id = 2274, name = "Blowjob Face"), - Tag(id = 269, name = "Body Modification"), - Tag(id = 888, name = "Body Painting"), - Tag(id = 5502, name = "Body Swap"), - Tag(id = 3385, name = "Body Writing"), - Tag(id = 4359, name = "Bodystocking"), - Tag(id = 35, name = "Bodysuit"), - Tag(id = 107, name = "Bondage"), - Tag(id = 5101, name = "Brain Fuck"), - Tag(id = 22629, name = "Brave Kingdom"), - Tag(id = 194, name = "Breast Expansion"), - Tag(id = 246, name = "Breast Feeding"), - Tag(id = 2801, name = "Breast Reduction"), - Tag(id = 335, name = "Bride"), - Tag(id = 2216, name = "Brother"), - Tag(id = 25392, name = "Buddly Love"), - Tag(id = 131, name = "Bukkake"), - Tag(id = 561, name = "Bull"), - Tag(id = 16623, name = "Bump Squad Wolfsbane"), - Tag(id = 797, name = "Bunny Boy"), - Tag(id = 76, name = "Bunny Girl"), - Tag(id = 17169, name = "Burn Out Syndrome"), - Tag(id = 14027, name = "Burping"), - Tag(id = 585, name = "Business Suit"), - Tag(id = 16194, name = "Buso"), - Tag(id = 20819, name = "Buta Hormone"), - Tag(id = 1534, name = "Butler"), - Tag(id = 20149, name = "Byoujo No Sho"), - Tag(id = 16605, name = "Cacty"), - Tag(id = 289, name = "Cannibalism"), - Tag(id = 16362, name = "Canvas 2"), - Tag(id = 19114, name = "Capsule"), - Tag(id = 16484, name = "Captain Tsubasa Fcmin Hiroshima"), - Tag(id = 16028, name = "Caption"), - Tag(id = 10130, name = "Cashier"), - Tag(id = 599, name = "Cat"), - Tag(id = 562, name = "Catboy"), - Tag(id = 17122, name = "Catch And Release"), - Tag(id = 3115, name = "Catfight"), - Tag(id = 77, name = "Catgirl"), - Tag(id = 1053, name = "Cbt"), - Tag(id = 25097, name = "Cc6512"), - Tag(id = 2468, name = "Centaur"), - Tag(id = 239, name = "Cervix Penetration"), - Tag(id = 25210, name = "Chakichi"), - Tag(id = 1049, name = "Chastity Belt"), - Tag(id = 17123, name = "Chayamachi Mejiro"), - Tag(id = 211, name = "Cheating"), - Tag(id = 132, name = "Cheerleader"), - Tag(id = 19745, name = "Chihiro Nobuki"), - Tag(id = 20502, name = "Chika Madoka"), - Tag(id = 22943, name = "Chikadoh"), - Tag(id = 533, name = "Chikan"), - Tag(id = 774, name = "Chinese Dress"), - Tag(id = 25058, name = "Chinpo"), - Tag(id = 15911, name = "Chitumatsuriya Honpo"), - Tag(id = 16516, name = "Chloe Wichers"), - Tag(id = 19312, name = "Chloe Withers"), - Tag(id = 148, name = "Chloroform"), - Tag(id = 19538, name = "Chobikuma"), - Tag(id = 18671, name = "Choiki"), - Tag(id = 16987, name = "Chou Shiryu"), - Tag(id = 16075, name = "Chouji Maboroshi"), - Tag(id = 17135, name = "Chouko"), - Tag(id = 22986, name = "Chounyuu For You"), - Tag(id = 23808, name = "Chounyuu Kenkyuushitsu"), - Tag(id = 1598, name = "Christmas"), - Tag(id = 21526, name = "Chrono Nanae"), - Tag(id = 16546, name = "Chu-shin Kuranosuke"), - Tag(id = 19374, name = "Chubold"), - Tag(id = 22053, name = "Chuchu"), - Tag(id = 16443, name = "Chunen"), - Tag(id = 17036, name = "Clalaclan Philias"), - Tag(id = 5840, name = "Clamp"), - Tag(id = 16280, name = "Clara.v"), - Tag(id = 16140, name = "Classmates"), - Tag(id = 1178, name = "Clit Growth"), - Tag(id = 4008, name = "Closed Eyes"), - Tag(id = 2691, name = "Clothed Female Nude Male"), - Tag(id = 8975, name = "Clothed Male Nude Female"), - Tag(id = 5229, name = "Clothed Paizuri"), - Tag(id = 16661, name = "Clown"), - Tag(id = 1044, name = "Coach"), - Tag(id = 5826, name = "Cockslapping"), - Tag(id = 231, name = "Collar"), - Tag(id = 16496, name = "Compilation"), - Tag(id = 179, name = "Condom"), - Tag(id = 13690, name = "Conjoined"), - Tag(id = 3064, name = "Coprophagia"), - Tag(id = 25201, name = "Cor Leonis"), - Tag(id = 22318, name = "Coribou"), - Tag(id = 253, name = "Corruption"), - Tag(id = 796, name = "Corset"), - Tag(id = 527, name = "Cosplaying"), - Tag(id = 674, name = "Cousin"), - Tag(id = 16666, name = "Cousinanon"), - Tag(id = 14293, name = "Cow"), - Tag(id = 564, name = "Cowgirl"), - Tag(id = 7008, name = "Cowman"), - Tag(id = 25442, name = "Creamytea"), - Tag(id = 128, name = "Crossdressing"), - Tag(id = 852, name = "Crotch Tattoo"), - Tag(id = 4034, name = "Crown"), - Tag(id = 17534, name = "Cubetype"), - Tag(id = 4760, name = "Cum Bath"), - Tag(id = 535, name = "Cum In Eye"), - Tag(id = 913, name = "Cum Swap"), - Tag(id = 560, name = "Cunnilingus"), - Tag(id = 10106, name = "Cuntboy"), - Tag(id = 17444, name = "Curo-kun"), - Tag(id = 23878, name = "Cyan Coke"), - Tag(id = 17323, name = "Cynthia B. Rogers"), - Tag(id = 16510, name = "Dabi"), - Tag(id = 18152, name = "Dai Moru Ya"), - Tag(id = 16120, name = "Daiousamajihen"), - Tag(id = 16366, name = "Dakouin Saboru"), - Tag(id = 16008, name = "Danger-j"), - Tag(id = 23670, name = "Darai."), - Tag(id = 1306, name = "Dark Nipples"), - Tag(id = 16662, name = "Dark Princess"), - Tag(id = 3621, name = "Dark Sclera"), - Tag(id = 51, name = "Dark Skin"), - Tag(id = 275, name = "Daughter"), - Tag(id = 16017, name = "De Kirei Yume"), - Tag(id = 20305, name = "Deception Iv"), - Tag(id = 216, name = "Deepthroat"), - Tag(id = 24670, name = "Deer Boy"), - Tag(id = 16956, name = "Deer Girl"), - Tag(id = 67, name = "Defloration"), - Tag(id = 17321, name = "Gyuo"), - Tag(id = 15909, name = "Gyupaibyu"), - Tag(id = 25565, name = "Gyzertoast"), - Tag(id = 16759, name = "Hachikyu"), - Tag(id = 20014, name = "Hachimitsu Ouji"), - Tag(id = 19369, name = "Hadaka"), - Tag(id = 16772, name = "Hadamurasaki"), - Tag(id = 16474, name = "Hagiri"), - Tag(id = 15251, name = "Haigure"), - Tag(id = 2647, name = "Hairjob"), - Tag(id = 336, name = "Hairy"), - Tag(id = 337, name = "Hairy Armpits"), - Tag(id = 17070, name = "Haitenai"), - Tag(id = 22944, name = "Halco"), - Tag(id = 16293, name = "Halftooth"), - Tag(id = 20445, name = "Halkrom"), - Tag(id = 24341, name = "Halsione"), - Tag(id = 15898, name = "Hamu Boshi"), - Tag(id = 17064, name = "Hanaoka"), - Tag(id = 16792, name = "Hanatarou"), - Tag(id = 7088, name = "Handicapped"), - Tag(id = 352, name = "Handjob"), - Tag(id = 15919, name = "Hanzaki Ran"), - Tag(id = 17041, name = "Happy Start"), - Tag(id = 16376, name = "Haraheridou"), - Tag(id = 16954, name = "Harapeko Manbou"), - Tag(id = 20423, name = "Harazumi Tami"), - Tag(id = 16189, name = "Haredou"), - Tag(id = 270, name = "Harem"), - Tag(id = 16115, name = "Harenchi Noon"), - Tag(id = 22137, name = "Hareta"), - Tag(id = 15877, name = "Harimaro"), - Tag(id = 3468, name = "Harness"), - Tag(id = 616, name = "Harpy"), - Tag(id = 17537, name = "Hatomile"), - Tag(id = 16483, name = "Hayase Hidekazu"), - Tag(id = 17473, name = "Hayato Shibusawa"), - Tag(id = 16736, name = "Heart Core"), - Tag(id = 17552, name = "Hebun Irebun"), - Tag(id = 24170, name = "Hemu"), - Tag(id = 15905, name = "Henachokopinkizu"), - Tag(id = 16183, name = "Hentai B"), - Tag(id = 16072, name = "Hentai The Radical"), - Tag(id = 21724, name = "Heresy"), - Tag(id = 3527, name = "Heterochromia"), - Tag(id = 19908, name = "Hidamaru"), - Tag(id = 125, name = "Hidden Sex"), - Tag(id = 16164, name = "Hieda No Anana"), - Tag(id = 16165, name = "Hieda No Aya"), - Tag(id = 16005, name = "Hieda Touijin"), - Tag(id = 15907, name = "Higashizato Kirico"), - Tag(id = 18131, name = "Higumax"), - Tag(id = 9356, name = "Hijab"), - Tag(id = 24155, name = "Hikari Kamigishi"), - Tag(id = 16632, name = "Hikari Konohana"), - Tag(id = 15981, name = "Hikaru Hayashi"), - Tag(id = 22492, name = "Hikkin"), - Tag(id = 17457, name = "Hikoushi"), - Tag(id = 17138, name = "Himawari Manjyu"), - Tag(id = 19581, name = "Himitsu No Hanazono"), - Tag(id = 15903, name = "Hina Can"), - Tag(id = 16026, name = "Hiroki Endo"), - Tag(id = 16336, name = "Hisako Ushigami"), - Tag(id = 24708, name = "Hisashi Ryuuto"), - Tag(id = 25200, name = "Hiyori Chan"), - Tag(id = 23351, name = "Hizuki Haruka"), - Tag(id = 16982, name = "Hmp"), - Tag(id = 15978, name = "Hobihobi"), - Tag(id = 15895, name = "Hokuhokutou Ejiputo Gaisha"), - Tag(id = 17246, name = "Homigiwa Ichiyou"), - Tag(id = 15902, name = "Homing Spitz"), - Tag(id = 16256, name = "Honami Majo"), - Tag(id = 21678, name = "Honenuki Chicken."), - Tag(id = 20041, name = "Hong Ban-jang"), - Tag(id = 21465, name = "Hori Makoto"), - Tag(id = 1712, name = "Horns"), - Tag(id = 15899, name = "Horny Animals"), - Tag(id = 17178, name = "Horobi No Michi"), - Tag(id = 234, name = "Horse"), - Tag(id = 1577, name = "Horse Boy"), - Tag(id = 8480, name = "Horse Cock"), - Tag(id = 1578, name = "Horse Girl"), - Tag(id = 1187, name = "Hotpants"), - Tag(id = 15982, name = "How To"), - Tag(id = 202, name = "Huge Breasts"), - Tag(id = 282, name = "Huge Penis"), - Tag(id = 21295, name = "Hui C"), - Tag(id = 1095, name = "Human On Furry"), - Tag(id = 298, name = "Human Pet"), - Tag(id = 753, name = "Humiliation"), - Tag(id = 16216, name = "Husky Guy"), - Tag(id = 16225, name = "Hutamizu Kirin"), - Tag(id = 20991, name = "Hyakuhachi Kyoukai"), - Tag(id = 17315, name = "Hys"), - Tag(id = 24780, name = "Ibarad"), - Tag(id = 16238, name = "Ibaraki Kasen"), - Tag(id = 16711, name = "Ice Lee"), - Tag(id = 16105, name = "Ichinensei Ni Nacchattara"), - Tag(id = 21720, name = "Idumi"), - Tag(id = 15874, name = "If Code"), - Tag(id = 18986, name = "Iiniku Ushijima"), - Tag(id = 17229, name = "Iisuke"), - Tag(id = 16788, name = "Ikebukuro"), - Tag(id = 15998, name = "Ikenie Seminar"), - Tag(id = 16339, name = "Im Dal-young"), - Tag(id = 15973, name = "Immoral Maika"), - Tag(id = 220, name = "Impregnation"), - Tag(id = 18800, name = "Inazuma Blade"), - Tag(id = 203, name = "Incest"), - Tag(id = 15868, name = "Incomplete"), - Tag(id = 8840, name = "Infantilism"), - Tag(id = 221, name = "Inflation"), - Tag(id = 21709, name = "Inijio"), - Tag(id = 17962, name = "Inner Moka"), - Tag(id = 16144, name = "Inoue"), - Tag(id = 236, name = "Insect"), - Tag(id = 4648, name = "Insect Boy"), - Tag(id = 2469, name = "Insect Girl"), - Tag(id = 1252, name = "Inseki"), - Tag(id = 16978, name = "Inugoya Kakko Kari"), - Tag(id = 22358, name = "Inuguro Sansei"), - Tag(id = 24207, name = "Inui Achu"), - Tag(id = 24994, name = "Inunabe"), - Tag(id = 23760, name = "Inuzuka Koutarou"), - Tag(id = 242, name = "Inverted Nipples"), - Tag(id = 1424, name = "Invisible"), - Tag(id = 20910, name = "Ireading"), - Tag(id = 18318, name = "Irukukwu"), - Tag(id = 16885, name = "Isana Tachibana"), - Tag(id = 16498, name = "Isobe Mutsumi"), - Tag(id = 16276, name = "Issei Ryuudou"), - Tag(id = 16701, name = "Itigosizu Eri Natsume"), - Tag(id = 17005, name = "Itomari"), - Tag(id = 15975, name = "Itsuki Sayaka"), - Tag(id = 23386, name = "Iwapero"), - Tag(id = 16142, name = "Izawa"), - Tag(id = 25181, name = "Izu"), - Tag(id = 17556, name = "Izumi-s"), - Tag(id = 21941, name = "Izumida Touichirou"), - Tag(id = 16468, name = "Jace Beleren"), - Tag(id = 19082, name = "Jack O Lantern"), - Tag(id = 16157, name = "Jaga Note"), - Tag(id = 16942, name = "Jake Muller"), - Tag(id = 16321, name = "Jibakurei"), - Tag(id = 25577, name = "Jiggly Toons"), - Tag(id = 17156, name = "Jika"), - Tag(id = 19874, name = "Joe Hasegawa"), - Tag(id = 17324, name = "Johnny-do"), - Tag(id = 16774, name = "Johnnys Jimusho"), - Tag(id = 16950, name = "Jomy Marquis Shin"), - Tag(id = 16263, name = "Jonokuchi Joji"), - Tag(id = 18310, name = "Jony"), - Tag(id = 18990, name = "Jonylaser R"), - Tag(id = 17778, name = "Joso No Oji-sama"), - Tag(id = 2231, name = "Josou Seme"), - Tag(id = 24084, name = "Jsc"), - Tag(id = 16495, name = "Juana"), - Tag(id = 16222, name = "Jun686"), - Tag(id = 23865, name = "Junior"), - Tag(id = 16625, name = "Junjou Kurarimondo"), - Tag(id = 22065, name = "Junkie Daijin"), - Tag(id = 16078, name = "Juuichijou"), - Tag(id = 20745, name = "Juurokurou"), - Tag(id = 23758, name = "K.tomo"), - Tag(id = 15984, name = "K.z.z."), - Tag(id = 15985, name = "K.z.z. Force"), - Tag(id = 15986, name = "K.z.z. Gundan"), - Tag(id = 17660, name = "K2tomonokai"), - Tag(id = 22223, name = "Kabi Killer"), - Tag(id = 17227, name = "Kabutomaru Choko"), - Tag(id = 24023, name = "Kadarinka"), - Tag(id = 23374, name = "Kagayakitei"), - Tag(id = 16267, name = "Kagehara Hanzow"), - Tag(id = 16976, name = "Kagura Heki"), - Tag(id = 19909, name = "Kaijuu"), - Tag(id = 18440, name = "Kaishou Nachi"), - Tag(id = 17147, name = "Kaitouchuu."), - Tag(id = 23508, name = "Kakeyu"), - Tag(id = 16584, name = "Kamadoya"), - Tag(id = 21085, name = "Kamatsukatei"), - Tag(id = 20255, name = "Kamiaya"), - Tag(id = 16315, name = "Kaminobe"), - Tag(id = 16316, name = "Kaminobe Kanon"), - Tag(id = 18528, name = "Kamiomi Tsukuyomi"), - Tag(id = 16606, name = "Kamo Nabako"), - Tag(id = 17155, name = "Kaname Itsuki"), - Tag(id = 16274, name = "Kanatofu"), - Tag(id = 23940, name = "Kancho"), - Tag(id = 15912, name = "Kankuro"), - Tag(id = 18378, name = "Kannagi No Tori"), - Tag(id = 24265, name = "Kano Yattsu Hashi"), - Tag(id = 16826, name = "Kanran Okawa"), - Tag(id = 18818, name = "Kanu Uncho"), - Tag(id = 5660, name = "Kappa"), - Tag(id = 21307, name = "Kare-nidaikon"), - Tag(id = 24171, name = "Karhu"), - Tag(id = 17168, name = "Kasai Yukiha"), - Tag(id = 18360, name = "Kashinopon"), - Tag(id = 16519, name = "Katanashi Apollo"), - Tag(id = 19616, name = "Katou Setsuko"), - Tag(id = 16831, name = "Katsumi Liqueur"), - Tag(id = 21010, name = "Kawada"), - Tag(id = 16456, name = "Kawakita Hiroyuki"), - Tag(id = 16850, name = "Kazemichi"), - Tag(id = 15892, name = "Kazoku Yuugi"), - Tag(id = 24881, name = "Kazumi Araiwa"), - Tag(id = 15956, name = "Kdft"), - Tag(id = 23717, name = "Kebiishi"), - Tag(id = 15972, name = "Keikihei"), - Tag(id = 15878, name = "Keitaro Arima"), - Tag(id = 80, name = "Kemonomimi"), - Tag(id = 16979, name = "Kemonoskey"), - Tag(id = 16557, name = "Ken Fudou"), - Tag(id = 23880, name = "Kenesco"), - Tag(id = 23881, name = "Kenesu"), - Tag(id = 16558, name = "Kenn Fudou"), - Tag(id = 20769, name = "Kenta Yumiya"), - Tag(id = 25043, name = "Kichihachi"), - Tag(id = 21547, name = "Kien-biu"), - Tag(id = 1155, name = "Kigurumi"), - Tag(id = 16633, name = "Kimiaki Shirai"), - Tag(id = 16340, name = "Kimkwang-hyun"), - Tag(id = 17199, name = "Kimmie"), - Tag(id = 689, name = "Kimono"), - Tag(id = 16627, name = "Kin-tore"), - Tag(id = 6173, name = "Kindergarten Uniform"), - Tag(id = 16761, name = "Kinkaku"), - Tag(id = 17116, name = "Kinmechou Pinku"), - Tag(id = 22920, name = "Kinnataro"), - Tag(id = 16834, name = "Kino Asana"), - Tag(id = 22586, name = "Kinomiya Yutaka"), - Tag(id = 17842, name = "Kira Asamiya"), - Tag(id = 16671, name = "Kiri Gami Shima"), - Tag(id = 16672, name = "Kiri Shin Shima"), - Tag(id = 16355, name = "Kirimochi Niwe"), - Tag(id = 724, name = "Kissing"), - Tag(id = 16793, name = "Kitamakura"), - Tag(id = 18682, name = "Kitou Chimata"), - Tag(id = 25255, name = "Kitsunekov"), - Tag(id = 3473, name = "Kneepit Sex"), - Tag(id = 21820, name = "Kobamiso"), - Tag(id = 17109, name = "Koboshi"), - Tag(id = 21384, name = "Kohako"), - Tag(id = 16141, name = "Kohe"), - Tag(id = 18298, name = "Koi Mo Mata Utau"), - Tag(id = 17325, name = "Koikuchikinako"), - Tag(id = 25612, name = "Kokitsuma"), - Tag(id = 15896, name = "Kokuritsu Shounen"), - Tag(id = 16678, name = "Kokuryu"), - Tag(id = 17267, name = "Kokuto Nikke"), - Tag(id = 23694, name = "Konakona"), - Tag(id = 23872, name = "Konbu Kyoudai"), - Tag(id = 23151, name = "Konezu"), - Tag(id = 16851, name = "Konno Kita"), - Tag(id = 16949, name = "Konoka"), - Tag(id = 16306, name = "Koridorasu"), - Tag(id = 19523, name = "Kotarou Katsura"), - Tag(id = 16922, name = "Kotoe"), - Tag(id = 19555, name = "Kou-chan"), - Tag(id = 18799, name = "Koube Iori"), - Tag(id = 17278, name = "Kozo Youhei"), - Tag(id = 21828, name = "Kozountoko"), - Tag(id = 15901, name = "Kudara Naizo"), - Tag(id = 16424, name = "Kumazaki Satoru"), - Tag(id = 17658, name = "Kunisaki"), - Tag(id = 377, name = "Kunoichi"), - Tag(id = 24057, name = "Kuntakku"), - Tag(id = 16870, name = "Kurajin"), - Tag(id = 17086, name = "Kurazushi"), - Tag(id = 24069, name = "Kurenai Okome"), - Tag(id = 19039, name = "Kurokami Kujika"), - Tag(id = 22340, name = "Kuromaru"), - Tag(id = 17215, name = "Kuromoinu No Kemono"), - Tag(id = 16138, name = "Kuroshiro"), - Tag(id = 17002, name = "Kurumigi Kurumi"), - Tag(id = 20608, name = "Kuryu Josai"), - Tag(id = 20395, name = "Kusogaki Teikoku"), - Tag(id = 20572, name = "Kusoge"), - Tag(id = 24249, name = "Kussie"), - Tag(id = 23474, name = "Kusu"), - Tag(id = 16114, name = "Kuu"), - Tag(id = 16695, name = "Kuukaku"), - Tag(id = 16265, name = "Kyojinkou"), - Tag(id = 19338, name = "Kyojitsu Himaku"), - Tag(id = 20583, name = "Kyoroukan"), - Tag(id = 16955, name = "Kyougoku Akira"), - Tag(id = 212, name = "Lab Coat"), - Tag(id = 204, name = "Lactation"), - Tag(id = 24573, name = "Landstalker"), - Tag(id = 22394, name = "Langley"), - Tag(id = 222, name = "Large Insertions"), - Tag(id = 15925, name = "Largo"), - Tag(id = 75, name = "Latex"), - Tag(id = 1407, name = "Layer Cake"), - Tag(id = 25125, name = "Leash"), - Tag(id = 16341, name = "Lee Soo-hyon"), - Tag(id = 16998, name = "Lee Yo Dong"), - Tag(id = 1647, name = "Leg Lock"), - Tag(id = 7978, name = "Legjob"), - Tag(id = 17052, name = "Lenna"), - Tag(id = 16985, name = "Leon"), - Tag(id = 22295, name = "Leonstar"), - Tag(id = 958, name = "Leotard"), - Tag(id = 16665, name = "Lhytiss"), - Tag(id = 19309, name = "Liangshan Bo"), - Tag(id = 16290, name = "Liaswe No.9"), - Tag(id = 16517, name = "Lillian Ljungstrom"), - Tag(id = 17102, name = "Ling"), - Tag(id = 782, name = "Lingerie"), - Tag(id = 8995, name = "Lion"), - Tag(id = 20966, name = "Lioness"), - Tag(id = 15916, name = "Little Retro"), - Tag(id = 710, name = "Living Clothes"), - Tag(id = 3709, name = "Lizard Girl"), - Tag(id = 2491, name = "Lizard Guy"), - Tag(id = 54, name = "Lolicon"), - Tag(id = 16143, name = "Lolita Core"), - Tag(id = 2742, name = "Long Tongue"), - Tag(id = 25252, name = "Lordkingu"), - Tag(id = 17085, name = "Love Junky"), - Tag(id = 16261, name = "Lovely Kinoko"), - Tag(id = 3681, name = "Low Bestiality"), - Tag(id = 94, name = "Low Lolicon"), - Tag(id = 1938, name = "Low Shotacon"), - Tag(id = 16943, name = "M Company"), - Tag(id = 16541, name = "M Works"), - Tag(id = 16221, name = "M2 Company"), - Tag(id = 23339, name = "Maako Asagiri"), - Tag(id = 16931, name = "Macaroni.e"), - Tag(id = 16957, name = "Machan Nankin"), - Tag(id = 271, name = "Machine"), - Tag(id = 23066, name = "Machino Suteinu"), - Tag(id = 23767, name = "Machio"), - Tag(id = 13273, name = "Maggot"), - Tag(id = 640, name = "Magical Girl"), - Tag(id = 16059, name = "Mahou Shounen Majorian"), - Tag(id = 55, name = "Maid"), - Tag(id = 25194, name = "Maita Keikaku"), - Tag(id = 16243, name = "Majorina"), - Tag(id = 17572, name = "Makamaka Dou"), - Tag(id = 25636, name = "Makeup"), - Tag(id = 16004, name = "Makie Sazaki"), - Tag(id = 24882, name = "Makoto Araiwa"), - Tag(id = 16744, name = "Makoto Sako"), - Tag(id = 15886, name = "Makoto Teteno"), - Tag(id = 22583, name = "Malboro"), - Tag(id = 95, name = "Male On Dickgirl"), - Tag(id = 686, name = "Males Only"), - Tag(id = 19159, name = "Mami Itou"), - Tag(id = 15950, name = "Manaka De Ikuno"), - Tag(id = 25025, name = "Manga Jigoku"), - Tag(id = 16486, name = "Mangetsu Ujiya"), - Tag(id = 16208, name = "Mannmaru"), - Tag(id = 23178, name = "Mao Fa Bao"), - Tag(id = 22921, name = "Maou Kyuu"), - Tag(id = 24668, name = "Mari Tamaki"), - Tag(id = 21395, name = "Marie Ange"), - Tag(id = 19487, name = "Marika Hoshino"), - Tag(id = 20235, name = "Marusuke"), - Tag(id = 19645, name = "Maruya Kae"), - Tag(id = 16437, name = "Mashiba Kenta"), - Tag(id = 118, name = "Masked Face"), - Tag(id = 23319, name = "Master Asia"), - Tag(id = 90, name = "Masturbation"), - Tag(id = 16647, name = "Masuda Aura"), - Tag(id = 23163, name = "Mata Kara Stream"), - Tag(id = 16307, name = "Matsukazon"), - Tag(id = 15891, name = "Matsumoto Mimi"), - Tag(id = 16969, name = "Mazala."), - Tag(id = 16463, name = "Me Ten"), - Tag(id = 21432, name = "Mebaeros"), - Tag(id = 1260, name = "Mecha Boy"), - Tag(id = 1615, name = "Mecha Girl"), - Tag(id = 16932, name = "Medetaya"), - Tag(id = 24450, name = "Meikyukoubou"), - Tag(id = 16825, name = "Melibe Mukade"), - Tag(id = 5329, name = "Menstruation"), - Tag(id = 5201, name = "Mermaid"), - Tag(id = 5341, name = "Merman"), - Tag(id = 25382, name = "Merryweather"), - Tag(id = 959, name = "Metal Armor"), - Tag(id = 24906, name = "Metameta"), - Tag(id = 24907, name = "Metametadan"), - Tag(id = 20406, name = "Metata"), - Tag(id = 16617, name = "Miakis"), - Tag(id = 16429, name = "Michiru Katou"), - Tag(id = 16085, name = "Microgravity"), - Tag(id = 3289, name = "Midget"), - Tag(id = 17027, name = "Midoh Tsukasaa"), - Tag(id = 18452, name = "Mikado Muramasa"), - Tag(id = 18687, name = "Mikado Sensei"), - Tag(id = 17065, name = "Mikage Mika"), - Tag(id = 152, name = "Miko"), - Tag(id = 22689, name = "Mikumo"), - Tag(id = 18023, name = "Mikuni Jiou"), - Tag(id = 16363, name = "Mikupantu"), - Tag(id = 205, name = "Milf"), - Tag(id = 17078, name = "Milfeuille Sakuraba"), - Tag(id = 811, name = "Military"), - Tag(id = 17476, name = "Dekamarasu Scirocco"), - Tag(id = 685, name = "Demon"), - Tag(id = 78, name = "Demon Girl"), - Tag(id = 17023, name = "Deriken"), - Tag(id = 17024, name = "Deriya"), - Tag(id = 16876, name = "Descent Into Darkness"), - Tag(id = 24824, name = "Detention"), - Tag(id = 1151, name = "Diaper"), - Tag(id = 23413, name = "Dic-f41"), - Tag(id = 149, name = "Dick Growth"), - Tag(id = 150, name = "Dickgirl On Dickgirl"), - Tag(id = 16693, name = "Dickgirl On Female"), - Tag(id = 266, name = "Dickgirl On Male"), - Tag(id = 3068, name = "Dickgirls Only"), - Tag(id = 2735, name = "Dicknipples"), - Tag(id = 24289, name = "Digianko"), - Tag(id = 111, name = "Dilf"), - Tag(id = 16926, name = "Dingo Egret"), - Tag(id = 16927, name = "Dingo Igrit"), - Tag(id = 7096, name = "Dinosaur"), - Tag(id = 19202, name = "Dismantling"), - Tag(id = 17018, name = "Doburoki"), - Tag(id = 261, name = "Dog"), - Tag(id = 446, name = "Dog Boy"), - Tag(id = 296, name = "Dog Girl"), - Tag(id = 15889, name = "Dogu Bros."), - Tag(id = 16974, name = "Dojidom"), - Tag(id = 17952, name = "Doku Ninjin"), - Tag(id = 5464, name = "Doll Joints"), - Tag(id = 2506, name = "Dolphin"), - Tag(id = 5665, name = "Donkey"), - Tag(id = 18545, name = "Doppel Gangers"), - Tag(id = 22418, name = "Dorina"), - Tag(id = 22635, name = "Dosukoi"), - Tag(id = 1525, name = "Double Anal"), - Tag(id = 1589, name = "Double Blowjob"), - Tag(id = 133, name = "Double Penetration"), - Tag(id = 17249, name = "Double Sensei Life"), - Tag(id = 217, name = "Double Vaginal"), - Tag(id = 1229, name = "Dougi"), - Tag(id = 16490, name = "Doumeki"), - Tag(id = 5865, name = "Dragon"), - Tag(id = 24209, name = "Drasna"), - Tag(id = 23510, name = "Drawg"), - Tag(id = 19857, name = "Dreamers Fantasy"), - Tag(id = 108, name = "Drugs"), - Tag(id = 775, name = "Drunk"), - Tag(id = 16113, name = "Duga"), - Tag(id = 24408, name = "Eagle Marin"), - Tag(id = 4675, name = "Ear Fuck"), - Tag(id = 19315, name = "Ebio"), - Tag(id = 18286, name = "Ebipan"), - Tag(id = 17371, name = "Ebisuya"), - Tag(id = 1157, name = "Eel"), - Tag(id = 1273, name = "Eggs"), - Tag(id = 23385, name = "Eji"), - Tag(id = 1698, name = "Electric Shocks"), - Tag(id = 24182, name = "Elephant"), - Tag(id = 748, name = "Elf"), - Tag(id = 24369, name = "Elf-san Wa Yaserarenai."), - Tag(id = 16643, name = "Elizaveta Hedervary"), - Tag(id = 16929, name = "Emeralda Etuva"), - Tag(id = 417, name = "Emotionless Sex"), - Tag(id = 17236, name = "Ena Seishuin"), - Tag(id = 17237, name = "Ena Seishuuin"), - Tag(id = 16930, name = "Endou Macaroni"), - Tag(id = 297, name = "Enema"), - Tag(id = 19026, name = "Ero Hon"), - Tag(id = 16815, name = "Erotic Mania"), - Tag(id = 20271, name = "Etk"), - Tag(id = 24870, name = "Etori Yuuya"), - Tag(id = 16417, name = "Ex-driver"), - Tag(id = 17088, name = "Executant"), - Tag(id = 17044, name = "Executional"), - Tag(id = 134, name = "Exhibitionism"), - Tag(id = 16482, name = "Exorcist Miko"), - Tag(id = 1815, name = "Eye Penetration"), - Tag(id = 1699, name = "Eyemask"), - Tag(id = 1227, name = "Eyepatch"), - Tag(id = 20744, name = "Eyo"), - Tag(id = 176, name = "Facesitting"), - Tag(id = 232, name = "Fairy"), - Tag(id = 19301, name = "Farron"), - Tag(id = 974, name = "Farting"), - Tag(id = 1890, name = "Father"), - Tag(id = 16027, name = "Faulklin"), - Tag(id = 16966, name = "Fcnurse"), - Tag(id = 16861, name = "Femal"), - Tag(id = 101, name = "Females Only"), - Tag(id = 240, name = "Femdom"), - Tag(id = 455, name = "Feminization"), - Tag(id = 15865, name = "Ffm Threesome"), - Tag(id = 1406, name = "Fft Threesome"), - Tag(id = 16337, name = "Figure"), - Tag(id = 528, name = "Filming"), - Tag(id = 11, name = "Fingering"), - Tag(id = 23994, name = "Firing Pin"), - Tag(id = 376, name = "First Person Perspective"), - Tag(id = 10947, name = "Fish"), - Tag(id = 13079, name = "Fishnets"), - Tag(id = 218, name = "Fisting"), - Tag(id = 24402, name = "Flaccid"), - Tag(id = 21373, name = "Flamenco Diamond"), - Tag(id = 21374, name = "Flamenco Ruby"), - Tag(id = 21375, name = "Flamenco Sapphire"), - Tag(id = 536, name = "Foot Insertion"), - Tag(id = 502, name = "Foot Licking"), - Tag(id = 355, name = "Footjob"), - Tag(id = 24432, name = "Forbidden Content"), - Tag(id = 514, name = "Forniphilia"), - Tag(id = 9242, name = "Fox"), - Tag(id = 716, name = "Fox Boy"), - Tag(id = 1094, name = "Fox Girl"), - Tag(id = 25605, name = "Foxinshadow"), - Tag(id = 25286, name = "Foxxx321"), - Tag(id = 834, name = "Freckles"), - Tag(id = 22144, name = "Fredrika"), - Tag(id = 5458, name = "Frog"), - Tag(id = 7363, name = "Frog Girl"), - Tag(id = 151, name = "Frottage"), - Tag(id = 23984, name = "Fuji Potato"), - Tag(id = 18059, name = "Fujii Sakuya"), - Tag(id = 18155, name = "Fujikatsupiko"), - Tag(id = 17505, name = "Fujimoto Go"), - Tag(id = 16121, name = "Fujitani Sonami"), - Tag(id = 16421, name = "Fukai Youki"), - Tag(id = 16975, name = "Fukaumi Tadashito"), - Tag(id = 17200, name = "Fukuyama San"), - Tag(id = 791, name = "Full Body Tattoo"), - Tag(id = 24998, name = "Full Censored"), - Tag(id = 15866, name = "Full Censorship"), - Tag(id = 15871, name = "Full Color"), - Tag(id = 17284, name = "Fumotonoya"), - Tag(id = 1439, name = "Fundoshi"), - Tag(id = 563, name = "Furry"), - Tag(id = 20956, name = "Fushimori Tonkatsu"), - Tag(id = 79, name = "Futanari"), - Tag(id = 16756, name = "Futsuka"), - Tag(id = 21620, name = "Fuuka Kazaguruma"), - Tag(id = 17696, name = "Fuuzen No Tomoshibi"), - Tag(id = 16583, name = "Fuwa Kaduki"), - Tag(id = 19171, name = "Fwpa"), - Tag(id = 16828, name = "G-maru Edition"), - Tag(id = 18256, name = "G.to.me"), - Tag(id = 241, name = "Gag"), - Tag(id = 24168, name = "Gakuran"), - Tag(id = 23017, name = "Ganesha"), - Tag(id = 219, name = "Gaping"), - Tag(id = 316, name = "Garter Belt"), - Tag(id = 2778, name = "Gasmask"), - Tag(id = 22826, name = "Gasper Vladi"), - Tag(id = 20741, name = "Gass. Mosa"), - Tag(id = 17257, name = "Gayasabu"), - Tag(id = 21679, name = "Gekidan Futari"), - Tag(id = 267, name = "Gender Bender"), - Tag(id = 15873, name = "Gene Shalit"), - Tag(id = 16913, name = "Genjuro Kazanari"), - Tag(id = 16616, name = "Genso Suikoden"), - Tag(id = 17226, name = "Genso Suikoden 5"), - Tag(id = 17176, name = "Gesho Ichiro"), - Tag(id = 16818, name = "Gevanni"), - Tag(id = 923, name = "Ghost"), - Tag(id = 2744, name = "Giant"), - Tag(id = 1706, name = "Giantess"), - Tag(id = 25288, name = "Giantessamazons"), - Tag(id = 5218, name = "Gigantic Breasts"), - Tag(id = 16236, name = "Gijinka"), - Tag(id = 16760, name = "Ginkaku"), - Tag(id = 16620, name = "Girlchoco"), - Tag(id = 22566, name = "Glamorous Sky"), - Tag(id = 53, name = "Glasses"), - Tag(id = 3976, name = "Glory Hole"), - Tag(id = 9628, name = "Goat"), - Tag(id = 4296, name = "Goblin"), - Tag(id = 17238, name = "Godou Kusanagi"), - Tag(id = 17433, name = "Gogogo"), - Tag(id = 23116, name = "Gohan Oomori"), - Tag(id = 537, name = "Gokkun"), - Tag(id = 21383, name = "Goko"), - Tag(id = 10723, name = "Gorilla"), - Tag(id = 1330, name = "Gothic Lolita"), - Tag(id = 23831, name = "Gozenzeuna"), - Tag(id = 16435, name = "Grace Ishikawa"), - Tag(id = 24086, name = "Grad Lancia"), - Tag(id = 23889, name = "Gragas"), - Tag(id = 1904, name = "Granddaughter"), - Tag(id = 5121, name = "Grandfather"), - Tag(id = 16065, name = "Grandia Iii"), - Tag(id = 4724, name = "Grandmother"), - Tag(id = 17319, name = "Granny Smith"), - Tag(id = 17068, name = "Greek Myth"), - Tag(id = 25439, name = "Groovymidnightshow"), - Tag(id = 23631, name = "Grop"), - Tag(id = 695, name = "Group"), - Tag(id = 7097, name = "Growth"), - Tag(id = 20957, name = "Grpr"), - Tag(id = 34, name = "Guro"), - Tag(id = 1658, name = "Gyaru"), - Tag(id = 4454, name = "Gyaru-oh"), - Tag(id = 156, name = "Gymshorts"), - Tag(id = 17318, name = "Milkcure"), - Tag(id = 243, name = "Milking"), - Tag(id = 16602, name = "Millefiori Firianno Biscotti"), - Tag(id = 23274, name = "Millia"), - Tag(id = 18027, name = "Mimana Orimoto"), - Tag(id = 23225, name = "Mina Shirouto"), - Tag(id = 114, name = "Mind Break"), - Tag(id = 116, name = "Mind Control"), - Tag(id = 3724, name = "Minigirl"), - Tag(id = 5707, name = "Miniguy"), - Tag(id = 4842, name = "Minotaur"), - Tag(id = 23177, name = "Miou Ootori"), - Tag(id = 16345, name = "Mirayia"), - Tag(id = 16018, name = "Missing Cover"), - Tag(id = 21546, name = "Misuke"), - Tag(id = 16377, name = "Mitoukana"), - Tag(id = 19911, name = "Mitsuhide"), - Tag(id = 18486, name = "Mitsuko"), - Tag(id = 22161, name = "Mitsunoho"), - Tag(id = 19284, name = "Miu Otsuki"), - Tag(id = 25514, name = "Miyabe Kiwi"), - Tag(id = 23417, name = "Miyabi Ash"), - Tag(id = 19158, name = "Miyama Yasuhiro"), - Tag(id = 17060, name = "Mizupii"), - Tag(id = 15869, name = "Mmf Threesome"), - Tag(id = 16095, name = "Mmt Threesome"), - Tag(id = 16009, name = "Moeharuka Non"), - Tag(id = 23164, name = "Mohorovicic Matako"), - Tag(id = 23511, name = "Mokechi"), - Tag(id = 23765, name = "Moki"), - Tag(id = 25011, name = "Mokko"), - Tag(id = 22519, name = "Mokkuafunfun"), - Tag(id = 23903, name = "Mokottsu"), - Tag(id = 20625, name = "Momihama"), - Tag(id = 16346, name = "Momoishi"), - Tag(id = 24588, name = "Momoka"), - Tag(id = 16757, name = "Momoya"), - Tag(id = 7567, name = "Monkey"), - Tag(id = 6717, name = "Monoeye"), - Tag(id = 237, name = "Monster"), - Tag(id = 285, name = "Monster Girl"), - Tag(id = 18423, name = "Moon Zero"), - Tag(id = 22080, name = "Moonfishcafe"), - Tag(id = 17059, name = "Moonlight Panic"), - Tag(id = 3028, name = "Moral Degeneration"), - Tag(id = 20001, name = "Mori Udura"), - Tag(id = 22527, name = "Morizoh"), - Tag(id = 15867, name = "Mosaic Censorship"), - Tag(id = 206, name = "Mother"), - Tag(id = 14906, name = "Mouse"), - Tag(id = 734, name = "Mouse Boy"), - Tag(id = 1802, name = "Mouse Girl"), - Tag(id = 15910, name = "Mtf Threesome"), - Tag(id = 17083, name = "Mugen Fiammatta"), - Tag(id = 17124, name = "Mugifumi Tetsudauyo"), - Tag(id = 15863, name = "Multi-work Series"), - Tag(id = 3622, name = "Multiple Arms"), - Tag(id = 272, name = "Multiple Breasts"), - Tag(id = 21176, name = "Multiple Nipples"), - Tag(id = 481, name = "Multiple Paizuri"), - Tag(id = 1100, name = "Multiple Penises"), - Tag(id = 17228, name = "Mune-mune"), - Tag(id = 16884, name = "Muratataichi"), - Tag(id = 119, name = "Muscle"), - Tag(id = 20643, name = "Muscle Growth"), - Tag(id = 2197, name = "Mute"), - Tag(id = 16787, name = "Myon"), - Tag(id = 25638, name = "Myster Box"), - Tag(id = 15929, name = "Mystic Cage"), - Tag(id = 16449, name = "Nabeshima Akira"), - Tag(id = 16912, name = "Nabu Umedama"), - Tag(id = 20729, name = "Nagano-n"), - Tag(id = 16789, name = "Nagumo."), - Tag(id = 12, name = "Nakadashi"), - Tag(id = 20242, name = "Nakate Sae"), - Tag(id = 19813, name = "Nama Wasabi Honten"), - Tag(id = 16852, name = "Namida"), - Tag(id = 15958, name = "Nan"), - Tag(id = 15893, name = "Nanaki"), - Tag(id = 20068, name = "Nanaki Nanatarou"), - Tag(id = 16442, name = "Nanako Todoroki"), - Tag(id = 17096, name = "Nanami-kasuga"), - Tag(id = 15959, name = "Nann"), - Tag(id = 16832, name = "Naono Bokera"), - Tag(id = 16704, name = "Naruga"), - Tag(id = 20996, name = "Naruse Sakei"), - Tag(id = 15885, name = "Nase No Go"), - Tag(id = 22604, name = "Natalie"), - Tag(id = 17012, name = "Natsu An"), - Tag(id = 17158, name = "Natsu No Kumo"), - Tag(id = 15887, name = "Natsumi Takao"), - Tag(id = 16264, name = "Natsune Tachibana"), - Tag(id = 5644, name = "Navel Fuck"), - Tag(id = 1188, name = "Nazi"), - Tag(id = 16819, name = "Near"), - Tag(id = 287, name = "Necrophilia"), - Tag(id = 16123, name = "Negative From The Beginning"), - Tag(id = 17113, name = "Neji Musume"), - Tag(id = 16320, name = "Nekomarudou Honpo"), - Tag(id = 23607, name = "Nekota Shiro"), - Tag(id = 24552, name = "Nekoweapons"), - Tag(id = 16514, name = "Nesshisen"), - Tag(id = 105, name = "Netorare"), - Tag(id = 20880, name = "New Horizon"), - Tag(id = 805, name = "Niece"), - Tag(id = 22906, name = "Nijigen"), - Tag(id = 2822, name = "Ninja"), - Tag(id = 23632, name = "Nintai Akira"), - Tag(id = 10476, name = "Nipple Birth"), - Tag(id = 4719, name = "Nipple Expansion"), - Tag(id = 903, name = "Nipple Fuck"), - Tag(id = 16837, name = "Nishioka Kyoudai"), - Tag(id = 15906, name = "Nishizuki Chikara"), - Tag(id = 17174, name = "Nitta"), - Tag(id = 20829, name = "Nitta Kani"), - Tag(id = 18637, name = "Nizimu Me"), - Tag(id = 16572, name = "No Graffiti"), - Tag(id = 16248, name = "Nomoto Saharu"), - Tag(id = 25482, name = "Non-nude"), - Tag(id = 15983, name = "Nonorumia"), - Tag(id = 17805, name = "Noramushi"), - Tag(id = 25481, name = "Norman Maggot"), - Tag(id = 8273, name = "Nose Fuck"), - Tag(id = 1481, name = "Nose Hook"), - Tag(id = 15955, name = "Notsu"), - Tag(id = 16024, name = "Novel"), - Tag(id = 16155, name = "Nudity Only"), - Tag(id = 16364, name = "Nuko"), - Tag(id = 338, name = "Nun"), - Tag(id = 235, name = "Nurse"), - Tag(id = 18238, name = "Nururyun"), - Tag(id = 17035, name = "Nutmeg"), - Tag(id = 19856, name = "Nyankofujin"), - Tag(id = 22878, name = "Nyansei-fukko"), - Tag(id = 19730, name = "O-ide Riko"), - Tag(id = 19809, name = "Ochazukenori"), - Tag(id = 20689, name = "Ochine"), - Tag(id = 1440, name = "Octopus"), - Tag(id = 16279, name = "Ogiura Tomoko"), - Tag(id = 18991, name = "Ohkawa Aoi"), - Tag(id = 21315, name = "Ohno Kogorou"), - Tag(id = 22307, name = "Oidemase"), - Tag(id = 3088, name = "Oil"), - Tag(id = 24399, name = "Ojo Jotaro"), - Tag(id = 15991, name = "Ojou"), - Tag(id = 20508, name = "Okano Hajimetei"), - Tag(id = 16272, name = "Okayu Club"), - Tag(id = 19112, name = "Okome Takeichi"), - Tag(id = 8946, name = "Old Lady"), - Tag(id = 334, name = "Old Man"), - Tag(id = 22633, name = "Omae Umasou Da Na"), - Tag(id = 16766, name = "Omya"), - Tag(id = 1651, name = "Onahole"), - Tag(id = 1234, name = "Oni"), - Tag(id = 22587, name = "Oono Saeko"), - Tag(id = 18200, name = "Ootaki Miura"), - Tag(id = 17188, name = "Ootsuka Shunji"), - Tag(id = 20717, name = "Ootsuki Kyouko"), - Tag(id = 16151, name = "Oppai Brothers"), - Tag(id = 1013, name = "Oppai Loli"), - Tag(id = 20320, name = "Opq"), - Tag(id = 1650, name = "Orc"), - Tag(id = 17516, name = "Ore P 2-gou"), - Tag(id = 23659, name = "Ore To Kakuni To Abura Soba"), - Tag(id = 457, name = "Orgasm Denial"), - Tag(id = 16585, name = "Oruga Susumu"), - Tag(id = 16947, name = "Orunito"), - Tag(id = 15914, name = "Oshioki Yuki-chan"), - Tag(id = 24995, name = "Osovo"), - Tag(id = 25227, name = "Ostrich"), - Tag(id = 16634, name = "Osuneko Shoukai"), - Tag(id = 17862, name = "Otaku Life Japan"), - Tag(id = 20726, name = "Otome Kibun"), - Tag(id = 16941, name = "Otonano Omochiya"), - Tag(id = 16894, name = "Otosaki Tsubaki"), - Tag(id = 17152, name = "Otoskai Tsubaki"), - Tag(id = 17087, name = "Ototoi No Are"), - Tag(id = 24715, name = "Ougi Production"), - Tag(id = 16122, name = "Ousama Jihen"), - Tag(id = 15861, name = "Out Of Order"), - Tag(id = 23387, name = "Outcount"), - Tag(id = 24808, name = "Outdoor"), - Tag(id = 17133, name = "Outdoors"), - Tag(id = 1334, name = "Oyakodon"), - Tag(id = 16241, name = "Pacifier"), - Tag(id = 183, name = "Paizuri"), - Tag(id = 7823, name = "Panda Girl"), - Tag(id = 25178, name = "Pandaj"), - Tag(id = 22688, name = "Pandaya"), - Tag(id = 10970, name = "Panther"), - Tag(id = 135, name = "Pantyhose"), - Tag(id = 136, name = "Pantyjob"), - Tag(id = 17100, name = "Paopa Ship"), - Tag(id = 827, name = "Parasite"), - Tag(id = 17137, name = "Partial Color"), - Tag(id = 16412, name = "Partially Translated"), - Tag(id = 1516, name = "Pasties"), - Tag(id = 23693, name = "Pecora"), - Tag(id = 456, name = "Pegging"), - Tag(id = 17153, name = "Pekopon Shinryaku Hyougikai"), - Tag(id = 7368, name = "Penis Birth"), - Tag(id = 16563, name = "Peri"), - Tag(id = 2136, name = "Petrification"), - Tag(id = 1515, name = "Phimosis"), - Tag(id = 2432, name = "Phone Sex"), - Tag(id = 18992, name = "Pied A Terre"), - Tag(id = 299, name = "Piercing"), - Tag(id = 600, name = "Pig"), - Tag(id = 5713, name = "Pig Girl"), - Tag(id = 4211, name = "Pig Man"), - Tag(id = 1153, name = "Pillory"), - Tag(id = 7261, name = "Pirate"), - Tag(id = 1674, name = "Piss Drinking"), - Tag(id = 22865, name = "Pisti"), - Tag(id = 793, name = "Plant Girl"), - Tag(id = 22520, name = "Poki"), - Tag(id = 1399, name = "Pole Dancing"), - Tag(id = 1732, name = "Policeman"), - Tag(id = 320, name = "Policewoman"), - Tag(id = 22829, name = "Pometa"), - Tag(id = 3599, name = "Ponygirl"), - Tag(id = 760, name = "Ponytail"), - Tag(id = 15894, name = "Poor Grammar"), - Tag(id = 16310, name = "Poporo"), - Tag(id = 16453, name = "Porunamin C"), - Tag(id = 538, name = "Possession"), - Tag(id = 268, name = "Pregnant"), - Tag(id = 503, name = "Prehensile Hair"), - Tag(id = 11469, name = "Priest"), - Tag(id = 20497, name = "Principal Kuno"), - Tag(id = 25407, name = "Project Physalis"), - Tag(id = 1496, name = "Prolapse"), - Tag(id = 294, name = "Prostate Massage"), - Tag(id = 931, name = "Prostitution"), - Tag(id = 16367, name = "Psycho Soldier"), - Tag(id = 1482, name = "Pubic Stubble"), - Tag(id = 2990, name = "Public Use"), - Tag(id = 16795, name = "Purimu"), - Tag(id = 16250, name = "Purupyon"), - Tag(id = 18500, name = "Pythagora Switch"), - Tag(id = 19115, name = "Quattro"), - Tag(id = 20138, name = "R-otome"), - Tag(id = 17110, name = "Rabbit Revelry Inc."), - Tag(id = 12938, name = "Raccoon Boy"), - Tag(id = 3567, name = "Raccoon Girl"), - Tag(id = 6453, name = "Race Queen"), - Tag(id = 21425, name = "Raichi Hoshimiya"), - Tag(id = 21955, name = "Rajyaki"), - Tag(id = 16139, name = "Rakanka Tiger"), - Tag(id = 23718, name = "Rakuen Tsuihou"), - Tag(id = 15920, name = "Rakugaki Syachu"), - Tag(id = 19071, name = "Randamu"), - Tag(id = 2551, name = "Randoseru"), - Tag(id = 43, name = "Rape"), - Tag(id = 17006, name = "Rati"), - Tag(id = 18186, name = "Rebaudio"), - Tag(id = 23800, name = "Recording"), - Tag(id = 15915, name = "Redraw"), - Tag(id = 17032, name = "Reese"), - Tag(id = 19632, name = "Reisen Two"), - Tag(id = 17270, name = "Remilia"), - Tag(id = 20382, name = "Renekton"), - Tag(id = 15890, name = "Replaced"), - Tag(id = 5574, name = "Reptile"), - Tag(id = 16858, name = "Resi"), - Tag(id = 16257, name = "Retreat"), - Tag(id = 24087, name = "Ricardo Gavarni"), - Tag(id = 16835, name = "Rika Koushu"), - Tag(id = 16836, name = "Rika Kousyu"), - Tag(id = 223, name = "Rimjob"), - Tag(id = 16439, name = "Rinbu"), - Tag(id = 18907, name = "Ringo Koubou"), - Tag(id = 17252, name = "Ritomasu"), - Tag(id = 16659, name = "Rittiri"), - Tag(id = 56, name = "Robot"), - Tag(id = 15872, name = "Rock Dou"), - Tag(id = 24880, name = "Rofu Pukaj"), - Tag(id = 19929, name = "Roudoc 2-gou"), - Tag(id = 15960, name = "Route A"), - Tag(id = 16682, name = "Rurio Nagase"), - Tag(id = 17810, name = "Ryo Yazaki"), - Tag(id = 16481, name = "Ryo-ko"), - Tag(id = 21672, name = "Ryokurin"), - Tag(id = 224, name = "Ryona"), - Tag(id = 17179, name = "Ryouji Sawa"), - Tag(id = 23147, name = "Ryouta Murakami"), - Tag(id = 16365, name = "Ryu Morikawa"), - Tag(id = 16457, name = "Ryuho"), - Tag(id = 16063, name = "Ryuji Kawamoto"), - Tag(id = 16021, name = "Ryuushika"), - Tag(id = 16944, name = "Sabatama Yumi"), - Tag(id = 15897, name = "Sabato Mihashigo"), - Tag(id = 16996, name = "Sabawo 380"), - Tag(id = 16518, name = "Sagasile"), - Tag(id = 16402, name = "Sai Akuto"), - Tag(id = 24085, name = "Saifu"), - Tag(id = 16670, name = "Saikare."), - Tag(id = 17177, name = "Saikoro"), - Tag(id = 17017, name = "Saikyo Tomomi"), - Tag(id = 17146, name = "Sailor Aluminum Siren"), - Tag(id = 16973, name = "Saimin"), - Tag(id = 16013, name = "Saimin Pikatto House"), - Tag(id = 16186, name = "Sakazaki"), - Tag(id = 16252, name = "Saki Watanabe"), - Tag(id = 15883, name = "Sakino Asuka"), - Tag(id = 23322, name = "Sakki Okita"), - Tag(id = 23612, name = "Sakkimita"), - Tag(id = 24437, name = "Sakura Kagamihara"), - Tag(id = 23768, name = "Sakurabobu"), - Tag(id = 423, name = "Saliva"), - Tag(id = 15881, name = "Sammohung"), - Tag(id = 15882, name = "Samohanyunpyou"), - Tag(id = 16125, name = "Sample"), - Tag(id = 15928, name = "Sangokushi Puzzle Taisen"), - Tag(id = 17117, name = "Santa Maria"), - Tag(id = 24336, name = "Sarugaso"), - Tag(id = 16506, name = "Sasara Somae"), - Tag(id = 16694, name = "Sata"), - Tag(id = 16586, name = "Satellite U"), - Tag(id = 16375, name = "Satoshi Sou"), - Tag(id = 16824, name = "Satou Kiyotoshi"), - Tag(id = 23366, name = "Satsuki Marin"), - Tag(id = 20566, name = "Sautsu"), - Tag(id = 19124, name = "Sawara Cashy"), - Tag(id = 16428, name = "Sayuri Hirose"), - Tag(id = 15876, name = "Scanmark"), - Tag(id = 1336, name = "Scar"), - Tag(id = 273, name = "Scat"), - Tag(id = 68, name = "School Swimsuit"), - Tag(id = 22, name = "Schoolboy Uniform"), - Tag(id = 24, name = "Schoolgirl Uniform"), - Tag(id = 17103, name = "Schwarzkatze"), - Tag(id = 17104, name = "Schwarzkratze"), - Tag(id = 6068, name = "Scrotal Lingerie"), - Tag(id = 17224, name = "Seikan Nekoguruma"), - Tag(id = 17995, name = "Sekaiju No Anone"), - Tag(id = 788, name = "Selfcest"), - Tag(id = 17004, name = "Semaru Taiho"), - Tag(id = 16440, name = "Sen Renbu"), - Tag(id = 17171, name = "Senbonzakura"), - Tag(id = 18677, name = "Sendai Oni"), - Tag(id = 23873, name = "Sendaiki"), - Tag(id = 22387, name = "Senhime"), - Tag(id = 17322, name = "Senki Zesshou"), - Tag(id = 17809, name = "Setsuko"), - Tag(id = 109, name = "Sex Toys"), - Tag(id = 16644, name = "Sexual Sunday"), - Tag(id = 16438, name = "Shadow Thorn"), - Tag(id = 331, name = "Shared Senses"), - Tag(id = 20051, name = "Shark"), - Tag(id = 3974, name = "Shark Boy"), - Tag(id = 22443, name = "Sharon"), - Tag(id = 5823, name = "Shaved Head"), - Tag(id = 15652, name = "Sheep Boy"), - Tag(id = 784, name = "Sheep Girl"), - Tag(id = 458, name = "Shemale"), - Tag(id = 25341, name = "Sherwood"), - Tag(id = 21466, name = "Shibainu Lab"), - Tag(id = 321, name = "Shibari"), - Tag(id = 17154, name = "Shichimi Hacchin"), - Tag(id = 23344, name = "Shikiouzi"), - Tag(id = 22907, name = "Shima Shuu"), - Tag(id = 21991, name = "Shimada Hisami"), - Tag(id = 137, name = "Shimapan"), - Tag(id = 16860, name = "Shimotsuki Kairi"), - Tag(id = 22950, name = "Shina Mon"), - Tag(id = 21673, name = "Shinna"), - Tag(id = 18092, name = "Shinomiya Utai"), - Tag(id = 16190, name = "Shinooka Fuku Enchou"), - Tag(id = 20450, name = "Shinoshima Usa"), - Tag(id = 18494, name = "Shinsuke Inue"), - Tag(id = 16822, name = "Shinsuke Nishizono"), - Tag(id = 17370, name = "Shintaro Konno"), - Tag(id = 24070, name = "Shio Onigiri"), - Tag(id = 16451, name = "Shiokaze Kaidou"), - Tag(id = 19727, name = "Shiomeshi"), - Tag(id = 18973, name = "Shirokuma Sato"), - Tag(id = 18720, name = "Shirotakurota"), - Tag(id = 16914, name = "Shirow"), - Tag(id = 17014, name = "Shisaki Tayuu"), - Tag(id = 20045, name = "Shizu Shidou"), - Tag(id = 16014, name = "Short Circuit"), - Tag(id = 66, name = "Shotacon"), - Tag(id = 16970, name = "Shounen Kyouso"), - Tag(id = 18864, name = "Shounen Teacher Group"), - Tag(id = 17053, name = "Shoutai Fumei"), - Tag(id = 17054, name = "Shoutai Humei"), - Tag(id = 711, name = "Shrinking"), - Tag(id = 17130, name = "Shugetsu"), - Tag(id = 22637, name = "Shunju"), - Tag(id = 21905, name = "Shut Hell"), - Tag(id = 23240, name = "Shuuyu Koukin"), - Tag(id = 24355, name = "Sibasaki Koh"), - Tag(id = 15943, name = "Silver Sandial"), - Tag(id = 16041, name = "Sinyati"), - Tag(id = 138, name = "Sister"), - Tag(id = 17329, name = "Sjf"), - Tag(id = 16020, name = "Ski"), - Tag(id = 5877, name = "Skinsuit"), - Tag(id = 19682, name = "Skn"), - Tag(id = 300, name = "Slave"), - Tag(id = 153, name = "Sleeping"), - Tag(id = 1449, name = "Slime"), - Tag(id = 13461, name = "Slime Boy"), - Tag(id = 1408, name = "Slime Girl"), - Tag(id = 22104, name = "Slime King"), - Tag(id = 23847, name = "Slow Masturbation Research Society"), - Tag(id = 4597, name = "Slug"), - Tag(id = 32, name = "Small Breasts"), - Tag(id = 25364, name = "Small Penis"), - Tag(id = 429, name = "Smegma"), - Tag(id = 1254, name = "Smell"), - Tag(id = 3524, name = "Smoking"), - Tag(id = 8672, name = "Snail Girl"), - Tag(id = 4702, name = "Snake"), - Tag(id = 23232, name = "Snake Boy"), - Tag(id = 785, name = "Snake Girl"), - Tag(id = 254, name = "Snuff"), - Tag(id = 6084, name = "Sockjob"), - Tag(id = 16849, name = "Softcel Pictures"), - Tag(id = 16846, name = "Soichiro Arima"), - Tag(id = 81, name = "Sole Dickgirl"), - Tag(id = 25, name = "Sole Female"), - Tag(id = 23, name = "Sole Male"), - Tag(id = 24229, name = "Solefemale"), - Tag(id = 608, name = "Solo Action"), - Tag(id = 18433, name = "Solullaby"), - Tag(id = 23404, name = "Son-son"), - Tag(id = 20256, name = "Sorairo Porin"), - Tag(id = 17197, name = "Sorauta"), - Tag(id = 24446, name = "Southern Emperor"), - Tag(id = 1359, name = "Spanking"), - Tag(id = 23067, name = "Spanner And Camellia"), - Tag(id = 889, name = "Speculum"), - Tag(id = 18061, name = "Speedy"), - Tag(id = 16215, name = "Spicaya"), - Tag(id = 11905, name = "Spider"), - Tag(id = 3623, name = "Spider Girl"), - Tag(id = 16823, name = "Spirit Of Ecsta"), - Tag(id = 16917, name = "Spon"), - Tag(id = 16898, name = "Square Rain"), - Tag(id = 5355, name = "Squid Boy"), - Tag(id = 1582, name = "Squid Girl"), - Tag(id = 7230, name = "Squirrel Girl"), - Tag(id = 786, name = "Squirting"), - Tag(id = 7371, name = "Ssbbm"), - Tag(id = 7093, name = "Ssbbw"), - Tag(id = 23302, name = "Stagger"), - Tag(id = 20756, name = "Staggio Ton-pierohbee"), - Tag(id = 16997, name = "Steevejo"), - Tag(id = 22316, name = "Steward"), - Tag(id = 884, name = "Stewardess"), - Tag(id = 57, name = "Stockings"), - Tag(id = 225, name = "Stomach Deformation"), - Tag(id = 17126, name = "Story Act"), - Tag(id = 15864, name = "Story Arc"), - Tag(id = 139, name = "Strap-on"), - Tag(id = 6576, name = "Stretching"), - Tag(id = 3873, name = "Stuck In Wall"), - Tag(id = 17106, name = "Studio Campus"), - Tag(id = 21909, name = "Studio Crimson"), - Tag(id = 17045, name = "Studio Mxh"), - Tag(id = 20431, name = "Studio Onion"), - Tag(id = 23602, name = "Suckaline"), - Tag(id = 17003, name = "Suda Yuriko"), - Tag(id = 16952, name = "Sui Kayama"), - Tag(id = 16811, name = "Sui Ren"), - Tag(id = 23732, name = "Suidoku"), - Tag(id = 16452, name = "Suina Ruu"), - Tag(id = 17184, name = "Suiranao"), - Tag(id = 17069, name = "Suiseimushi"), - Tag(id = 22021, name = "Sukurinton"), - Tag(id = 140, name = "Sumata"), - Tag(id = 141, name = "Sundress"), - Tag(id = 166, name = "Sunglasses"), - Tag(id = 25589, name = "Super Smash Bros"), - Tag(id = 15904, name = "Supertoasted"), - Tag(id = 16899, name = "Susu Suzumi"), - Tag(id = 16016, name = "Sutazubu-saku"), - Tag(id = 25195, name = "Suzuki Senpai"), - Tag(id = 22531, name = "Suzuki Tenpura"), - Tag(id = 16491, name = "Suzuku Kururugi"), - Tag(id = 16663, name = "Suzumi Yuu"), - Tag(id = 17273, name = "Suzunari"), - Tag(id = 23674, name = "Suzune Arizono"), - Tag(id = 696, name = "Sweating"), - Tag(id = 69, name = "Swimsuit"), - Tag(id = 635, name = "Swinging"), - Tag(id = 1955, name = "Syringe"), - Tag(id = 17011, name = "System Speculation"), - Tag(id = 754, name = "Table Masturbation"), - Tag(id = 19556, name = "Tachinami Takajin"), - Tag(id = 16816, name = "Tadai Yuu"), - Tag(id = 16664, name = "Tae Anezaki"), - Tag(id = 24925, name = "Tae Yamada"), - Tag(id = 17908, name = "Taeko Nonomiya"), - Tag(id = 25425, name = "Tail"), - Tag(id = 1156, name = "Tail Plug"), - Tag(id = 16907, name = "Tail-gun"), - Tag(id = 2861, name = "Tailjob"), - Tag(id = 16464, name = "Taimanin"), - Tag(id = 16465, name = "Taimanin Haiboku"), - Tag(id = 17797, name = "Taiyoushin"), - Tag(id = 20077, name = "Takakujyu"), - Tag(id = 16281, name = "Takakura Row"), - Tag(id = 16742, name = "Takamura Chinatsu"), - Tag(id = 24757, name = "Takatou Kei"), - Tag(id = 23832, name = "Takatsu Rin"), - Tag(id = 18111, name = "Takimoto Yukari"), - Tag(id = 16480, name = "Takoyaki Yoshi"), - Tag(id = 922, name = "Tall Girl"), - Tag(id = 120, name = "Tall Man"), - Tag(id = 16626, name = "Tama Shippo"), - Tag(id = 24669, name = "Tamaki Mari"), - Tag(id = 20900, name = "Tami Nishimikado"), - Tag(id = 23735, name = "Tanken Wa Ra 2"), - Tag(id = 15870, name = "Tankoubon"), - Tag(id = 303, name = "Tanlines"), - Tag(id = 17151, name = "Tanukigirl"), - Tag(id = 22214, name = "Tanukine"), - Tag(id = 16794, name = "Tanuma"), - Tag(id = 16698, name = "Tapir"), - Tag(id = 22323, name = "Tasu"), - Tag(id = 17057, name = "Tat"), - Tag(id = 16821, name = "Tateno Makoto"), - Tag(id = 20524, name = "Tatsuhide"), - Tag(id = 23415, name = "Tayuri"), - Tag(id = 112, name = "Teacher"), - Tag(id = 23459, name = "Tecoya"), - Tag(id = 16158, name = "Tee Crown"), - Tag(id = 25562, name = "Teebsly"), - Tag(id = 16487, name = "Tekorun"), - Tag(id = 22899, name = "Tenjou Shio"), - Tag(id = 196, name = "Tentacles"), - Tag(id = 24136, name = "Tep"), - Tag(id = 16180, name = "Teru-bee"), - Tag(id = 18721, name = "Tetsu Hagane"), - Tag(id = 12900, name = "Thick Eyebrows"), - Tag(id = 769, name = "Thigh High Boots"), - Tag(id = 641, name = "Tiara"), - Tag(id = 2728, name = "Tickling"), - Tag(id = 12085, name = "Tiger"), - Tag(id = 960, name = "Tights"), - Tag(id = 23600, name = "Tigrevurmud Vorn"), - Tag(id = 23173, name = "Tilia"), - Tag(id = 15913, name = "Time Stop"), - Tag(id = 17717, name = "Tobaroku"), - Tag(id = 20550, name = "Tocori"), - Tag(id = 495, name = "Toddlercon"), - Tag(id = 16287, name = "Tohno Hongshi"), - Tag(id = 16785, name = "Tokage 3gou"), - Tag(id = 21710, name = "Tokizawa"), - Tag(id = 20551, name = "Tokori"), - Tag(id = 24137, name = "Tokyo Survivor"), - Tag(id = 16928, name = "Tokyo-ya"), - Tag(id = 19807, name = "Tom Jpn"), - Tag(id = 16595, name = "Tomadoiki"), - Tag(id = 13, name = "Tomboy"), - Tag(id = 129, name = "Tomgirl"), - Tag(id = 25091, name = "Tomobukiya"), - Tag(id = 16226, name = "Tomoko Ogura"), - Tag(id = 15917, name = "Tonboya"), - Tag(id = 16537, name = "Tongue Job"), - Tag(id = 23105, name = "Tooku No Mura"), - Tag(id = 1441, name = "Tooth Brushing"), - Tag(id = 15888, name = "Tooyama Masuko"), - Tag(id = 25256, name = "Toriaezu."), - Tag(id = 752, name = "Torture"), - Tag(id = 17328, name = "Toshinari Arito"), - Tag(id = 25478, name = "Toshkarts"), - Tag(id = 23840, name = "Totomono"), - Tag(id = 22879, name = "Touma Nigou"), - Tag(id = 16946, name = "Toyotomi Hideyoshi"), - Tag(id = 113, name = "Tracksuit"), - Tag(id = 7331, name = "Trampling"), - Tag(id = 195, name = "Transformation"), - Tag(id = 233, name = "Tribadism"), - Tag(id = 5540, name = "Triple Anal"), - Tag(id = 226, name = "Triple Penetration"), - Tag(id = 1526, name = "Triple Vaginal"), - Tag(id = 16765, name = "Try Hougen"), - Tag(id = 23845, name = "Tsujiadon"), - Tag(id = 16106, name = "Tsukasa Kotobuki"), - Tag(id = 16786, name = "Tsukigara Rosshi"), - Tag(id = 16560, name = "Tsukigata Rosshi"), - Tag(id = 23897, name = "Tsuru Kame"), - Tag(id = 15999, name = "Tsurumanjaro"), - Tag(id = 15908, name = "Tsuta Hiroko"), - Tag(id = 18801, name = "Tsuzuki Shiori"), - Tag(id = 792, name = "Ttf Threesome"), - Tag(id = 15875, name = "Ttm Threesome"), - Tag(id = 244, name = "Tube"), - Tag(id = 22694, name = "Turnover"), - Tag(id = 10994, name = "Turtle"), - Tag(id = 780, name = "Tutor"), - Tag(id = 17021, name = "Twin Bell"), - Tag(id = 142, name = "Twins"), - Tag(id = 115, name = "Twintails"), - Tag(id = 23174, name = "Tyria"), - Tag(id = 25109, name = "Tzinnxt"), - Tag(id = 16561, name = "Uekio Aloe"), - Tag(id = 15884, name = "Uesato Takeharu"), - Tag(id = 23739, name = "Ujiro"), - Tag(id = 22521, name = "Umaisake"), - Tag(id = 20106, name = "Ume Kurumizawa"), - Tag(id = 18201, name = "Umetsu Yasuomi"), - Tag(id = 16776, name = "Una777"), - Tag(id = 712, name = "Unbirth"), - Tag(id = 15862, name = "Uncensored"), - Tag(id = 7151, name = "Uncle"), - Tag(id = 286, name = "Underwater"), - Tag(id = 21894, name = "Uni Unio"), - Tag(id = 19786, name = "Unihoge"), - Tag(id = 16292, name = "Unomaa"), - Tag(id = 1517, name = "Unusual Pupils"), - Tag(id = 1565, name = "Unusual Teeth"), - Tag(id = 16432, name = "Urabata"), - Tag(id = 16184, name = "Uragiru Kuchibiru"), - Tag(id = 18434, name = "Urako"), - Tag(id = 227, name = "Urethra Insertion"), - Tag(id = 143, name = "Urination"), - Tag(id = 16624, name = "Uru Fusube In"), - Tag(id = 16945, name = "Usagiro"), - Tag(id = 20522, name = "Ustilago Nuda"), - Tag(id = 17161, name = "Usuk"), - Tag(id = 18665, name = "Utsu Kawaya"), - Tag(id = 6045, name = "Vacbed"), - Tag(id = 2800, name = "Vaginal Sticker"), - Tag(id = 58, name = "Vampire"), - Tag(id = 16948, name = "Variant Set"), - Tag(id = 23976, name = "Virginia Nitouhei"), - Tag(id = 213, name = "Virginity"), - Tag(id = 17046, name = "Viriya"), - Tag(id = 17458, name = "Visual She"), - Tag(id = 228, name = "Vomit"), - Tag(id = 238, name = "Vore"), - Tag(id = 124, name = "Voyeurism"), - Tag(id = 16192, name = "Wada Tomohiro"), - Tag(id = 20686, name = "Waio"), - Tag(id = 2084, name = "Waiter"), - Tag(id = 374, name = "Waitress"), - Tag(id = 15879, name = "Walkure"), - Tag(id = 19824, name = "Wanya Aguda"), - Tag(id = 16645, name = "Warikka"), - Tag(id = 16191, name = "Watanabe Enchou"), - Tag(id = 16212, name = "Watari Naomi"), - Tag(id = 16182, name = "Watermarked"), - Tag(id = 16007, name = "Webtoon"), - Tag(id = 16507, name = "Wedding Ring"), - Tag(id = 1756, name = "Weight Gain"), - Tag(id = 16197, name = "Welkin Gunther"), - Tag(id = 4703, name = "Wet Clothes"), - Tag(id = 3719, name = "Whip"), - Tag(id = 264, name = "Widow"), - Tag(id = 17058, name = "Will Powers"), - Tag(id = 16994, name = "Wingjob"), - Tag(id = 404, name = "Wings"), - Tag(id = 926, name = "Witch"), - Tag(id = 1560, name = "Wolf"), - Tag(id = 2066, name = "Wolf Boy"), - Tag(id = 1551, name = "Wolf Girl"), - Tag(id = 2868, name = "Wooden Horse"), - Tag(id = 828, name = "Worm"), - Tag(id = 332, name = "Wormhole"), - Tag(id = 17066, name = "Wrestle Angels Survivor"), - Tag(id = 1990, name = "Wrestling"), - Tag(id = 17042, name = "X-boy"), - Tag(id = 144, name = "X-ray"), - Tag(id = 20575, name = "Xera"), - Tag(id = 16249, name = "Yada Masaka"), - Tag(id = 16883, name = "Yagami"), - Tag(id = 17084, name = "Yagami Baneri"), - Tag(id = 16967, name = "Yahiko"), - Tag(id = 24447, name = "Yamada Botan"), - Tag(id = 18806, name = "Yamada Kana"), - Tag(id = 17470, name = "Yamada Tasaku"), - Tag(id = 16275, name = "Yamamomo Kajitsu"), - Tag(id = 16511, name = "Yamamoto Hideo"), - Tag(id = 18257, name = "Yamane Akira"), - Tag(id = 16006, name = "Yamane Amano"), - Tag(id = 16877, name = "Yami No Matsuri"), - Tag(id = 968, name = "Yandere"), - Tag(id = 283, name = "Yaoi"), - Tag(id = 23158, name = "Yarou Tomo No Bansankai"), - Tag(id = 16015, name = "Yasou Shigeru"), - Tag(id = 16508, name = "Yasu G"), - Tag(id = 22667, name = "Yasuhara Osamu"), - Tag(id = 23460, name = "Yatsugi Teco"), - Tag(id = 17040, name = "Yokohama-ya"), - Tag(id = 16965, name = "Yokotaya"), - Tag(id = 16273, name = "Yoshiki Aya"), - Tag(id = 17459, name = "Yoshizuki Minoru"), - Tag(id = 16817, name = "Youna"), - Tag(id = 18367, name = "Yousei Kanin"), - Tag(id = 22257, name = "Yshtola"), - Tag(id = 20770, name = "Yu Tendo"), - Tag(id = 16862, name = "Yubel"), - Tag(id = 15997, name = "Yui Narumi"), - Tag(id = 17115, name = "Yukai Sachiko"), - Tag(id = 17850, name = "Yukata Kobayakawa"), - Tag(id = 16117, name = "Yuki Hiiragi"), - Tag(id = 21680, name = "Yukiruru"), - Tag(id = 19205, name = "Yume No Omutsu Kissa"), - Tag(id = 16916, name = "Yumego"), - Tag(id = 16454, name = "Yumemigotoki"), - Tag(id = 17542, name = "Yumesaki Ai"), - Tag(id = 24592, name = "Yumeutsutsu Hideki"), - Tag(id = 15900, name = "Yumiko"), - Tag(id = 16420, name = "Yunisuke"), - Tag(id = 14, name = "Yuri"), - Tag(id = 24046, name = "Yuriyura"), - Tag(id = 17798, name = "Yuugaitosho"), - Tag(id = 16130, name = "Yuugi Yami"), - Tag(id = 20140, name = "Yuzurizaki Nero"), - Tag(id = 20767, name = "Zeitaku Zanmai"), - Tag(id = 24430, name = "Ziggurat"), - Tag(id = 21354, name = "Zinkurou"), - Tag(id = 290, name = "Zombie") - ).sortedBy { it.name } -} diff --git a/src/all/ninehentai/src/eu/kanade/tachiyomi/extension/all/ninehentai/NineHentai.kt b/src/all/ninehentai/src/eu/kanade/tachiyomi/extension/all/ninehentai/NineHentai.kt index fef8bdd68..18347ca97 100644 --- a/src/all/ninehentai/src/eu/kanade/tachiyomi/extension/all/ninehentai/NineHentai.kt +++ b/src/all/ninehentai/src/eu/kanade/tachiyomi/extension/all/ninehentai/NineHentai.kt @@ -1,12 +1,5 @@ package eu.kanade.tachiyomi.extension.all.ninehentai -import com.github.salomonbrys.kotson.array -import com.github.salomonbrys.kotson.fromJson -import com.github.salomonbrys.kotson.int -import com.github.salomonbrys.kotson.string -import com.google.gson.Gson -import com.google.gson.JsonElement -import com.google.gson.JsonParser import eu.kanade.tachiyomi.annotations.Nsfw import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.POST @@ -19,12 +12,22 @@ import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.util.asJsoup +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.buildJsonObject +import kotlinx.serialization.json.decodeFromJsonElement +import kotlinx.serialization.json.encodeToJsonElement +import kotlinx.serialization.json.jsonArray +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.put import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.OkHttpClient import okhttp3.Request -import okhttp3.RequestBody +import okhttp3.RequestBody.Companion.toRequestBody import okhttp3.Response +import org.jsoup.nodes.Element import rx.Observable +import rx.schedulers.Schedulers +import uy.kohesive.injekt.injectLazy import java.util.Calendar @Nsfw @@ -40,67 +43,102 @@ class NineHentai : HttpSource() { override val client: OkHttpClient = network.cloudflareClient - private val gson = Gson() + private val json: Json by injectLazy() - override fun popularMangaRequest(page: Int): Request { - return POST(baseUrl + SEARCH_URL, headers, buildRequestBody(page = page, sort = 1)) + // Builds request for /api/getBooks endpoint + private fun buildSearchRequest( + searchText: String = "", + page: Int, + sort: Int = 0, + range: List = listOf(0, 2000), + includedTags: List = listOf(), + excludedTags: List = listOf() + ): Request { + val request = SearchRequest( + text = searchText, + page = page - 1, // Source starts counting from 0, not 1 + sort = sort, + pages = Range(range), + tag = Items( + items = TagArrays( + included = includedTags, + excluded = excludedTags + ) + ) + ) + val jsonString = buildJsonObject { + put("search", json.encodeToJsonElement(request)) + }.toString() + return POST("$baseUrl$SEARCH_URL", headers, jsonString.toRequestBody(MEDIA_TYPE)) } - override fun latestUpdatesRequest(page: Int): Request { - return POST(baseUrl + SEARCH_URL, headers, buildRequestBody(page = page)) + // Builds request for /api/getBookById endpoint + private fun buildDetailRequest(id: Int): Request { + val jsonString = buildJsonObject { put("id", id) }.toString() + return POST("$baseUrl$MANGA_URL", headers, jsonString.toRequestBody(MEDIA_TYPE)) } - override fun fetchPopularManga(page: Int): Observable { - return client.newCall(popularMangaRequest(page)) - .asObservableSuccess() - .map { response -> - getMangaList(response, page) + // Popular and Latest + + override fun popularMangaRequest(page: Int): Request = buildSearchRequest(page = page, sort = 1) + + override fun popularMangaParse(response: Response): MangasPage { + val results = json.parseToJsonElement(response.body!!.string()).jsonObject["results"]!!.jsonArray + if (results.isEmpty()) return MangasPage(listOf(), false) + return MangasPage( + results.map { + val manga = json.decodeFromJsonElement(it) + SManga.create().apply { + setUrlWithoutDomain("/g/${manga.id}") + title = manga.title + thumbnail_url = "${manga.image_server + manga.id}/cover.jpg" + } + }, + true + ) + } + + override fun latestUpdatesRequest(page: Int): Request = buildSearchRequest(page = page) + + override fun latestUpdatesParse(response: Response): MangasPage = popularMangaParse(response) + + // Manga Details + + override fun mangaDetailsParse(response: Response): SManga { + return SManga.create().apply { + response.asJsoup().selectFirst("div#bigcontainer").let { info -> + title = info.select("h1").text() + thumbnail_url = info.selectFirst("div#cover v-lazy-image").attr("abs:src") + status = SManga.COMPLETED + artist = info.selectTextOrNull("div.field-name:contains(Artist:) a.tag") + author = info.selectTextOrNull("div.field-name:contains(Group:) a.tag") ?: artist + genre = info.selectTextOrNull("div.field-name:contains(Tag:) a.tag") + // Additional details + description = listOf( + Pair("Alternative Title", info.selectTextOrNull("h2")), + Pair("Pages", info.selectTextOrNull("div#info > div:contains(pages)")), + Pair("Parody", info.selectTextOrNull("div.field-name:contains(Parody:) a.tag")), + Pair("Category", info.selectTextOrNull("div.field-name:contains(Category:) a.tag")), + Pair("Language", info.selectTextOrNull("div.field-name:contains(Language:) a.tag")), + ).filterNot { it.second.isNullOrEmpty() }.joinToString("\n\n") { "${it.first}: ${it.second}" } } - } - - override fun fetchLatestUpdates(page: Int): Observable { - return client.newCall(latestUpdatesRequest(page)) - .asObservableSuccess() - .map { response -> - getMangaList(response, page) - } - } - - override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable { - return client.newCall(searchMangaRequest(page, query, filters)) - .asObservableSuccess() - .map { response -> - getMangaList(response, page) - } - } - - private fun getMangaList(response: Response, page: Int): MangasPage { - val jsonData = response.body!!.string() - val jsonObject = JsonParser().parse(jsonData).asJsonObject - val totalPages = jsonObject["total_count"].int - val results = jsonObject["results"].array - return MangasPage(parseSearch(results.toList()), page < totalPages) - } - - private fun parseSearch(jsonArray: List): List { - val mutableList = mutableListOf() - jsonArray.forEach { json -> - val manga = SManga.create() - val gsonManga = gson.fromJson(json) - manga.url = "/g/${gsonManga.id}" - manga.title = gsonManga.title - manga.thumbnail_url = gsonManga.image_server + gsonManga.id + "/cover.jpg" - manga.genre = gsonManga.tags.filter { it.type == 1 }.joinToString { it.name } - manga.artist = gsonManga.tags.firstOrNull { it.type == 4 }?.name - manga.initialized = true - mutableList.add(manga) } - return mutableList } + // Ensures no exceptions are thrown when scraping additional details + private fun Element.selectTextOrNull(selector: String): String? { + val list = this.select(selector) + return if (list.isEmpty()) { + null + } else { + list.joinToString(", ") { it.text() } + } + } + + // Chapter + override fun chapterListParse(response: Response): List { - val document = response.asJsoup() - val time = document.select("div#info div time").text() + val time = response.asJsoup().select("div#info div time").text() return listOf( SChapter.create().apply { name = "Chapter" @@ -142,58 +180,19 @@ class NineHentai : HttpSource() { } } - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val includedTags = mutableListOf() - val excludedTags = mutableListOf() - var sort = 0 - for (filter in if (filters.isEmpty()) getFilterList() else filters) { - when (filter) { - is GenreList -> { - filter.state.forEach { f -> - if (!f.isIgnored()) { - if (f.isExcluded()) - excludedTags.add(f) - else - includedTags.add(f) - } - } - } - is Sorting -> { - sort = filter.state!!.index - } - } - } - return POST(baseUrl + SEARCH_URL, headers, buildRequestBody(query, page, sort, includedTags, excludedTags)) - } - - override fun mangaDetailsParse(response: Response): SManga { - return SManga.create().apply { - response.asJsoup().select("div.card-body").firstOrNull()?.let { info -> - title = info.select("h1").text() - genre = info.select("div.field-name:contains(Tag:) a.tag").joinToString { it.text() } - artist = info.select("div.field-name:contains(Artist:) a.tag").joinToString { it.text() } - thumbnail_url = info.select("div#cover v-lazy-image").attr("abs:src") - } - } - } + // Page List override fun pageListRequest(chapter: SChapter): Request { val mangaId = chapter.url.substringAfter("/g/").toInt() - return POST(baseUrl + MANGA_URL, headers, buildIdBody(mangaId)) + return buildDetailRequest(mangaId) } override fun pageListParse(response: Response): List { - val jsonData = response.body!!.string() - val jsonObject = JsonParser().parse(jsonData).asJsonObject - val jsonArray = jsonObject.getAsJsonObject("results") - var imageUrl: String - var totalPages: Int - var mangaId: String - jsonArray.let { json -> - mangaId = json["id"].string - imageUrl = json["image_server"].string + mangaId - totalPages = json["total_page"].int - } + val resultsObj = json.parseToJsonElement(response.body!!.string()).jsonObject["results"]!! + val manga = json.decodeFromJsonElement(resultsObj) + val imageUrl = manga.image_server + manga.id + var totalPages = manga.total_page + val pages = mutableListOf() client.newCall( @@ -212,39 +211,158 @@ class NineHentai : HttpSource() { return pages } - private fun buildRequestBody(searchText: String = "", page: Int, sort: Int = 0, includedTags: MutableList = arrayListOf(), excludedTags: MutableList = arrayListOf()): RequestBody { - val json = gson.toJson(mapOf("search" to SearchRequest(text = searchText, page = page - 1, sort = sort, tag = mapOf("items" to Items(includedTags, excludedTags))))) - return RequestBody.create(MEDIA_TYPE, json) + // Search + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val filterList = if (filters.isEmpty()) getFilterList() else filters + var sort = 0 + val range = mutableListOf(0, 2000) + val includedTags = mutableListOf() + val excludedTags = mutableListOf() + for (filter in filterList) { + when (filter) { + is SortFilter -> { + sort = filter.state!!.index + } + is MinPagesFilter -> { + try { + range[0] = filter.state.toInt() + } catch (_: NumberFormatException) { + // Suppress and retain default value + } + } + is MaxPagesFilter -> { + try { + range[1] = filter.state.toInt() + } catch (_: NumberFormatException) { + // Suppress and retain default value + } + } + is IncludedFilter -> { + includedTags += getTags(filter.state, 1) + } + is ExcludedFilter -> { + excludedTags += getTags(filter.state, 1) + } + is GroupFilter -> { + includedTags += getTags(filter.state, 2) + } + is ParodyFilter -> { + includedTags += getTags(filter.state, 3) + } + is ArtistFilter -> { + includedTags += getTags(filter.state, 4) + } + is CharacterFilter -> { + includedTags += getTags(filter.state, 5) + } + is CategoryFilter -> { + includedTags += getTags(filter.state, 6) + } + } + } + return buildSearchRequest( + searchText = query, + page = page, + sort = sort, + range = range, + includedTags = includedTags, + excludedTags = excludedTags + ) } - private fun buildIdBody(id: Int): RequestBody { - return RequestBody.create(MEDIA_TYPE, gson.toJson(mapOf("id" to id))) + private fun getTags(queries: String, type: Int): List { + return queries.split(",").map(String::trim) + .filterNot(String::isBlank).mapNotNull { query -> + val jsonString = buildJsonObject { + put("tag_name", query) + put("tag_type", type) + }.toString() + lookupTags(jsonString) + } } - private class GenreList(tags: List) : Filter.Group("Tags", tags) + // Based on HentaiHand ext + private fun lookupTags(request: String): Tag? { + return client.newCall(POST("$baseUrl$TAG_URL", headers, request.toRequestBody(MEDIA_TYPE))) + .asObservableSuccess() + .subscribeOn(Schedulers.io()) + .map { response -> + // Returns the first matched tag, or null if there are no results + val tagList = json.parseToJsonElement(response.body!!.string()).jsonObject["results"]!!.jsonArray.map { + json.decodeFromJsonElement(it) + } + if (tagList.isEmpty()) return@map null + else tagList.first() + }.toBlocking().first() + } - private class Sorting : Filter.Sort( - "Sorting", + override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable { + if (query.startsWith("id:")) { + val id = query.substringAfter("id:").toInt() + return client.newCall(buildDetailRequest(id)) + .asObservableSuccess() + .map { response -> + fetchSingleManga(response) + } + } + return super.fetchSearchManga(page, query, filters) + } + + private fun fetchSingleManga(response: Response): MangasPage { + val resultsObj = json.parseToJsonElement(response.body!!.string()).jsonObject["results"]!! + val manga = json.decodeFromJsonElement(resultsObj) + val list = listOf( + SManga.create().apply { + setUrlWithoutDomain("/g/${manga.id}") + title = manga.title + thumbnail_url = "${manga.image_server + manga.id}/cover.jpg" + } + ) + return MangasPage(list, false) + } + + override fun searchMangaParse(response: Response): MangasPage = popularMangaParse(response) + + // Filters + + private class SortFilter : Filter.Sort( + "Sort by", arrayOf("Newest", "Popular Right now", "Most Fapped", "Most Viewed", "By Title"), Selection(1, false) ) + private class MinPagesFilter : Filter.Text("Minimum Pages") + private class MaxPagesFilter : Filter.Text("Maximum Pages") + private class IncludedFilter : Filter.Text("Included Tags") + private class ExcludedFilter : Filter.Text("Excluded Tags") + private class ArtistFilter : Filter.Text("Artist") + private class GroupFilter : Filter.Text("Group") + private class ParodyFilter : Filter.Text("Parody") + private class CharacterFilter : Filter.Text("Character") + private class CategoryFilter : Filter.Text("Category") + override fun getFilterList() = FilterList( - Sorting(), - GenreList(NHTags.getTagsList()) + Filter.Header("Search by id with \"id:\" in front of query"), + Filter.Separator(), + SortFilter(), + MinPagesFilter(), + MaxPagesFilter(), + IncludedFilter(), + ExcludedFilter(), + ArtistFilter(), + GroupFilter(), + ParodyFilter(), + CharacterFilter(), + CategoryFilter(), ) override fun imageUrlParse(response: Response): String = throw Exception("Not Used") - override fun popularMangaParse(response: Response): MangasPage = throw Exception("Not Used") - - override fun latestUpdatesParse(response: Response): MangasPage = throw Exception("Not Used") - - override fun searchMangaParse(response: Response): MangasPage = throw Exception("Not Used") - companion object { private val MEDIA_TYPE = "application/json; charset=utf-8".toMediaTypeOrNull() private const val SEARCH_URL = "/api/getBook" private const val MANGA_URL = "/api/getBookByID" + private const val TAG_URL = "/api/getTag" } } diff --git a/src/all/ninehentai/src/eu/kanade/tachiyomi/extension/all/ninehentai/NineHentaiDto.kt b/src/all/ninehentai/src/eu/kanade/tachiyomi/extension/all/ninehentai/NineHentaiDto.kt new file mode 100644 index 000000000..1c08191e2 --- /dev/null +++ b/src/all/ninehentai/src/eu/kanade/tachiyomi/extension/all/ninehentai/NineHentaiDto.kt @@ -0,0 +1,72 @@ +package eu.kanade.tachiyomi.extension.all.ninehentai + +import kotlinx.serialization.Serializable + +@Serializable +data class Manga( + val id: Int, + val title: String, + val image_server: String, + val total_page: Int +) + +/* +The basic search request JSON object looks like this: +{ + "search": { + "text": "", + "page": 1, + "sort": 1, + "pages": { + "range": [0, 2000] + }, + "tag": { + "items": { + "included": [], + "excluded": [] + } + } + } +} +*/ + +/* + Sort = 0, Newest + Sort = 1, Popular right now + Sort = 2, Most Fapped + Sort = 3, Most Viewed + Sort = 4, By title + */ + +@Serializable +data class SearchRequest( + val text: String, + val page: Int, + val sort: Int, + val pages: Range, + val tag: Items +) + +@Serializable +data class Range( + val range: List +) + +@Serializable +data class Items( + val items: TagArrays +) + +@Serializable +data class TagArrays( + val included: List, + val excluded: List +) + +@Serializable +data class Tag( + val id: Int, + val name: String, + val description: String? = null, + val type: Int = 1 +) diff --git a/src/all/ninehentai/src/eu/kanade/tachiyomi/extension/all/ninehentai/NineHentaiUrlActivity.kt b/src/all/ninehentai/src/eu/kanade/tachiyomi/extension/all/ninehentai/NineHentaiUrlActivity.kt new file mode 100644 index 000000000..87f3ea5e3 --- /dev/null +++ b/src/all/ninehentai/src/eu/kanade/tachiyomi/extension/all/ninehentai/NineHentaiUrlActivity.kt @@ -0,0 +1,38 @@ +package eu.kanade.tachiyomi.extension.all.ninehentai + +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://9hentai.to/g/xxxxxx intents and redirects them to + * the main Tachiyomi process. + */ +class NineHentaiUrlActivity : Activity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val pathSegments = intent?.data?.pathSegments + if (pathSegments != null && pathSegments.size > 1) { + val id = pathSegments[1] + val mainIntent = Intent().apply { + action = "eu.kanade.tachiyomi.SEARCH" + putExtra("query", "id:$id") + putExtra("filter", packageName) + } + + try { + startActivity(mainIntent) + } catch (e: ActivityNotFoundException) { + Log.e("NineHentaiUrlActivity", e.toString()) + } + } else { + Log.e("NineHentaiUrlActivity", "could not parse uri from intent $intent") + } + + finish() + exitProcess(0) + } +}