From b2d8775f19d52b4660ca9d71b908802373d1e0b3 Mon Sep 17 00:00:00 2001 From: Johannes Joens <34899572+jopejoe1@users.noreply.github.com> Date: Mon, 5 Apr 2021 08:34:03 +1200 Subject: [PATCH] MangaCatalog multisrc extension (#6399) * Create Ww3Read.kt * Added Ww3ReadGenerator.kt * Added Overrieds and icon * Added More Sources https://ww1.readjujutsukaisen.com https://ww1.readtowerofgod.com https://ww2.readhxh.com https://readsololeveling.org https://ww3.readneverland.com * Update Ww3ReadGenerator.kt * Removed old Names * Added files with new name * Removed files with old name * Added files with new name --- .../default/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2081 bytes .../default/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1200 bytes .../default/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 2604 bytes .../default/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 4242 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 6267 bytes .../default/res/web_hi_res_512.png | Bin 0 -> 26429 bytes .../ReadAttackOnTitanShingekiNoKyojinManga.kt | 46 ++++++++ ...adBokuNoHeroAcademiaMyHeroAcademiaManga.kt | 19 ++++ .../src/ReadHunterxHunterMangaOnline.kt | 14 +++ .../src/ReadJujutsuKaisenMangaOnline.kt | 16 +++ .../src/ReadKaguyaSamaMangaOnline.kt | 18 +++ ...adNanatsuNoTaizai7DeadlySinsMangaOnline.kt | 20 ++++ .../src/ReadOnePunchManMangaOnlineTwo.kt | 38 +++++++ .../src/ReadSoloLevelingMangaManhwaOnline.kt | 12 ++ .../ReadThePromisedNeverlandMangaOnline.kt | 16 +++ .../ReadTokyoGhoulReTokyoGhoulMangaOnline.kt | 17 +++ .../src/ReadTowerOfGodManhwaMangaOnline.kt | 15 +++ .../multisrc/mangacatalog/MangaCatalog.kt | 103 ++++++++++++++++++ .../mangacatalog/MangaCatalogGenerator.kt | 34 ++++++ 19 files changed, 368 insertions(+) create mode 100644 multisrc/overrides/mangacatalog/default/res/mipmap-hdpi/ic_launcher.png create mode 100644 multisrc/overrides/mangacatalog/default/res/mipmap-mdpi/ic_launcher.png create mode 100644 multisrc/overrides/mangacatalog/default/res/mipmap-xhdpi/ic_launcher.png create mode 100644 multisrc/overrides/mangacatalog/default/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 multisrc/overrides/mangacatalog/default/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 multisrc/overrides/mangacatalog/default/res/web_hi_res_512.png create mode 100644 multisrc/overrides/mangacatalog/readattackontitanshingekinokyojinmanga/src/ReadAttackOnTitanShingekiNoKyojinManga.kt create mode 100644 multisrc/overrides/mangacatalog/readbokunoheroacademiamyheroacademiamanga/src/ReadBokuNoHeroAcademiaMyHeroAcademiaManga.kt create mode 100644 multisrc/overrides/mangacatalog/readhunterxhuntermangaonline/src/ReadHunterxHunterMangaOnline.kt create mode 100644 multisrc/overrides/mangacatalog/readjujutsukaisenmangaonline/src/ReadJujutsuKaisenMangaOnline.kt create mode 100644 multisrc/overrides/mangacatalog/readkaguyasamamangaonline/src/ReadKaguyaSamaMangaOnline.kt create mode 100644 multisrc/overrides/mangacatalog/readnanatsunotaizai7deadlysinsmangaonline/src/ReadNanatsuNoTaizai7DeadlySinsMangaOnline.kt create mode 100644 multisrc/overrides/mangacatalog/readonepunchmanmangaonlinetwo/src/ReadOnePunchManMangaOnlineTwo.kt create mode 100644 multisrc/overrides/mangacatalog/readsololevelingmangamanhwaonline/src/ReadSoloLevelingMangaManhwaOnline.kt create mode 100644 multisrc/overrides/mangacatalog/readthepromisedneverlandmangaonline/src/ReadThePromisedNeverlandMangaOnline.kt create mode 100644 multisrc/overrides/mangacatalog/readtokyoghoulretokyoghoulmangaonline/src/ReadTokyoGhoulReTokyoGhoulMangaOnline.kt create mode 100644 multisrc/overrides/mangacatalog/readtowerofgodmanhwamangaonline/src/ReadTowerOfGodManhwaMangaOnline.kt create mode 100644 multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangacatalog/MangaCatalog.kt create mode 100644 multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangacatalog/MangaCatalogGenerator.kt diff --git a/multisrc/overrides/mangacatalog/default/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/default/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..ffa002e3cf41ab7a08cb8f328c9ce1dba91de623 GIT binary patch literal 2081 zcmV++2;TRJP)3p8Nh^&WSVUoY6VXnbDa!FZ@wvJj?q#&--lej3$#YjA0C8 z7{l#{50jsV$wx0ZW)FVwW<5`k$h3(mgJ~O6x|?a6aPOOhxi}0-JTR20l!-h{rNZ1A z1WCF+%Y+kJJWQBVxde_TpX4X}Op?IyGz${v^p9-Lb^`*@G%o;@C5h6S0KxRKy#P?Y zFjvihpd2p%R3MqJW4%BZxol%`CXLID8*x&rFes~7Fs zwTmuXxIjC0?4VAaI;lcw+qNzB@86$h%$Pyz*RQ9Hj10=p&!@b+JW5MTqvgw&(}W2V zsC)PB_1&X>fco|8XQ`>Fq2IrM)30B@=+2!xG<^7Q-Qcuq*NzSzJV-x&{NUI4_U#*` zrlxWrcpp~Lv13PCv}h5XIB|mR-MdG%wYBv9`**TfEc~AE^XJc>^!4jkdj0w}UA=mh z3JMA+At8ZUv}oa6K+~sBw|xBgk>9+i^XJd=i8%@fOJn8Al_Wp^$&)9kWy_Wn8X8Iq z7A&Ca*ROL3(!a4s0D0ud5sHtG=S$EjfacAcXZig3v(<(1q?RpP#@D|ifco_5LpN{U zC-1}t*u(Mat$Ed zJj@qMK`R_TKR=o^YZkqF^-6Uzn4}yIe9WUqkEo=i1Xj)cOYh#jDLOiuD=sdM#*7(5 zYuB#jaOKMudh+B6O`bg2HGm+zzHs3}yF#;6F)=YzRaK>GJ!<;!;REg2vxf!@7+}}3 zj);ihP8|+idJRBEv}0E98bG)>Cdwk6-EdgiK$)4DHkX22@IkPO_U+qiTF!9FNl8gO zqKVP&>C>k?O>vn8iA$}hsEC4sg6h3#B$>&{$@KjBbGt2P-MV#lom)*v5%BPK@7_%Z z4je#47Q?=C0m+xf`}gl@>eQ*+x72mR$Y;vS%dL*LwaoB(ad9!X97nTsKxy5&wKUUq z9w1oEG)@kyaH*Z!rUpQ(t3w`tE4GkMMtm)TcYJhTba(G59k32hf z?o@T6c#0!NjGzY(9w-vI?CflM`0$~^dQP7{?XdMU8lW|6*3ja`ixo*6@{sZ4$14ij zu&^+m9ZRhT5RM-|PJ;&z=J|~DJSZbzZCayalL549)ha$|IA^&(Id|?Hb?w^KYH1n{P zX)=JI$jC@KcI=oUH-gUrJk&ta_g=hs!TpqYyc!@xu!$2Vy1xa95ejwDvuDo~1*P1H zqt}z3o^DmYsR6?EmM&eYr9;?s0f~K`EnBuI9I;$iu3VwcojY3{s|E-)6HM&d z6zW|MNLs05a?;77p@rU!T2!(H2)cavGH;DI63xVdH6NUyI&D3U8HEBRKBYztaHKv7Xqmi_zp^KcFGg=r&{>jemT3j7L+SXe4L zm6Ik-`cvnj+!#4>BzMwST8L`(K|wgj2QB8znL`~qbWn5b`T@co5`)B>@+cL$bm^jd zc8fFsn|?EA&gA_gdD|ACusjA08bm8rtl%GZz;+Hm!11C`MluRNgin2-)lyGdpzr5{ za3Lr5W~@NecO6(9mLIl|Sw6#~7X-+7-JaCK_=K4O$N*#jG5{HX3_u1T3?|m3#N$wR1oIo3Kiz!Z*s!$@emoq7{)M$Ta5n!o)o``aAg&O00000 LNkvXXu0mjf=?(d? literal 0 HcmV?d00001 diff --git a/multisrc/overrides/mangacatalog/default/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/default/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..6718b1d59d74c428ebd0e02255e8fb50e5904976 GIT binary patch literal 1200 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 O0000?kCGGQVirJ^tzq!~R@Mk?J5kOonZ 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 JxvE|G{{SF74Z8pU literal 0 HcmV?d00001 diff --git a/multisrc/overrides/mangacatalog/default/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangacatalog/default/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..434116c30bdd3449b2b27147e27207d264d4167b GIT binary patch literal 6267 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

uC;8Q6l>&Sv9RP0t_ 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 O7KJpqTCR5|@_zvAwThSk literal 0 HcmV?d00001 diff --git a/multisrc/overrides/mangacatalog/readattackontitanshingekinokyojinmanga/src/ReadAttackOnTitanShingekiNoKyojinManga.kt b/multisrc/overrides/mangacatalog/readattackontitanshingekinokyojinmanga/src/ReadAttackOnTitanShingekiNoKyojinManga.kt new file mode 100644 index 000000000..da82a6f6c --- /dev/null +++ b/multisrc/overrides/mangacatalog/readattackontitanshingekinokyojinmanga/src/ReadAttackOnTitanShingekiNoKyojinManga.kt @@ -0,0 +1,46 @@ +package eu.kanade.tachiyomi.extension.en.readattackontitanshingekinokyojinmanga + +import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog +import eu.kanade.tachiyomi.source.model.MangasPage +import eu.kanade.tachiyomi.util.asJsoup +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.source.model.FilterList +import eu.kanade.tachiyomi.source.model.SChapter +import eu.kanade.tachiyomi.source.model.SManga +import eu.kanade.tachiyomi.source.model.Page +import eu.kanade.tachiyomi.source.online.ParsedHttpSource +import okhttp3.Request +import rx.Observable +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element + +class ReadAttackOnTitanShingekiNoKyojinManga : MangaCatalog("Read Attack on Titan/Shingeki no Kyojin Manga", "https://ww7.readsnk.com", "en") { + override val sourceList = listOf( + Pair("Shingeki No Kyojin", "$baseUrl/manga/shingeki-no-kyojin/"), + Pair("Colored", "$baseUrl/manga/shingeki-no-kyojin-colored/"), + Pair("Before the Fall", "$baseUrl/manga/shingeki-no-kyojin-before-the-fall/"), + Pair("Lost Girls", "$baseUrl/manga/shingeki-no-kyojin-lost-girls/"), + Pair("No Regrets", "$baseUrl/manga/attack-on-titan-no-regrets/"), + Pair("Junior High", "$baseUrl/manga/attack-on-titan-junior-high/"), + Pair("Harsh Mistress", "$baseUrl/manga/attack-on-titan-harsh-mistress-of-the-city/"), + Pair("Anthology", "$baseUrl/manga/attack-on-titan-anthology/"), + Pair("Art Book", "$baseUrl/manga/attack-on-titan-exclusive-art-book/"), + Pair("Spoof", "$baseUrl/manga/spoof-on-titan/"), + Pair("Guidebook", "$baseUrl/manga/attack-on-titan-guidebook-inside-outside/"), + Pair("No Regrets Colored", "$baseUrl/manga/attack-on-titan-no-regrets-colored/"), + ).sortedBy { it.first }.distinctBy { it.second } + + override fun chapterListSelector(): String = "div.w-full > .bg-white > .flex" + + override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply { + val name1 = element.select(".flex > a.text-gray-900").text() + val name2 = element.select(".flex > div.text-xs").text() + if (name2 == ""){ + name = name1 + } else { + name = "$name1 - $name2" + } + url = element.select(".ml-auto div.flex a").attr("abs:href") + date_upload = System.currentTimeMillis() + } +} diff --git a/multisrc/overrides/mangacatalog/readbokunoheroacademiamyheroacademiamanga/src/ReadBokuNoHeroAcademiaMyHeroAcademiaManga.kt b/multisrc/overrides/mangacatalog/readbokunoheroacademiamyheroacademiamanga/src/ReadBokuNoHeroAcademiaMyHeroAcademiaManga.kt new file mode 100644 index 000000000..afbe69265 --- /dev/null +++ b/multisrc/overrides/mangacatalog/readbokunoheroacademiamyheroacademiamanga/src/ReadBokuNoHeroAcademiaMyHeroAcademiaManga.kt @@ -0,0 +1,19 @@ +package eu.kanade.tachiyomi.extension.en.readbokunoheroacademiamyheroacademiamanga + +import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog +import eu.kanade.tachiyomi.source.model.MangasPage +import eu.kanade.tachiyomi.util.asJsoup + +class ReadBokuNoHeroAcademiaMyHeroAcademiaManga : MangaCatalog("Read Boku no Hero Academia/My Hero Academia Manga", "https://ww6.readmha.com", "en") { + override val sourceList = listOf( + Pair("Boku no Hero Academia", "$baseUrl/manga/boku-no-hero-academia/"), + Pair("Vigilante", "$baseUrl/manga/vigilante-boku-no-hero-academia-illegals/"), + Pair("Team Up", "$baseUrl/manga/my-hero-academia-team-up-mission/"), + Pair("MHA Smash", "$baseUrl/manga/boku-no-hero-academia-smash/"), + Pair("MHA: School Brief", "$baseUrl/manga/my-hero-academia-school-briefs/"), + Pair("Rising", "$baseUrl/manga/deku-bakugo-rising/"), + Pair("Colored", "$baseUrl/manga/boku-no-hero-academia-colored/"), + Pair("Oumagadoki Zoo", "$baseUrl/manga/oumagadoki-zoo/"), + Pair("Sensei no Bulge", "$baseUrl/manga/sensei-no-bulge/") + ).sortedBy { it.first }.distinctBy { it.second } +} diff --git a/multisrc/overrides/mangacatalog/readhunterxhuntermangaonline/src/ReadHunterxHunterMangaOnline.kt b/multisrc/overrides/mangacatalog/readhunterxhuntermangaonline/src/ReadHunterxHunterMangaOnline.kt new file mode 100644 index 000000000..8f462ae29 --- /dev/null +++ b/multisrc/overrides/mangacatalog/readhunterxhuntermangaonline/src/ReadHunterxHunterMangaOnline.kt @@ -0,0 +1,14 @@ +package eu.kanade.tachiyomi.extension.en.readhunterxhuntermangaonline + +import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog +import eu.kanade.tachiyomi.source.model.MangasPage +import eu.kanade.tachiyomi.util.asJsoup + +class ReadHunterxHunterMangaOnline : MangaCatalog("Read Hunter x Hunter Manga Online", "https://ww2.readhxh.com", "en") { + override val sourceList = listOf( + Pair("Hunter x Hunter", "$baseUrl/manga/hunter-x-hunter/"), + Pair("Colored", "$baseUrl/manga/hunter-x-hunter-colored/"), + Pair("Level E", "$baseUrl/manga/level-e/"), + Pair("Yu Yu Hakusho", "$baseUrl/manga/yu-yu-hakusho/"), + ).sortedBy { it.first }.distinctBy { it.second } +} diff --git a/multisrc/overrides/mangacatalog/readjujutsukaisenmangaonline/src/ReadJujutsuKaisenMangaOnline.kt b/multisrc/overrides/mangacatalog/readjujutsukaisenmangaonline/src/ReadJujutsuKaisenMangaOnline.kt new file mode 100644 index 000000000..a78112608 --- /dev/null +++ b/multisrc/overrides/mangacatalog/readjujutsukaisenmangaonline/src/ReadJujutsuKaisenMangaOnline.kt @@ -0,0 +1,16 @@ +package eu.kanade.tachiyomi.extension.en.readjujutsukaisenmangaonline + +import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog +import eu.kanade.tachiyomi.source.model.MangasPage +import eu.kanade.tachiyomi.util.asJsoup + +class ReadJujutsuKaisenMangaOnline : MangaCatalog("Read Jujutsu Kaisen Manga Online", "https://ww1.readjujutsukaisen.com", "en") { + override val sourceList = listOf( + Pair("Jujutsu Kaisen", "$baseUrl/manga/jujutsu-kaisen/"), + Pair("Jujutsu Kaisen 0", "$baseUrl/manga/jujutsu-kaisen-0/"), + Pair("JJK Light Novel", "$baseUrl/manga/jujutsu-kaisen-first-light-novel/"), + Pair("No.9", "$baseUrl/manga/no-9/"), + Pair("JJK Colored", "$baseUrl/manga/jujutsu-kaisen-colored/"), + Pair("Fanbook", "$baseUrl/manga/jujutsu-kaisen-official-fanbook/"), + ).sortedBy { it.first }.distinctBy { it.second } +} diff --git a/multisrc/overrides/mangacatalog/readkaguyasamamangaonline/src/ReadKaguyaSamaMangaOnline.kt b/multisrc/overrides/mangacatalog/readkaguyasamamangaonline/src/ReadKaguyaSamaMangaOnline.kt new file mode 100644 index 000000000..4b4a60bf2 --- /dev/null +++ b/multisrc/overrides/mangacatalog/readkaguyasamamangaonline/src/ReadKaguyaSamaMangaOnline.kt @@ -0,0 +1,18 @@ +package eu.kanade.tachiyomi.extension.en.readkaguyasamamangaonline + +import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog +import eu.kanade.tachiyomi.source.model.MangasPage +import eu.kanade.tachiyomi.util.asJsoup + +class ReadKaguyaSamaMangaOnline : MangaCatalog("Read Kaguya-sama Manga Online", "https://ww1.readkaguyasama.com", "en") { + override val sourceList = listOf( + Pair("Kaguya-sama: Love is War", "$baseUrl/manga/kaguya-sama-love-is-war/"), + Pair("Official Doujin", "$baseUrl/manga/kaguya-wants-to-be-confessed-to-official-doujin/"), + Pair("Spin off", "$baseUrl/manga/we-want-to-talk-about-kaguya/"), + Pair("Light Novel", "$baseUrl/manga/kaguya-sama-light-novel/"), + Pair("Instant Bullet", "$baseUrl/manga/ib-instant-bullet/"), + Pair("Oshi no Ko", "$baseUrl/manga/oshi-no-ko/"), + Pair("Sayonara Piano Sonata", "$baseUrl/manga/sayonara-piano-sonata/"), + Pair("Original Hinatazaka", "$baseUrl/manga/original-hinatazaka/") + ).sortedBy { it.first }.distinctBy { it.second } +} diff --git a/multisrc/overrides/mangacatalog/readnanatsunotaizai7deadlysinsmangaonline/src/ReadNanatsuNoTaizai7DeadlySinsMangaOnline.kt b/multisrc/overrides/mangacatalog/readnanatsunotaizai7deadlysinsmangaonline/src/ReadNanatsuNoTaizai7DeadlySinsMangaOnline.kt new file mode 100644 index 000000000..a92fa5b65 --- /dev/null +++ b/multisrc/overrides/mangacatalog/readnanatsunotaizai7deadlysinsmangaonline/src/ReadNanatsuNoTaizai7DeadlySinsMangaOnline.kt @@ -0,0 +1,20 @@ +package eu.kanade.tachiyomi.extension.en.readnanatsunotaizai7deadlysinsmangaonline + +import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog +import eu.kanade.tachiyomi.source.model.MangasPage +import eu.kanade.tachiyomi.util.asJsoup + +class ReadNanatsuNoTaizai7DeadlySinsMangaOnline : MangaCatalog("Read Nanatsu no Taizai/7 Deadly Sins Manga Online", "https://ww3.read7deadlysins.com", "en") { + override val sourceList = listOf( + Pair("Mokushiroku no Yonkishi", "$baseUrl/manga/four-horsemen-of-the-apocalypse/"), + Pair("7DS: School", "$baseUrl/manga/mayoe-nanatsu-no-taizai-gakuen/"), + Pair("7DS:7 Days", "$baseUrl/manga/nanatsu-no-taizai-seven-days/"), + Pair("7DS:Vampires", "$baseUrl/manga/nanatsu-no-taizai-vampires-of-edinburgh/"), + Pair("Queen of Altar", "$baseUrl/manga/the-queen-of-the-altar/"), + Pair("7DS: 7 Colors", "$baseUrl/manga/nanatsu-no-taizai-nanairo-no-tsuioku/"), + Pair("7DS x FT", "$baseUrl/manga/fairy-tail-x-nanatsu-no-taizai-christmas-special/"), + Pair("7 Deadly Sins", "$baseUrl/manga/nanatsu-no-taizai/"), + Pair("7DS:7 Scars", "$baseUrl/manga/nanatsu-no-taizai-the-seven-scars-which-they-left-behind/"), + Pair("Kongou Banchou", "$baseUrl/manga/kongou-banchou/"), + ).sortedBy { it.first }.distinctBy { it.second } +} diff --git a/multisrc/overrides/mangacatalog/readonepunchmanmangaonlinetwo/src/ReadOnePunchManMangaOnlineTwo.kt b/multisrc/overrides/mangacatalog/readonepunchmanmangaonlinetwo/src/ReadOnePunchManMangaOnlineTwo.kt new file mode 100644 index 000000000..3d95ba7c0 --- /dev/null +++ b/multisrc/overrides/mangacatalog/readonepunchmanmangaonlinetwo/src/ReadOnePunchManMangaOnlineTwo.kt @@ -0,0 +1,38 @@ +package eu.kanade.tachiyomi.extension.en.readonepunchmanmangaonlinetwo + +import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog +import eu.kanade.tachiyomi.source.model.MangasPage +import eu.kanade.tachiyomi.util.asJsoup +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.source.model.FilterList +import eu.kanade.tachiyomi.source.model.SChapter +import eu.kanade.tachiyomi.source.model.SManga +import eu.kanade.tachiyomi.source.model.Page +import eu.kanade.tachiyomi.source.online.ParsedHttpSource +import okhttp3.Request +import rx.Observable +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element + +class ReadOnePunchManMangaOnlineTwo : MangaCatalog("Read One-Punch Man Manga Online", "https://ww3.readopm.com", "en") { + override val sourceList = listOf( + Pair("One Punch Man", "$baseUrl/manga/one-punch-man/"), + Pair("Onepunch-Man (ONE)", "$baseUrl/manga/onepunch-man-one/"), + Pair("Colored", "$baseUrl/manga/one-punch-man-colored/"), + Pair("Mob Psycho 100", "$baseUrl/manga/mob-psycho-100/"), + Pair("Reigen", "$baseUrl/manga/reigen/"), + Pair("Eyeshield 21", "$baseUrl/manga/eyeshield-21/"), + ).sortedBy { it.first }.distinctBy { it.second } + + override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply { + description = document.select("div.card-body > p").text() + title = document.select("h2 > span").text().substringAfter("Manga: ").trim() + thumbnail_url = document.select(".card-img-right").attr("src") + } + override fun chapterListSelector(): String = "tbody > tr" + override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply { + name = element.select("td:first-child").text() + url = element.select("a").attr("abs:href") + date_upload = System.currentTimeMillis() //I have no idear how to parse Date stuff + } +} diff --git a/multisrc/overrides/mangacatalog/readsololevelingmangamanhwaonline/src/ReadSoloLevelingMangaManhwaOnline.kt b/multisrc/overrides/mangacatalog/readsololevelingmangamanhwaonline/src/ReadSoloLevelingMangaManhwaOnline.kt new file mode 100644 index 000000000..ff6b65500 --- /dev/null +++ b/multisrc/overrides/mangacatalog/readsololevelingmangamanhwaonline/src/ReadSoloLevelingMangaManhwaOnline.kt @@ -0,0 +1,12 @@ +package eu.kanade.tachiyomi.extension.en.readsololevelingmangamanhwaonline + +import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog +import eu.kanade.tachiyomi.source.model.MangasPage +import eu.kanade.tachiyomi.util.asJsoup + +class ReadSoloLevelingMangaManhwaOnline : MangaCatalog("Read Solo Leveling Manga/Manhwa Online", "https://readsololeveling.org", "en") { + override val sourceList = listOf( + Pair("Solo Levelingr", "$baseUrl/manga/solo-leveling/"), + Pair("Light Novel", "$baseUrl/manga/solo-leveling-novel/"), + ).sortedBy { it.first }.distinctBy { it.second } +} diff --git a/multisrc/overrides/mangacatalog/readthepromisedneverlandmangaonline/src/ReadThePromisedNeverlandMangaOnline.kt b/multisrc/overrides/mangacatalog/readthepromisedneverlandmangaonline/src/ReadThePromisedNeverlandMangaOnline.kt new file mode 100644 index 000000000..a6c92fecd --- /dev/null +++ b/multisrc/overrides/mangacatalog/readthepromisedneverlandmangaonline/src/ReadThePromisedNeverlandMangaOnline.kt @@ -0,0 +1,16 @@ +package eu.kanade.tachiyomi.extension.en.readthepromisedneverlandmangaonline + +import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog +import eu.kanade.tachiyomi.source.model.MangasPage +import eu.kanade.tachiyomi.util.asJsoup + +class ReadThePromisedNeverlandMangaOnline : MangaCatalog("Read The Promised Neverland Manga Online", "https://ww3.readneverland.com", "en") { + override val sourceList = listOf( + Pair("The Promised Neverland", "$baseUrl/manga/the-promised-neverland/"), + Pair("Parody", "$baseUrl/manga/the-parodied-jokeland/"), + Pair("Novels", "$baseUrl/manga/novels/"), + Pair("Poppy no Negai", "$baseUrl/manga/poppy-no-negai/"), + Pair("Author's One shot", "$baseUrl/manga/shinrei-shashinshi-kouno-saburou/"), + Pair("Ashley Goeth", "$baseUrl/manga/ashley-goeth-no-yukue/"), + ).sortedBy { it.first }.distinctBy { it.second } +} diff --git a/multisrc/overrides/mangacatalog/readtokyoghoulretokyoghoulmangaonline/src/ReadTokyoGhoulReTokyoGhoulMangaOnline.kt b/multisrc/overrides/mangacatalog/readtokyoghoulretokyoghoulmangaonline/src/ReadTokyoGhoulReTokyoGhoulMangaOnline.kt new file mode 100644 index 000000000..bc0f2043d --- /dev/null +++ b/multisrc/overrides/mangacatalog/readtokyoghoulretokyoghoulmangaonline/src/ReadTokyoGhoulReTokyoGhoulMangaOnline.kt @@ -0,0 +1,17 @@ +package eu.kanade.tachiyomi.extension.en.readtokyoghoulretokyoghoulmangaonline + +import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog +import eu.kanade.tachiyomi.source.model.MangasPage +import eu.kanade.tachiyomi.util.asJsoup + +class ReadTokyoGhoulReTokyoGhoulMangaOnline : MangaCatalog("Read Tokyo Ghoul Re & Tokyo Ghoul Manga Online", "https://ww8.tokyoghoulre.com", "en") { + override val sourceList = listOf( + Pair("Tokyo Ghoul", "$baseUrl/manga/tokyo-ghoul/"), + Pair("Tokyo Ghoul:re", "$baseUrl/manga/tokyo-ghoulre/"), + Pair("TG Jack", "$baseUrl/manga/tokyo-ghoul-jack/"), + Pair("TGre Colored", "$baseUrl/manga/tokyo-ghoulre-colored/"), + Pair("Gorilla", "$baseUrl/manga/this-gorilla-will-die-in-1-day/"), + Pair("ArtBook", "$baseUrl/manga/tokyo-ghoul-zakki/"), + Pair("TG Light Novel", "$baseUrl/manga/tokyo-ghoul-re-light-novels/") + ).sortedBy { it.first }.distinctBy { it.second } +} diff --git a/multisrc/overrides/mangacatalog/readtowerofgodmanhwamangaonline/src/ReadTowerOfGodManhwaMangaOnline.kt b/multisrc/overrides/mangacatalog/readtowerofgodmanhwamangaonline/src/ReadTowerOfGodManhwaMangaOnline.kt new file mode 100644 index 000000000..7a1e53de0 --- /dev/null +++ b/multisrc/overrides/mangacatalog/readtowerofgodmanhwamangaonline/src/ReadTowerOfGodManhwaMangaOnline.kt @@ -0,0 +1,15 @@ +package eu.kanade.tachiyomi.extension.en.readtowerofgodmanhwamangaonline + +import eu.kanade.tachiyomi.multisrc.mangacatalog.MangaCatalog +import eu.kanade.tachiyomi.source.model.MangasPage +import eu.kanade.tachiyomi.util.asJsoup + +class ReadTowerOfGodManhwaMangaOnline : MangaCatalog("Read Tower of God Manhwa/Manga Online", "https://ww1.readtowerofgod.com", "en") { + override val sourceList = listOf( + Pair("Season 1", "$baseUrl/manga/tower-of-god-season-1/"), + Pair("Season 2", "$baseUrl/manga/tower-of-god-season-2/"), + Pair("Season 3", "$baseUrl/manga/tower-of-god-season-3/"), + Pair("RAW", "$baseUrl/manga/tower-of-god-spoilers-raw/"), + Pair("SIU Blog Postd", "$baseUrl/manga/siu-blog-post-translation/"), + ).sortedBy { it.first }.distinctBy { it.second } +} diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangacatalog/MangaCatalog.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangacatalog/MangaCatalog.kt new file mode 100644 index 000000000..b73380ac2 --- /dev/null +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangacatalog/MangaCatalog.kt @@ -0,0 +1,103 @@ +package eu.kanade.tachiyomi.multisrc.mangacatalog + +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.source.model.FilterList +import eu.kanade.tachiyomi.source.model.MangasPage +import eu.kanade.tachiyomi.source.model.SChapter +import eu.kanade.tachiyomi.source.model.SManga +import eu.kanade.tachiyomi.source.model.Page +import eu.kanade.tachiyomi.source.online.ParsedHttpSource +import okhttp3.Request +import rx.Observable +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element + + +// Based On the original manga maniac source +// MangaCatalog is a network of sites for single franshise sites + +abstract class MangaCatalog( + override val name: String, + override val baseUrl: String, + override val lang: String +) : ParsedHttpSource() { + open val sourceList = listOf( + Pair("$name", "$baseUrl") + ).sortedBy { it.first }.distinctBy { it.second } + + // Info + + override val supportsLatest: Boolean = false + + // Popular + + override fun fetchPopularManga(page: Int): Observable { + return Observable.just(MangasPage(sourceList.map { popularMangaFromPair(it.first, it.second) }, false)) + } + private fun popularMangaFromPair(name: String, sourceurl: String): SManga = SManga.create().apply { + title = name + url = sourceurl + } + override fun popularMangaRequest(page: Int): Request = throw Exception("Not used") + override fun popularMangaNextPageSelector(): String? = throw Exception("Not used") + override fun popularMangaSelector(): String = throw Exception("Not used") + override fun popularMangaFromElement(element: Element) = throw Exception("Not used") + + // Latest + override fun latestUpdatesRequest(page: Int): Request = throw Exception("Not used") + override fun latestUpdatesNextPageSelector(): String? = throw Exception("Not used") + override fun latestUpdatesSelector(): String = throw Exception("Not used") + override fun latestUpdatesFromElement(element: Element): SManga = throw Exception("Not used") + + // Search + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList) = throw Exception("No Search Function") + override fun searchMangaNextPageSelector() = throw Exception("Not used") + override fun searchMangaSelector() = throw Exception("Not used") + override fun searchMangaFromElement(element: Element) = throw Exception("Not used") + + // Get Override + + override fun mangaDetailsRequest(manga: SManga): Request { + return GET(manga.url, headers) + } + override fun chapterListRequest(manga: SManga): Request { + return GET(manga.url, headers) + } + override fun pageListRequest(chapter: SChapter): Request { + return GET(chapter.url, headers) + } + + // Details + + override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply { + val info = document.select("div.bg-bg-secondary > div.px-6 > div.flex-col").text() + title = document.select("div.container > h1").text() + description = if ("Description" in info) info.substringAfter("Description").trim() else info + thumbnail_url = document.select("div.flex > img").attr("src") + } + // Chapters + + override fun chapterListSelector(): String = "div.w-full > div.bg-bg-secondary > div.grid" + override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply { + val name1 = element.select(".col-span-3 > a").text() + val name2 = element.select(".text-xs:not(a)").text() + if (name2 == ""){ + name = name1 + } else { + name = "$name1 - $name2" + } + url = element.select(".col-span-3 > a").attr("abs:href") + date_upload = System.currentTimeMillis() + } + + // Pages + + override fun pageListParse(document: Document): List = mutableListOf().apply { + document.select(".text-center img,.img_container img").forEach { img -> + add(Page(size, "", img.attr("src"))) + } + } + + override fun imageUrlParse(document: Document): String = throw Exception("Not Used") +} diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangacatalog/MangaCatalogGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangacatalog/MangaCatalogGenerator.kt new file mode 100644 index 000000000..5885baef0 --- /dev/null +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangacatalog/MangaCatalogGenerator.kt @@ -0,0 +1,34 @@ +package eu.kanade.tachiyomi.multisrc.mangacatalog + +import generator.ThemeSourceData.SingleLang +import generator.ThemeSourceGenerator + +class MangaCatalogGenerator : ThemeSourceGenerator { + + override val themePkg = "mangacatalog" + + override val themeClass = "MangaCatalog" + + override val baseVersionCode: Int = 1 + + override val sources = listOf( + SingleLang("Read Boku no Hero Academia/My Hero Academia Manga", "https://ww6.readmha.com", "en", className = "ReadBokuNoHeroAcademiaMyHeroAcademiaManga"), + SingleLang("Read One-Punch Man Manga Online", "https://ww3.readopm.com", "en", className = "ReadOnePunchManMangaOnlineTwo", pkgName = "readonepunchmanmangaonlinetwo"), //exact same name as the one in mangamainac extension + SingleLang("Read Tokyo Ghoul Re & Tokyo Ghoul Manga Online", "https://ww8.tokyoghoulre.com", "en", className = "ReadTokyoGhoulReTokyoGhoulMangaOnline"), + SingleLang("Read Nanatsu no Taizai/7 Deadly Sins Manga Online", "https://ww3.read7deadlysins.com", "en", className = "ReadNanatsuNoTaizai7DeadlySinsMangaOnline"), + SingleLang("Read Kaguya-sama Manga Online", "https://ww1.readkaguyasama.com", "en", className = "ReadKaguyaSamaMangaOnline"), + SingleLang("Read Jujutsu Kaisen Manga Online", "https://ww1.readjujutsukaisen.com", "en"), + SingleLang("Read Tower of God Manhwa/Manga Online", "https://ww1.readtowerofgod.com", "en", className = "ReadTowerOfGodManhwaMangaOnline"), + SingleLang("Read Hunter x Hunter Manga Online", "https://ww2.readhxh.com", "en"), + SingleLang("Read Solo Leveling Manga/Manhwa Online", "https://readsololeveling.org", "en", className = "ReadSoloLevelingMangaManhwaOnline"), + SingleLang("Read The Promised Neverland Manga Online", "https://ww3.readneverland.com", "en"), + SingleLang("Read Attack on Titan/Shingeki no Kyojin Manga", "https://ww7.readsnk.com", "en", className = "ReadAttackOnTitanShingekiNoKyojinManga") + ) + + companion object { + @JvmStatic + fun main(args: Array) { + MangaCatalogGenerator().createAll() + } + } +}