From cbbdd13c8efae30c777eb8b8f21b435a706b6953 Mon Sep 17 00:00:00 2001 From: devi Date: Sat, 15 Jul 2023 15:52:07 +0200 Subject: [PATCH 1/7] add new source ( lise below ) fix multiple source. ( lise below ) update madra parser : -> new option on getListPage for take liste without Ajax -> add format date -> change defaut date parterne ( the news is most used by default on sites ) --- .../kotatsu/parsers/site/NineMangaParser.kt | 19 ++ .../parsers/site/madara/MadaraParser.kt | 161 ++++++++++--- .../parsers/site/madara/ar/Azoranov.kt | 1 - .../parsers/site/madara/ar/Manhatic.kt | 1 - .../site/madara/ar/NijiTranslations.kt | 1 - .../parsers/site/madara/en/AdultWebtoon.kt | 1 - .../parsers/site/madara/en/AllPornComic.kt | 2 +- .../parsers/site/madara/en/AnshScans.kt | 1 + .../parsers/site/madara/en/AquaManga.kt | 7 +- .../parsers/site/madara/en/Babelwuxia.kt | 4 +- .../parsers/site/madara/en/BibiManga.kt | 1 + .../parsers/site/madara/en/BlogManga.kt | 1 - .../parsers/site/madara/en/BoysLove.kt | 1 - .../parsers/site/madara/en/CmReader.kt | 5 +- .../parsers/site/madara/en/CoffeeManga.kt | 5 +- .../parsers/site/madara/en/ColoredManga.kt | 1 - .../parsers/site/madara/en/DarkScans.kt | 4 +- .../parsers/site/madara/en/DecadenceScans.kt | 1 - .../parsers/site/madara/en/DragonTea.kt | 13 ++ .../parsers/site/madara/en/FreeManga.kt | 4 +- .../site/madara/en/FreeWebtoonCoins.kt | 1 - .../kotatsu/parsers/site/madara/en/GdScans.kt | 1 - .../kotatsu/parsers/site/madara/en/HManhwa.kt | 1 - .../parsers/site/madara/en/HariManga.kt | 5 +- .../parsers/site/madara/en/Hentai20.kt | 1 + .../parsers/site/madara/en/Hentai4Free.kt | 2 +- .../parsers/site/madara/en/HentaiManga.kt | 1 - .../parsers/site/madara/en/HentaiWebtoon.kt | 1 - .../parsers/site/madara/en/HentaixComic.kt | 1 - .../parsers/site/madara/en/HentaixYuri.kt | 1 - .../kotatsu/parsers/site/madara/en/Hscans.kt | 1 - .../parsers/site/madara/en/ImmortalUpdates.kt | 6 +- .../site/madara/en/IsekaiScanEuParser.kt | 102 ++++++++- .../site/madara/en/Itsyourightmanhua.kt | 6 +- .../parsers/site/madara/en/KissManga.kt | 4 +- .../parsers/site/madara/en/KsGroupScans.kt | 6 +- .../parsers/site/madara/en/KunManga.kt | 6 +- .../parsers/site/madara/en/LadyManga.kt | 5 +- .../parsers/site/madara/en/LeviatanScans.kt | 11 + .../parsers/site/madara/en/LoliconMobi.kt | 1 - .../parsers/site/madara/en/LuxManga.kt | 5 +- .../parsers/site/madara/en/Manga1st.kt | 13 ++ .../parsers/site/madara/en/Manga247.kt | 3 + .../parsers/site/madara/en/Manga365.kt | 4 +- .../kotatsu/parsers/site/madara/en/Manga3s.kt | 1 + .../kotatsu/parsers/site/madara/en/Manga68.kt | 13 ++ .../parsers/site/madara/en/MangaAction.kt | 5 +- .../parsers/site/madara/en/MangaBaz.kt | 10 + .../parsers/site/madara/en/MangaBob.kt | 13 ++ .../kotatsu/parsers/site/madara/en/MangaCv.kt | 4 +- .../parsers/site/madara/en/MangaDods.kt | 14 ++ .../parsers/site/madara/en/MangaEffect.kt | 1 + .../parsers/site/madara/en/MangaFast.kt | 13 ++ .../parsers/site/madara/en/MangaForFree.kt | 14 ++ .../parsers/site/madara/en/MangaFoxFull.kt | 13 ++ .../parsers/site/madara/en/MangaFreak.kt | 14 ++ .../parsers/site/madara/en/MangaGreat.kt | 11 + .../parsers/site/madara/en/MangaHentai.kt | 15 ++ .../parsers/site/madara/en/MangaKing.kt | 11 + .../parsers/site/madara/en/MangaKio.kt | 11 + .../parsers/site/madara/en/MangaKiss.kt | 11 + .../parsers/site/madara/en/MangaKomi.kt | 4 +- .../parsers/site/madara/en/MangaLeveling.kt | 17 ++ .../parsers/site/madara/en/MangaManiacs.kt | 14 ++ .../parsers/site/madara/en/MangaOnlineTeam.kt | 11 + .../parsers/site/madara/en/MangaRead.kt | 117 +--------- .../parsers/site/madara/en/MangaReadCo.kt | 15 ++ .../parsers/site/madara/en/MangaReading.kt | 14 ++ .../parsers/site/madara/en/MangaRock.kt | 5 +- .../parsers/site/madara/en/MangaRocky.kt | 14 ++ .../parsers/site/madara/en/MangaRolls.kt | 10 + .../parsers/site/madara/en/MangaRosie.kt | 5 +- .../parsers/site/madara/en/MangaSushi.kt | 10 + .../parsers/site/madara/en/MangaTone.kt | 14 ++ .../kotatsu/parsers/site/madara/en/MangaTx.kt | 4 +- .../site/madara/en/MangaTxUnofficial.kt | 10 + .../parsers/site/madara/en/MangaVisa.kt | 13 ++ .../kotatsu/parsers/site/madara/en/Mangagg.kt | 14 ++ .../kotatsu/parsers/site/madara/en/Mangak2.kt | 14 ++ .../parsers/site/madara/en/Mangastic.kt | 5 +- .../parsers/site/madara/en/Mangastic9.kt | 10 + .../kotatsu/parsers/site/madara/en/Mangaus.kt | 14 ++ .../kotatsu/parsers/site/madara/en/Mangax1.kt | 13 ++ .../parsers/site/madara/en/ManhuaZone.kt | 10 + .../parsers/site/madara/en/Manhuaes.kt | 13 ++ .../parsers/site/madara/en/Manhuafast.kt | 10 + .../parsers/site/madara/en/Manhuaga.kt | 10 + .../parsers/site/madara/en/Manhuahot.kt | 10 + .../parsers/site/madara/en/Manhuamix.kt | 13 ++ .../parsers/site/madara/en/Manhuaplus.kt | 39 ++++ .../parsers/site/madara/en/Manhuaus.kt | 10 + .../parsers/site/madara/en/Manhwa18App.kt | 14 ++ .../parsers/site/madara/en/Manhwa18Org.kt | 14 ++ .../parsers/site/madara/en/Manhwa68.kt | 13 ++ .../parsers/site/madara/en/ManhwaClan.kt | 5 +- .../parsers/site/madara/en/ManhwaFull.kt | 13 ++ .../parsers/site/madara/en/ManhwaHentai.kt | 14 ++ .../parsers/site/madara/en/ManhwaKool.kt | 5 +- .../parsers/site/madara/en/ManhwaTop.kt | 58 +++++ .../parsers/site/madara/en/ManhwaWorld.kt | 11 + .../parsers/site/madara/en/Manhwasco.kt | 14 ++ .../parsers/site/madara/en/ManyComic.kt | 16 ++ .../parsers/site/madara/en/ManyToon.kt | 14 ++ .../parsers/site/madara/en/ManyToonMe.kt | 13 ++ .../parsers/site/madara/en/MilfToon.kt | 15 ++ .../kotatsu/parsers/site/madara/en/MmScans.kt | 16 ++ .../parsers/site/madara/en/MortalsGroove.kt | 13 ++ .../parsers/site/madara/en/MurimScan.kt | 13 ++ .../parsers/site/madara/en/NightComic.kt | 13 ++ .../parsers/site/madara/en/Novelcrow.kt | 14 ++ .../parsers/site/madara/en/Novelmic.kt | 13 ++ .../parsers/site/madara/en/Painfulnightz.kt | 13 ++ .../site/madara/en/PetrotechSociety.kt | 15 ++ .../parsers/site/madara/en/PianManga.kt | 9 +- .../parsers/site/madara/en/PlatinumScans.kt | 14 ++ .../parsers/site/madara/en/PornComixOnline.kt | 16 ++ .../parsers/site/madara/en/ReadFreeComics.kt | 14 ++ .../parsers/site/madara/en/ReadManhua.kt | 16 ++ .../parsers/site/madara/en/Rio2Manga.kt | 11 + .../kotatsu/parsers/site/madara/en/S2Manga.kt | 5 +- .../parsers/site/madara/en/Sawamics.kt | 11 + .../parsers/site/madara/en/Scansraw.kt | 11 + .../site/madara/en/ShootingStarScans.kt | 14 ++ .../site/madara/en/SleepyTranslations.kt | 14 ++ .../parsers/site/madara/en/Stkissmanga.kt | 5 +- .../parsers/site/madara/en/SumManga.kt | 14 ++ .../parsers/site/madara/en/TeenManhua.kt | 14 ++ .../parsers/site/madara/en/TempleScan.kt | 15 ++ .../parsers/site/madara/en/Theguildscans.kt | 14 ++ .../parsers/site/madara/en/Todaymic.kt | 11 + .../parsers/site/madara/en/ToonChill.kt | 5 +- .../kotatsu/parsers/site/madara/en/Toonily.kt | 2 +- .../parsers/site/madara/en/ToonilyNet.kt | 11 + .../parsers/site/madara/en/Tritinia.kt | 11 + .../parsers/site/madara/en/Wakamics.kt | 11 + .../kotatsu/parsers/site/madara/en/Webtoon.kt | 15 ++ .../parsers/site/madara/en/WebtoonScan.kt | 13 ++ .../parsers/site/madara/en/WebtoonXyz.kt | 16 ++ .../parsers/site/madara/en/Webtoons.kt | 15 ++ .../parsers/site/madara/en/Woopread.kt | 14 ++ .../parsers/site/madara/en/YaoiMobi.kt | 15 ++ .../parsers/site/madara/en/YaoiScan.kt | 14 ++ .../parsers/site/madara/en/ZandynoFansub.kt | 14 ++ .../parsers/site/madara/en/Zinmanhwa.kt | 14 ++ .../parsers/site/madara/en/ZuttoManga.kt | 14 ++ .../parsers/site/madara/es/ApollComics.kt | 5 +- .../parsers/site/madara/es/Bokugents.kt | 11 + .../parsers/site/madara/es/DokkoManga.kt | 5 +- .../parsers/site/madara/es/EmperorScan.kt | 5 +- .../kotatsu/parsers/site/madara/es/Eromiau.kt | 1 - .../parsers/site/madara/es/MangaMundoDrama.kt | 5 +- .../parsers/site/madara/es/ManhwaLatino.kt | 55 +++++ .../parsers/site/madara/es/MonarcaManga.kt | 112 +++++++++ .../parsers/site/madara/es/MundoManhwa.kt | 5 +- .../parsers/site/madara/es/RagnarokScan.kt | 1 - .../site/madara/es/RagnarokScanlation.kt | 5 +- .../parsers/site/madara/es/TecnoScann.kt | 5 +- .../parsers/site/madara/es/Vermanhwa.kt | 116 +--------- .../kotatsu/parsers/site/madara/fr/FrScan.kt | 5 +- .../parsers/site/madara/fr/HhentaiFr.kt | 1 - .../madara/fr/MangasOriginesUnofficial.kt | 7 +- .../parsers/site/madara/fr/ScanHentaiMenu.kt | 1 - .../parsers/site/madara/fr/ShadowTrad.kt | 5 +- .../site/madara/id/ReaperScansParser.kt | 17 -- .../parsers/site/madara/id/Shinigami.kt | 1 - .../parsers/site/madara/id/Worldmanhwas.kt | 1 - .../parsers/site/madara/ja/HachiManga.kt | 214 +++++++++++++++++- .../kotatsu/parsers/site/madara/ko/RawDex.kt | 1 - .../parsers/site/madara/pt/ArthurScan.kt | 5 +- .../parsers/site/madara/pt/AstrumScans.kt | 15 ++ .../parsers/site/madara/pt/Fbsquads.kt | 1 - .../parsers/site/madara/pt/FinalScans.kt | 1 - .../parsers/site/madara/pt/FoxWhite.kt | 5 +- .../parsers/site/madara/pt/Hipercool.kt | 1 - .../site/madara/pt/ImperiodaBritannia.kt | 14 ++ .../parsers/site/madara/pt/LeitorKamisama.kt | 1 - .../parsers/site/madara/pt/MaidScan.kt | 14 ++ .../parsers/site/madara/pt/MoonLoversScan.kt | 1 - .../parsers/site/madara/pt/Prismahentai.kt | 5 +- .../parsers/site/madara/pt/Psunicorn.kt | 1 - .../parsers/site/madara/pt/RandomScans.kt | 5 +- .../parsers/site/madara/pt/YugenMangas.kt | 5 +- .../parsers/site/madara/ru/MangaMammy.kt | 16 ++ .../kotatsu/parsers/site/madara/th/BakaMan.kt | 5 +- .../kotatsu/parsers/site/madara/th/Cat300.kt | 1 + .../parsers/site/madara/tr/AnisaManga.kt | 5 +- .../parsers/site/madara/tr/MangaDiyari.kt | 5 +- .../kotatsu/parsers/site/madara/tr/Mangawt.kt | 5 +- .../kotatsu/parsers/site/madara/tr/Manwe.kt | 5 +- .../parsers/site/madara/tr/RomantikManga.kt | 5 +- .../parsers/site/madara/tr/Tonizutoon.kt | 1 - .../parsers/site/madara/tr/TortugaCeviri.kt | 5 +- .../parsers/site/madara/tr/Webtoonhatti.kt | 2 +- .../site/mangareader/MangaReaderParser.kt | 12 +- .../mangareader/es/DragonTranslationParser.kt | 2 +- .../parsers/site/mangareader/fr/SushiScan.kt | 3 +- .../site/mangareader/id/KomikIndoParser.kt | 4 +- .../site/mangareader/id/KomikLabParser.kt | 5 +- .../site/mangareader/id/MangasusuParser.kt | 20 -- .../site/mangareader/tr/Golgebahcesi.kt | 18 ++ .../parsers/site/mangareader/tr/MajorScans.kt | 18 ++ .../parsers/site/mangareader/tr/Mangaokutr.kt | 18 ++ 202 files changed, 2078 insertions(+), 514 deletions(-) create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/DragonTea.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/LeviatanScans.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga1st.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga68.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaBaz.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaBob.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDods.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaFast.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaForFree.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaFoxFull.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaFreak.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaGreat.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaHentai.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaKing.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaKio.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaKiss.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaLeveling.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaManiacs.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaOnlineTeam.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaReadCo.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaReading.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRocky.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRolls.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaSushi.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaTone.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaTxUnofficial.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaVisa.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangagg.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangak2.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangastic9.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangaus.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangax1.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhuaZone.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuaes.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuafast.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuaga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuahot.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuamix.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuaplus.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuaus.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwa18App.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwa18Org.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwa68.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaFull.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaHentai.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaTop.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaWorld.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwasco.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManyComic.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManyToon.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManyToonMe.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MilfToon.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MmScans.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MortalsGroove.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MurimScan.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/NightComic.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Novelcrow.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Novelmic.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Painfulnightz.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PetrotechSociety.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PlatinumScans.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PornComixOnline.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ReadFreeComics.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ReadManhua.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Rio2Manga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Sawamics.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Scansraw.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ShootingStarScans.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/SleepyTranslations.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/SumManga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TeenManhua.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TempleScan.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Theguildscans.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Todaymic.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ToonilyNet.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Tritinia.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Wakamics.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Webtoon.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/WebtoonScan.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/WebtoonXyz.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Webtoons.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Woopread.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/YaoiMobi.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/YaoiScan.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZandynoFansub.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Zinmanhwa.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZuttoManga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Bokugents.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ManhwaLatino.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MonarcaManga.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/ReaperScansParser.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/AstrumScans.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ImperiodaBritannia.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/MaidScan.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ru/MangaMammy.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangasusuParser.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/Golgebahcesi.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/MajorScans.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/Mangaokutr.kt diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NineMangaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NineMangaParser.kt index e6a54c3e..e891456e 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NineMangaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NineMangaParser.kt @@ -195,8 +195,27 @@ internal abstract class NineMangaParser( } private fun parseStatus(status: String) = when { + // en status.contains("Ongoing") -> MangaState.ONGOING status.contains("Completed") -> MangaState.FINISHED + //es + status.contains("En curso") -> MangaState.ONGOING + status.contains("Completado") -> MangaState.FINISHED + //ru + status.contains("постоянный") -> MangaState.ONGOING + status.contains("завершенный") -> MangaState.FINISHED + //de + status.contains("Laufende") -> MangaState.ONGOING + status.contains("Abgeschlossen") -> MangaState.FINISHED + //pt + status.contains("Completo") -> MangaState.ONGOING + status.contains("Em tradução") -> MangaState.FINISHED + //it + status.contains("In corso") -> MangaState.ONGOING + status.contains("Completato") -> MangaState.FINISHED + //fr + status.contains("En cours") -> MangaState.ONGOING + status.contains("Complété") -> MangaState.FINISHED else -> null } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt index 69431f75..c468461e 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt @@ -33,7 +33,7 @@ internal abstract class MadaraParser( protected open val tagPrefix = "manga-genre/" protected open val isNsfwSource = false - protected open val datePattern = "MMMM dd, yyyy" + protected open val datePattern = "MMMM d, yyyy" protected open val stylepage = "?style=list" protected open val postreq = false @@ -62,6 +62,7 @@ internal abstract class MadaraParser( "Ongoing", "OnGoing", "On going", + "On Going", "Ativo", "En Cours", "En cours", @@ -120,38 +121,88 @@ internal abstract class MadaraParser( "Concluido", "已完结", "Bitmiş", + "End", ) + // Change these values only if the site does not support manga listings via ajax + protected open val withoutAjax = false + protected open val listeurl = "manga/" + override suspend fun getListPage( page: Int, query: String?, tags: Set?, sortOrder: SortOrder, ): List { - val tag = tags.oneOrThrowIfMany() - val payload = createRequestTemplate() - payload["page"] = page.toString() - when (sortOrder) { - SortOrder.POPULARITY -> payload["vars[meta_key]"] = "_wp_manga_views" - SortOrder.UPDATED -> payload["vars[meta_key]"] = "_latest_update" - SortOrder.NEWEST -> payload["vars[meta_key]"] = "" - SortOrder.ALPHABETICAL -> { - payload["vars[orderby]"] = "post_title" - payload["vars[order]"] = "ASC" - } - else -> payload["vars[meta_key]"] = "_latest_update" + val doc = if (withoutAjax) { + val url = buildString { + append("https://") + append(domain) + val pages = page + 1 + + when { + !query.isNullOrEmpty() -> { + append("/page/") + append(pages.toString()) + append("/?s=") + append(query.urlEncoded()) + append("&post_type=wp-manga&") + } + + !tags.isNullOrEmpty() -> { + append("/$tagPrefix") + for (tag in tags) { + append(tag.key) + } + append("/page/") + append(pages.toString()) + append("?") + } + + else -> { + append("/$listeurl") + append("/page/") + append(pages.toString()) + append("?") + } + } + append("m_orderby=") + when (sortOrder) { + SortOrder.POPULARITY -> append("views") + SortOrder.UPDATED -> append("latest") + SortOrder.NEWEST -> append("new-manga") + SortOrder.ALPHABETICAL -> append("alphabet") + else -> append("latest") + } + } + webClient.httpGet(url).parseHtml() + } else { + val tag = tags.oneOrThrowIfMany() + val payload = createRequestTemplate() + payload["page"] = page.toString() + when (sortOrder) { + SortOrder.POPULARITY -> payload["vars[meta_key]"] = "_wp_manga_views" + SortOrder.UPDATED -> payload["vars[meta_key]"] = "_latest_update" + SortOrder.NEWEST -> payload["vars[meta_key]"] = "" + SortOrder.ALPHABETICAL -> { + payload["vars[orderby]"] = "post_title" + payload["vars[order]"] = "ASC" + } + + else -> payload["vars[meta_key]"] = "_latest_update" + } + payload["vars[wp-manga-genre]"] = tag?.key.orEmpty() + payload["vars[s]"] = query?.urlEncoded().orEmpty() + webClient.httpPost( + "https://$domain/wp-admin/admin-ajax.php", + payload, + ).parseHtml() } - payload["vars[wp-manga-genre]"] = tag?.key.orEmpty() - payload["vars[s]"] = query?.urlEncoded().orEmpty() - val doc = webClient.httpPost( - "https://$domain/wp-admin/admin-ajax.php", - payload, - ).parseHtml() return doc.select("div.row.c-tabs-item__content").ifEmpty { - doc.select("div.page-item-detail.manga") + doc.select("div.page-item-detail") }.map { div -> val href = div.selectFirst("a")?.attrAsRelativeUrlOrNull("href") ?: div.parseFailed("Link not found") val summary = div.selectFirst(".tab-summary") ?: div.selectFirst(".item-summary") @@ -284,14 +335,16 @@ internal abstract class MadaraParser( val a = li.selectFirst("a") val href = a?.attrAsRelativeUrlOrNull("href") ?: li.parseFailed("Link is missing") val link = href + stylepage + val dateText = li.selectFirst("a.c-new-tag")?.attr("title") ?: li.selectFirst(selectdate)?.text() + val name = a.selectFirst("p")?.text() ?: a.ownText() MangaChapter( id = generateUid(href), - name = a.ownText(), + name = name, number = i + 1, url = link, uploadDate = parseChapterDate( dateFormat, - li.selectFirst(selectdate)?.text(), + dateText, ), source = source, scanlator = null, @@ -317,15 +370,17 @@ internal abstract class MadaraParser( val a = li.selectFirst("a") val href = a?.attrAsRelativeUrlOrNull("href") ?: li.parseFailed("Link is missing") val link = href + stylepage + val dateText = li.selectFirst("a.c-new-tag")?.attr("title") ?: li.selectFirst(selectdate)?.text() + val name = a.selectFirst("p")?.text() ?: a.ownText() MangaChapter( id = generateUid(href), url = link, - name = a.ownText(), + name = name, number = i + 1, branch = null, uploadDate = parseChapterDate( dateFormat, - li.selectFirst(selectdate)?.text(), + dateText, ), scanlator = null, source = source, @@ -364,6 +419,10 @@ internal abstract class MadaraParser( date.startsWith("há ", ignoreCase = true) -> { parseRelativeDate(date) } + // other translated 'ago' in Spanish + date.endsWith(" hace", ignoreCase = true) -> { + parseRelativeDate(date) + } // Handle translated 'ago' in Turkish. date.endsWith(" önce", ignoreCase = true) -> { parseRelativeDate(date) @@ -376,15 +435,18 @@ internal abstract class MadaraParser( date.startsWith("il y a", ignoreCase = true) -> { parseRelativeDate(date) } - // Handle translated short 'ago' + //If there is no ago but just a motion of time + + // short Hours date.endsWith(" h", ignoreCase = true) -> { parseRelativeDate(date) } - + // short Day date.endsWith(" d", ignoreCase = true) -> { parseRelativeDate(date) } - //If there is no ago but just a motion of time + + // Day in Portuguese date.endsWith(" días", ignoreCase = true) -> { parseRelativeDate(date) } @@ -392,7 +454,15 @@ internal abstract class MadaraParser( date.endsWith(" día", ignoreCase = true) -> { parseRelativeDate(date) } + // Day in French + date.endsWith(" jour", ignoreCase = true) -> { + parseRelativeDate(date) + } + date.endsWith(" jours", ignoreCase = true) -> { + parseRelativeDate(date) + } + // Hours in Portuguese date.endsWith(" horas", ignoreCase = true) -> { parseRelativeDate(date) } @@ -400,7 +470,20 @@ internal abstract class MadaraParser( date.endsWith(" hora", ignoreCase = true) -> { parseRelativeDate(date) } + // Hours in french + date.endsWith(" heure", ignoreCase = true) -> { + parseRelativeDate(date) + } + date.endsWith(" heures", ignoreCase = true) -> { + parseRelativeDate(date) + } + // Minutes in English + date.endsWith(" mins", ignoreCase = true) -> { + parseRelativeDate(date) + } + + // Minutes in Portuguese date.endsWith(" minutos", ignoreCase = true) -> { parseRelativeDate(date) } @@ -408,6 +491,14 @@ internal abstract class MadaraParser( date.endsWith(" minuto", ignoreCase = true) -> { parseRelativeDate(date) } + //Minutes in French + date.endsWith(" minute", ignoreCase = true) -> { + parseRelativeDate(date) + } + + date.endsWith(" minutes", ignoreCase = true) -> { + parseRelativeDate(date) + } // Handle 'yesterday' and 'today', using midnight date.startsWith("year", ignoreCase = true) -> { @@ -458,17 +549,27 @@ internal abstract class MadaraParser( "día", "dia", "day", + "days", "d", ).anyWordIn(date) -> cal.apply { add(Calendar.DAY_OF_MONTH, -number) }.timeInMillis - WordSet("jam", "saat", "heure", "hora", "horas", "hour", "h").anyWordIn(date) -> cal.apply { + WordSet("jam", "saat", "heure", "hora", "horas", "hour", "hours", "h").anyWordIn(date) -> cal.apply { add( Calendar.HOUR, -number, ) }.timeInMillis - WordSet("menit", "dakika", "min", "minute", "minuto", "mins", "phút").anyWordIn(date) -> cal.apply { + WordSet( + "menit", + "dakika", + "min", + "minute", + "minutes", + "minuto", + "mins", + "phút", + ).anyWordIn(date) -> cal.apply { add( Calendar.MINUTE, -number, @@ -482,7 +583,7 @@ internal abstract class MadaraParser( ) }.timeInMillis - WordSet("month").anyWordIn(date) -> cal.apply { add(Calendar.MONTH, -number) }.timeInMillis + WordSet("month", "months").anyWordIn(date) -> cal.apply { add(Calendar.MONTH, -number) }.timeInMillis WordSet("year").anyWordIn(date) -> cal.apply { add(Calendar.YEAR, -number) }.timeInMillis else -> 0 } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Azoranov.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Azoranov.kt index 0aa36716..91fa690d 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Azoranov.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Azoranov.kt @@ -11,5 +11,4 @@ internal class Azoranov(context: MangaLoaderContext) : MadaraParser(context, MangaSource.AZORANOV, "azoranov.com", pageSize = 10) { override val tagPrefix = "novel-genre/" - override val datePattern = "MMMM d, yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Manhatic.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Manhatic.kt index e6d3f458..8caf2e41 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Manhatic.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Manhatic.kt @@ -12,6 +12,5 @@ internal class Manhatic(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANHATIC, "manhatic.com") { override val isNsfwSource = true - override val datePattern = "MMMM d, yyyy" override val sourceLocale: Locale = Locale.ENGLISH } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/NijiTranslations.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/NijiTranslations.kt index 005dff8a..6fed0a3b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/NijiTranslations.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/NijiTranslations.kt @@ -11,5 +11,4 @@ internal class NijiTranslations(context: MangaLoaderContext) : MadaraParser(context, MangaSource.NIJITRANSLATIONS, "niji-translations.com") { override val postreq = true - override val datePattern = "MMMM d, yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AdultWebtoon.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AdultWebtoon.kt index 0a98cf75..a713e9e7 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AdultWebtoon.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AdultWebtoon.kt @@ -13,6 +13,5 @@ internal class AdultWebtoon(context: MangaLoaderContext) : override val isNsfwSource = true override val tagPrefix = "adult-webtoon-genre/" - override val datePattern = "MMMM d, yyyy" override val postreq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AllPornComic.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AllPornComic.kt index dd75f1e8..002e907b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AllPornComic.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AllPornComic.kt @@ -11,7 +11,7 @@ internal class AllPornComic(context: MangaLoaderContext) : MadaraParser(context, MangaSource.ALLPORN_COMIC, "allporncomic.com", pageSize = 24) { override val tagPrefix = "porncomic-genre/" - + override val datePattern = "MMMM dd, yyyy" override val isNsfwSource = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AnshScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AnshScans.kt index 32ef0bda..c17cf08f 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AnshScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AnshScans.kt @@ -11,5 +11,6 @@ internal class AnshScans(context: MangaLoaderContext) : MadaraParser(context, MangaSource.ANSHSCANS, "anshscans.org", 10) { override val tagPrefix = "genre/" + override val datePattern = "MMMM dd, yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AquaManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AquaManga.kt index c4ccf495..bfaf981c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AquaManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AquaManga.kt @@ -7,4 +7,9 @@ import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("AQUAMANGA", "AquaManga", "en") -internal class AquaManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.AQUAMANGA, "aquamanga.com") +internal class AquaManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.AQUAMANGA, "aquamanga.com") { + + override val datePattern = "MMMM dd, yyyy" + override val withoutAjax = true + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Babelwuxia.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Babelwuxia.kt index b1e10039..ec88da28 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Babelwuxia.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Babelwuxia.kt @@ -8,6 +8,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("BABELWUXIA", "Babelwuxia", "en") internal class Babelwuxia(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.BABELWUXIA, "read.babelwuxia.com") { - override val datePattern = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.BABELWUXIA, "read.babelwuxia.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BibiManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BibiManga.kt index 47ceed97..1ef9f509 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BibiManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BibiManga.kt @@ -10,4 +10,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class BibiManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.BIBIMANGA, "bibimanga.com") { override val isNsfwSource = false + override val datePattern = "MMMM dd, yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BlogManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BlogManga.kt index 7f8ca4ac..936f76d8 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BlogManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BlogManga.kt @@ -11,6 +11,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class BlogManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.BLOG_MANGA, "blogmanga.net") { - override val datePattern = "MMMM d, yyyy" override val postreq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BoysLove.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BoysLove.kt index 420cb168..3292f724 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BoysLove.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BoysLove.kt @@ -13,6 +13,5 @@ internal class BoysLove(context: MangaLoaderContext) : override val isNsfwSource = true override val tagPrefix = "boyslove-genre/" - override val datePattern = "MMMM d, yyyy" override val postreq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CmReader.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CmReader.kt index 0ca8f526..ae0a6bd6 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CmReader.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CmReader.kt @@ -7,7 +7,4 @@ import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("CM_READER", "Cm Reader", "en") -internal class CmReader(context: MangaLoaderContext) : MadaraParser(context, MangaSource.CM_READER, "cmreader.info") { - - override val datePattern = "MMMM d, yyyy" -} +internal class CmReader(context: MangaLoaderContext) : MadaraParser(context, MangaSource.CM_READER, "cmreader.info") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CoffeeManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CoffeeManga.kt index 03f680bc..dddc355f 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CoffeeManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CoffeeManga.kt @@ -8,7 +8,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("COFFEE_MANGA", "Coffee Manga", "en") internal class CoffeeManga(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.COFFEE_MANGA, "coffeemanga.io") { - - override val datePattern = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.COFFEE_MANGA, "coffeemanga.io") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ColoredManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ColoredManga.kt index f6d5b2b6..4e5b9814 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ColoredManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ColoredManga.kt @@ -10,6 +10,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class ColoredManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.COLORED_MANGA, "coloredmanga.com") { - override val tagPrefix = "manga-tag/" override val datePattern = "dd-MMM" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/DarkScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/DarkScans.kt index 1c25c75d..173e1a7b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/DarkScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/DarkScans.kt @@ -8,6 +8,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("DARK_SCANS", "DarkScans", "en") internal class DarkScans(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.DARK_SCANS, "darkscans.com", 18) { - override val datePattern = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.DARK_SCANS, "darkscans.com", 18) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/DecadenceScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/DecadenceScans.kt index c496f727..bbb4efd8 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/DecadenceScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/DecadenceScans.kt @@ -10,6 +10,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class DecadenceScans(context: MangaLoaderContext) : MadaraParser(context, MangaSource.DECADENCESCANS, "reader.decadencescans.com", 10) { - override val datePattern = "MMMM d, yyyy" override val isNsfwSource = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/DragonTea.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/DragonTea.kt new file mode 100644 index 00000000..9dbf784e --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/DragonTea.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("DRAGONTEA", "DragonTea", "en") +internal class DragonTea(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.DRAGONTEA, "dragontea.ink") { + + override val datePattern = "MM/dd/yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FreeManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FreeManga.kt index 0a104842..b0eff1d1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FreeManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FreeManga.kt @@ -7,4 +7,6 @@ import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("FREEMANGA", "FreeManga", "en") -internal class FreeManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.FREEMANGA, "freemanga.me") +internal class FreeManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.FREEMANGA, "freemanga.me") { + override val datePattern = "MMMM dd, yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FreeWebtoonCoins.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FreeWebtoonCoins.kt index d737491a..0f3ce2ab 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FreeWebtoonCoins.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FreeWebtoonCoins.kt @@ -9,6 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class FreeWebtoonCoins(context: MangaLoaderContext) : MadaraParser(context, MangaSource.FREEWEBTOONCOINS, "freewebtooncoins.com") { - override val datePattern = "MMMM d, yyyy" override val tagPrefix = "webtoon-genre/" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/GdScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/GdScans.kt index caa01aca..4cc3f6f8 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/GdScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/GdScans.kt @@ -9,6 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class GdScans(context: MangaLoaderContext) : MadaraParser(context, MangaSource.GDSCANS, "gdscans.com", 10) { - override val datePattern = "MMMM d, yyyy" override val tagPrefix = "webtoon-genre/" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HManhwa.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HManhwa.kt index aae49b71..d5d8cebf 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HManhwa.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HManhwa.kt @@ -10,7 +10,6 @@ internal class HManhwa(context: MangaLoaderContext) : MadaraParser(context, MangaSource.HMANHWA, "hmanhwa.com") { override val tagPrefix = "manhwa-genre/" - override val isNsfwSource = true override val datePattern = "dd MMM" override val postreq = true diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HariManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HariManga.kt index 50067672..39e9c755 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HariManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HariManga.kt @@ -8,7 +8,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("HARIMANGA", "HariManga", "en") internal class HariManga(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.HARIMANGA, "harimanga.com", pageSize = 10) { - - override val datePattern = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.HARIMANGA, "harimanga.com", pageSize = 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai20.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai20.kt index d11d0ba9..128e7796 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai20.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai20.kt @@ -10,4 +10,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class Hentai20(context: MangaLoaderContext) : MadaraParser(context, MangaSource.HENTAI20, "hentai20.io") { override val isNsfwSource = true + override val datePattern = "MMMM dd, yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai4Free.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai4Free.kt index d282ff25..1afb2b56 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai4Free.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai4Free.kt @@ -11,7 +11,7 @@ internal class Hentai4Free(context: MangaLoaderContext) : MadaraParser(context, MangaSource.HENTAI_4FREE, "hentai4free.net", pageSize = 24) { override val tagPrefix = "hentai-tag/" - + override val datePattern = "MMMM dd, yyyy" override val isNsfwSource = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiManga.kt index 0e7d4479..baf5cf5c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiManga.kt @@ -10,7 +10,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class HentaiManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.HENTAIMANGA, "hentaimanga.me", 36) { - override val datePattern = "MMMM d, yyyy" override val isNsfwSource = true override val postreq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiWebtoon.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiWebtoon.kt index 4adcbd25..fd499a2b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiWebtoon.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiWebtoon.kt @@ -10,7 +10,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class HentaiWebtoon(context: MangaLoaderContext) : MadaraParser(context, MangaSource.HENTAIWEBTOON, "hentaiwebtoon.com") { - override val datePattern = "MMMM d, yyyy" override val isNsfwSource = true override val postreq = true diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaixComic.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaixComic.kt index 5c9cb86f..f065f54d 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaixComic.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaixComic.kt @@ -10,7 +10,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class HentaixComic(context: MangaLoaderContext) : MadaraParser(context, MangaSource.HENTAIXCOMIC, "hentaixcomic.com", 16) { - override val datePattern = "MMMM d, yyyy" override val isNsfwSource = true override val postreq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaixYuri.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaixYuri.kt index 8f9533ca..5c7930ed 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaixYuri.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaixYuri.kt @@ -10,7 +10,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class HentaixYuri(context: MangaLoaderContext) : MadaraParser(context, MangaSource.HENTAIXYURI, "hentaixyuri.com", 16) { - override val datePattern = "MMMM d, yyyy" override val isNsfwSource = true override val postreq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hscans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hscans.kt index 4f0fe918..ae76de7f 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hscans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hscans.kt @@ -9,7 +9,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class Hscans(context: MangaLoaderContext) : MadaraParser(context, MangaSource.HSCANS, "hscans.com", 10) { - override val tagPrefix = "manga-tag/" override val datePattern = "dd/MM/yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ImmortalUpdates.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ImmortalUpdates.kt index af3a93e6..901164cc 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ImmortalUpdates.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ImmortalUpdates.kt @@ -8,8 +8,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("IMMORTALUPDATES", "Immortal Updates", "en") internal class ImmortalUpdates(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.IMMORTALUPDATES, "immortalupdates.com") { - - override val datePattern = "MMMM d, yyyy" - -} + MadaraParser(context, MangaSource.IMMORTALUPDATES, "immortalupdates.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/IsekaiScanEuParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/IsekaiScanEuParser.kt index 26395048..0cbcf312 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/IsekaiScanEuParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/IsekaiScanEuParser.kt @@ -3,13 +3,113 @@ package org.koitharu.kotatsu.parsers.site.madara.en import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaState +import org.koitharu.kotatsu.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrlOrNull +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.host +import org.koitharu.kotatsu.parsers.util.mapNotNullToSet +import org.koitharu.kotatsu.parsers.util.parseFailed +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.removeSuffix +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.toTitleCase +import org.koitharu.kotatsu.parsers.util.urlEncoded @MangaSourceParser("ISEKAISCAN_EU", "IsekaiScan", "en") internal class IsekaiScanEuParser(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.ISEKAISCAN_EU, "isekaiscan.to") { + MadaraParser(context, MangaSource.ISEKAISCAN_EU, "m.isekaiscan.to") { override val datePattern = "MM/dd/yyyy" + override val withoutAjax = true + override val listeurl = "mangax/" + override suspend fun getListPage( + page: Int, + query: String?, + tags: Set?, + sortOrder: SortOrder, + ): List { + val url = buildString { + append("https://") + append(domain) + val pages = page + 1 + + when { + !query.isNullOrEmpty() -> { + append("/page/") + append(pages.toString()) + append("/?s=") + append(query.urlEncoded()) + append("&post_type=wp-manga&") + } + + !tags.isNullOrEmpty() -> { + append("/$tagPrefix") + for (tag in tags) { + append(tag.key) + } + append("/page/") + append(pages.toString()) + append("?") + } + + else -> { + + append("/$listeurl") + append("/page/") + append(pages.toString()) + append("?") + } + } + append("m_orderby=") + when (sortOrder) { + SortOrder.POPULARITY -> append("views") + SortOrder.UPDATED -> append("latest") + SortOrder.NEWEST -> append("new-manga") + SortOrder.ALPHABETICAL -> append("alphabet") + else -> append("latest") + } + } + val doc = webClient.httpGet(url).parseHtml() + + + return doc.select("div.row.c-tabs-item__content").ifEmpty { + doc.select("div.page-item-detail") + }.map { div -> + val href = div.selectFirst("a")?.attrAsRelativeUrlOrNull("href") ?: div.parseFailed("Link not found") + val summary = div.selectFirst(".tab-summary") ?: div.selectFirst(".item-summary") + Manga( + id = generateUid(href), + url = href, + publicUrl = href.toAbsoluteUrl(div.host ?: domain), + coverUrl = div.selectFirst("img")?.src().orEmpty(), + title = (summary?.selectFirst("h3") ?: summary?.selectFirst("h4") + ?: summary?.selectFirst("div.post-title p.juduldepan"))?.text().orEmpty(), + altTitle = null, + rating = div.selectFirst("span.total_votes")?.ownText()?.toFloatOrNull()?.div(5f) ?: -1f, + tags = summary?.selectFirst(".mg_genres")?.select("a")?.mapNotNullToSet { a -> + MangaTag( + key = a.attr("href").removeSuffix('/').substringAfterLast('/'), + title = a.text().ifEmpty { return@mapNotNullToSet null }.toTitleCase(), + source = source, + ) + }.orEmpty(), + author = summary?.selectFirst(".mg_author")?.selectFirst("a")?.ownText(), + state = when (summary?.selectFirst(".mg_status")?.selectFirst(".summary-content")?.ownText() + ?.lowercase()) { + in ongoing -> MangaState.ONGOING + in finished -> MangaState.FINISHED + else -> null + }, + source = source, + isNsfw = isNsfwSource, + ) + } + } } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Itsyourightmanhua.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Itsyourightmanhua.kt index 98b49741..9a75a2c4 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Itsyourightmanhua.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Itsyourightmanhua.kt @@ -8,8 +8,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("ITSYOURIGHTMANHUA", "Itsyourightmanhua", "en") internal class Itsyourightmanhua(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.ITSYOURIGHTMANHUA, "itsyourightmanhua.com", 10) { - - override val datePattern = "MMMM d, yyyy" - -} + MadaraParser(context, MangaSource.ITSYOURIGHTMANHUA, "itsyourightmanhua.com", 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/KissManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/KissManga.kt index 1b082adf..352f1b70 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/KissManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/KissManga.kt @@ -7,4 +7,6 @@ import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("KISSMANGA", "KissManga", "en") -internal class KissManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.KISSMANGA, "kissmanga.in") +internal class KissManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.KISSMANGA, "kissmanga.in") { + override val datePattern = "MMMM dd, yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/KsGroupScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/KsGroupScans.kt index 4798b7f2..01d12a69 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/KsGroupScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/KsGroupScans.kt @@ -8,8 +8,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("KSGROUPSCANS", "Ks Group Scans", "en") internal class KsGroupScans(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.KSGROUPSCANS, "ksgroupscans.com") { - - override val datePattern = "MMMM d, yyyy" - -} + MadaraParser(context, MangaSource.KSGROUPSCANS, "ksgroupscans.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/KunManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/KunManga.kt index 503ef637..9ccd8250 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/KunManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/KunManga.kt @@ -8,8 +8,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("KUNMANGA", "Kun Manga", "en") internal class KunManga(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.KUNMANGA, "kunmanga.com", 10) { - - override val datePattern = "MMMM d, yyyy" - -} + MadaraParser(context, MangaSource.KUNMANGA, "kunmanga.com", 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/LadyManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/LadyManga.kt index f05b4f9b..8d923c9a 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/LadyManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/LadyManga.kt @@ -8,7 +8,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("LADYMANGA", "Lady Manga", "en") internal class LadyManga(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.LADYMANGA, "ladymanga.com") { - - override val datePattern = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.LADYMANGA, "ladymanga.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/LeviatanScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/LeviatanScans.kt new file mode 100644 index 00000000..52af8d7e --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/LeviatanScans.kt @@ -0,0 +1,11 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("LEVIATANSCANS", "Leviatan Scans", "en") +internal class LeviatanScans(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.LEVIATANSCANS, "en.leviatanscans.com", 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/LoliconMobi.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/LoliconMobi.kt index 30e5325b..705f1283 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/LoliconMobi.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/LoliconMobi.kt @@ -13,5 +13,4 @@ internal class LoliconMobi(context: MangaLoaderContext) : override val postreq = true override val isNsfwSource = true override val tagPrefix = "lolicon-genre/" - override val datePattern = "MMMM d, yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/LuxManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/LuxManga.kt index 169f0ad3..61a7d93b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/LuxManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/LuxManga.kt @@ -8,7 +8,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("LUXMANGA", "LuxManga", "en") internal class LuxManga(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.LUXMANGA, "luxmanga.net") { - - override val datePattern = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.LUXMANGA, "luxmanga.net") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga1st.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga1st.kt new file mode 100644 index 00000000..c3b6cf2c --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga1st.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGA1ST", "Manga1st", "en") +internal class Manga1st(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGA1ST, "manga1st.online") { + + override val datePattern = "d MMMM، yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga247.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga247.kt index 5b5b7bad..e1a04c97 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga247.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga247.kt @@ -9,4 +9,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGA_247", "247MANGA", "en") internal class Manga247(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGA_247, "247manga.com") { override val tagPrefix = "manhwa-genre/" + override val datePattern = "MMMM dd, yyyy" + override val withoutAjax = true + override val listeurl = "manhwa/" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga365.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga365.kt index f7e418cc..a5efce27 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga365.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga365.kt @@ -7,4 +7,6 @@ import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGA_365", "365Manga", "en") -internal class Manga365(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGA_365, "365manga.com") +internal class Manga365(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGA_365, "365manga.com") { + override val datePattern = "MMMM dd, yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga3s.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga3s.kt index 4a843ac5..6936ce4a 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga3s.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga3s.kt @@ -10,4 +10,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class Manga3s(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGA_3S, "manga3s.com") { override val tagPrefix = "manhwa-genre/" + override val datePattern = "MMMM dd, yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga68.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga68.kt new file mode 100644 index 00000000..2799ca4b --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manga68.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGA68", "Manga68", "en") +internal class Manga68(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGA68, "manga68.com") { + + override val withoutAjax = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaAction.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaAction.kt index 6a880368..f67d44b2 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaAction.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaAction.kt @@ -8,7 +8,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGAACTION", "Manga Action", "en") internal class MangaAction(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.MANGAACTION, "mangaaction.com") { - - override val datePattern = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.MANGAACTION, "mangaaction.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaBaz.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaBaz.kt new file mode 100644 index 00000000..2f3c16e9 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaBaz.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGABAZ", "MangaBaz", "en") +internal class MangaBaz(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGABAZ, "mangabaz.net") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaBob.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaBob.kt new file mode 100644 index 00000000..29a34183 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaBob.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGABOB", "MangaBob", "en") +internal class MangaBob(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGABOB, "mangabob.com") { + + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaCv.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaCv.kt index 6ffa9e8e..aaed4b72 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaCv.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaCv.kt @@ -8,4 +8,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGACV", "Manga Cv", "en") internal class MangaCv(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.MANGACV, "mangacv.com", pageSize = 10) + MadaraParser(context, MangaSource.MANGACV, "mangacv.com", pageSize = 10) { + override val datePattern = "MMMM dd, yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDods.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDods.kt new file mode 100644 index 00000000..b318b7db --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDods.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGADODS", "MangaDods", "en") +internal class MangaDods(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGADODS, "www.mangadods.com") { + + override val selectdesc = "div.description-summary" + override val datePattern = "dd-MMM" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaEffect.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaEffect.kt index de30fcb3..41b897d2 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaEffect.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaEffect.kt @@ -10,4 +10,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class MangaEffect(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGAEFFECT, "mangaeffect.com") { override val datePattern = "dd.MM.yyyy" + override val withoutAjax = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaFast.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaFast.kt new file mode 100644 index 00000000..337238e9 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaFast.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGAFAST", "Manga Fast", "en") +internal class MangaFast(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGAFAST, "manga-fast.com") { + + override val datePattern = "d MMMM، yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaForFree.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaForFree.kt new file mode 100644 index 00000000..8d8c73c5 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaForFree.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGAFORFREE", "MangaForFree", "en") +internal class MangaForFree(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGAFORFREE, "mangaforfree.com", 10) { + + override val postreq = true + override val isNsfwSource = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaFoxFull.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaFoxFull.kt new file mode 100644 index 00000000..23962548 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaFoxFull.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGAFOXFULL", "MangaFoxFull", "en") +internal class MangaFoxFull(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGAFOXFULL, "mangafoxfull.com") { + + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaFreak.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaFreak.kt new file mode 100644 index 00000000..9e3edb9e --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaFreak.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGAFREAK", "MangaFreak", "en") +internal class MangaFreak(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGAFREAK, "mangafreak.online") { + + override val postreq = true + override val datePattern = "dd MMMM، yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaGreat.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaGreat.kt new file mode 100644 index 00000000..f10dbcdb --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaGreat.kt @@ -0,0 +1,11 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGAGREAT", "MangaGreat", "en") +internal class MangaGreat(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGAGREAT, "mangagreat.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaHentai.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaHentai.kt new file mode 100644 index 00000000..b89dfd04 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaHentai.kt @@ -0,0 +1,15 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGAHENTAI", "Manga Hentai", "en") +internal class MangaHentai(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGAHENTAI, "mangahentai.me", 20) { + + override val isNsfwSource = true + override val tagPrefix = "manga-hentai-genre/" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaKing.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaKing.kt new file mode 100644 index 00000000..22e88798 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaKing.kt @@ -0,0 +1,11 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGAKING", "MangaKing", "en") +internal class MangaKing(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGAKING, "mangaking.net") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaKio.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaKio.kt new file mode 100644 index 00000000..894450fa --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaKio.kt @@ -0,0 +1,11 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGAKIO", "Manga Kio", "en") +internal class MangaKio(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGAKIO, "mangakio.me", 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaKiss.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaKiss.kt new file mode 100644 index 00000000..8cd51cb6 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaKiss.kt @@ -0,0 +1,11 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGAKISS", "Manga Kiss", "en") +internal class MangaKiss(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGAKISS, "mangakiss.org", 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaKomi.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaKomi.kt index 92dfdd83..487260d8 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaKomi.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaKomi.kt @@ -8,4 +8,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGA_KOMI", "MangaKomi", "en") internal class MangaKomi(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.MANGA_KOMI, "mangakomi.io", pageSize = 18) + MadaraParser(context, MangaSource.MANGA_KOMI, "mangakomi.io", pageSize = 18) { + override val datePattern = "MMMM dd, yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaLeveling.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaLeveling.kt new file mode 100644 index 00000000..ffbc456f --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaLeveling.kt @@ -0,0 +1,17 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGALEVELING", "Manga Leveling", "en") +internal class MangaLeveling(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGALEVELING, "mangaleveling.com", 30) { + + override val postreq = true + override val tagPrefix = "comics-genre/" + override val datePattern = "MM/dd/yyyy" + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaManiacs.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaManiacs.kt new file mode 100644 index 00000000..5597086a --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaManiacs.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGAMANIACS", "MangaManiacs", "en") +internal class MangaManiacs(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGAMANIACS, "mangamaniacs.org", 10) { + + override val isNsfwSource = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaOnlineTeam.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaOnlineTeam.kt new file mode 100644 index 00000000..5a8fb2c1 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaOnlineTeam.kt @@ -0,0 +1,11 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGAONLINETEAM", "Manga Online Team", "en") +internal class MangaOnlineTeam(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGAONLINETEAM, "mangaonlineteam.com", 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRead.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRead.kt index d016418a..df040f13 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRead.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRead.kt @@ -1,27 +1,9 @@ package org.koitharu.kotatsu.parsers.site.madara.en -import androidx.collection.arraySetOf -import org.jsoup.nodes.Element import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.exception.ParseException -import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.model.MangaSource -import org.koitharu.kotatsu.parsers.model.MangaState -import org.koitharu.kotatsu.parsers.model.MangaTag -import org.koitharu.kotatsu.parsers.model.RATING_UNKNOWN -import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.parsers.site.madara.MadaraParser -import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrl -import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrl -import org.koitharu.kotatsu.parsers.util.generateUid -import org.koitharu.kotatsu.parsers.util.mapToSet -import org.koitharu.kotatsu.parsers.util.parseHtml -import org.koitharu.kotatsu.parsers.util.removeSuffix -import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow -import org.koitharu.kotatsu.parsers.util.selectLastOrThrow -import org.koitharu.kotatsu.parsers.util.urlBuilder -import java.util.EnumSet @MangaSourceParser("MANGAREAD", "MangaRead", "en") internal class MangaRead(context: MangaLoaderContext) : @@ -29,103 +11,6 @@ internal class MangaRead(context: MangaLoaderContext) : override val tagPrefix = "genres/" override val datePattern = "dd.MM.yyyy" - private val nsfwTags = arraySetOf("yaoi", "yuri", "mature") + override val withoutAjax = true - init { - paginator.firstPage = 1 - searchPaginator.firstPage = 1 - } - - override val sortOrders: Set = EnumSet.of( - SortOrder.UPDATED, - SortOrder.POPULARITY, - SortOrder.ALPHABETICAL, - SortOrder.RATING, - SortOrder.POPULARITY, - ) - - override suspend fun getListPage( - page: Int, - query: String?, - tags: Set?, - sortOrder: SortOrder, - ): List { - val url = urlBuilder() - .addPathSegment("page") - .addPathSegment(page.toString()) - .addQueryParameter("s", query.orEmpty()) - .addQueryParameter("post_type", "wp-manga") - tags?.forEachIndexed { index, tag -> - url.addQueryParameter("genre[$index]", tag.key) - } - url.addQueryParameter("op", "") - .addQueryParameter("author", "") - .addQueryParameter("artist", "") - .addQueryParameter("release", "") - .addQueryParameter("adult", "") - if (query.isNullOrEmpty()) { - url.addQueryParameter( - "&m_orderby=", - when (sortOrder) { - SortOrder.RATING -> "trending" - SortOrder.ALPHABETICAL -> "alphabet" - SortOrder.POPULARITY -> "views" - SortOrder.NEWEST -> "new-manga" - SortOrder.UPDATED -> "latest" - }, - ) - } - val body = webClient.httpGet(url.build()).parseHtml().body() - val root = body.selectFirst(".search-wrap") ?: if (body.selectFirst(".not-found-content") != null) { - return emptyList() - } else { - throw ParseException(".search-wrap not found", body.baseUri()) - } - return root.select(".c-tabs-item__content").map { div -> - val a = div.selectFirstOrThrow("a") - val img = div.selectLastOrThrow("img") - val href = a.attrAsRelativeUrl("href") - val postContent = root.selectFirstOrThrow(".post-content") - val tagSet = postContent.getElementsContainingOwnText("Genre") - .firstOrNull()?.tableValue() - ?.getElementsByAttributeValueContaining("href", tagPrefix) - ?.mapToSet { it.asMangaTag() }.orEmpty() - Manga( - id = generateUid(href), - title = a.attr("title"), - altTitle = postContent.getElementsContainingOwnText("Alternative") - .firstOrNull()?.tableValue()?.text()?.trim(), - url = href, - publicUrl = a.attrAsAbsoluteUrl("href"), - coverUrl = img.src().orEmpty(), - author = postContent.getElementsContainingOwnText("Author") - .firstOrNull()?.tableValue()?.text()?.trim(), - state = postContent.getElementsContainingOwnText("Status") - .firstOrNull()?.tableValue()?.text()?.asMangaState(), - isNsfw = isNsfw(tagSet), - rating = div.selectFirstOrThrow(".score").text() - .toFloatOrNull()?.div(5f) ?: RATING_UNKNOWN, - tags = tagSet, - source = source, - ) - } - } - - - private fun isNsfw(tags: Set): Boolean { - return tags.any { it.key in nsfwTags } - } - - private fun String.asMangaState() = when (trim().lowercase(sourceLocale)) { - "ongoing" -> MangaState.ONGOING - "completed" -> MangaState.FINISHED - else -> null - } - - private fun Element.asMangaTag() = MangaTag( - title = ownText(), - key = attr("href").removeSuffix('/').substringAfterLast('/') - .replace('-', '+'), - source = source, - ) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaReadCo.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaReadCo.kt new file mode 100644 index 00000000..0aea41e4 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaReadCo.kt @@ -0,0 +1,15 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGAREADCO", "Manga Read Co", "en") +internal class MangaReadCo(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGAREADCO, "mangaread.co", 16) { + + override val tagPrefix = "m-genre/" + override val datePattern = "yyyy-MM-dd" + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaReading.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaReading.kt new file mode 100644 index 00000000..201fa6f3 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaReading.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGAREADING", "MangaReading", "en") +internal class MangaReading(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGAREADING, "mangareading.org") { + + override val datePattern = "dd.MM.yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRock.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRock.kt index 64eed44f..6ab1dd05 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRock.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRock.kt @@ -8,4 +8,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGAROCK", "MangaRock", "en") internal class MangaRock(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.MANGAROCK, "mangarockteam.com") + MadaraParser(context, MangaSource.MANGAROCK, "mangarockteam.com") { + + override val datePattern = "MMMM dd, yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRocky.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRocky.kt new file mode 100644 index 00000000..ea460492 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRocky.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGAROCKY", "Manga Rocky", "en") +internal class MangaRocky(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGAROCKY, "mangarocky.com") { + + override val postreq = true + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRolls.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRolls.kt new file mode 100644 index 00000000..146b832d --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRolls.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGAROLLS", "MangaRolls", "en") +internal class MangaRolls(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGAROLLS, "mangarolls.net") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRosie.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRosie.kt index 999dffd7..a4a8bacc 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRosie.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRosie.kt @@ -10,4 +10,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class MangaRosie(context: MangaLoaderContext) : MadaraParser( context, MangaSource.MANGAROSIE, "mangarosie.in", pageSize = 16, -) +) { + + override val datePattern = "MMMM dd, yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaSushi.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaSushi.kt new file mode 100644 index 00000000..8603031e --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaSushi.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGASUSHI", "MangaSushi", "en") +internal class MangaSushi(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGASUSHI, "mangasushi.org") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaTone.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaTone.kt new file mode 100644 index 00000000..5b7b5bd1 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaTone.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGATONE", "MangaTone", "en") +internal class MangaTone(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGATONE, "mangatone.com") { + + override val postreq = true + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaTx.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaTx.kt index 9b1c66b2..41db7ad5 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaTx.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaTx.kt @@ -7,4 +7,6 @@ import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGATX", "MangaTx", "en") -internal class MangaTx(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGATX, "mangatx.com") +internal class MangaTx(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGATX, "mangatx.com") { + override val datePattern = "MMMM dd, yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaTxUnofficial.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaTxUnofficial.kt new file mode 100644 index 00000000..5cdbf62b --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaTxUnofficial.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGATXUNOFFICIAL", "Manga Tx ( Unofficial )", "en") +internal class MangaTxUnofficial(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGATXUNOFFICIAL, "manga-tx.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaVisa.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaVisa.kt new file mode 100644 index 00000000..4c79b4ec --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaVisa.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGAVISA", "MangaVisa", "en") +internal class MangaVisa(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGAVISA, "mangavisa.com") { + + override val withoutAjax = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangagg.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangagg.kt new file mode 100644 index 00000000..aa7462b3 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangagg.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGAGG", "Mangagg", "en") +internal class Mangagg(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGAGG, "mangagg.com") { + + override val tagPrefix = "genre/" + override val datePattern = "MM/dd/yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangak2.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangak2.kt new file mode 100644 index 00000000..a444a9ff --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangak2.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGAK2", "Mangak2", "en") +internal class Mangak2(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGAK2, "mangak2.com", 10) { + + override val isNsfwSource = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangastic.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangastic.kt index 9a1a92be..2e1e8ca6 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangastic.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangastic.kt @@ -8,7 +8,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGASTIC", "Mangastic", "en") internal class Mangastic(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.MANGASTIC, "mangastic.cc", 20) { - - override val datePattern = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.MANGASTIC, "mangastic.cc", 20) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangastic9.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangastic9.kt new file mode 100644 index 00000000..89a68cd6 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangastic9.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGASTIC9", "Mangastic9", "en") +internal class Mangastic9(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGASTIC9, "mangastic.cc", 20) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangaus.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangaus.kt new file mode 100644 index 00000000..9c5cecc6 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangaus.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + + +@MangaSourceParser("MANGAUS", "Mangaus", "en") +internal class Mangaus(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGAUS, "mangaus.xyz") { + + override val withoutAjax = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangax1.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangax1.kt new file mode 100644 index 00000000..71a546d0 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangax1.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGAX1", "Mangax1", "en") +internal class Mangax1(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGAX1, "mangax1.com") { + + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhuaZone.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhuaZone.kt new file mode 100644 index 00000000..a3da5817 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhuaZone.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANHUAZONE", "ManhuaZone", "en") +internal class ManhuaZone(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANHUAZONE, "manhuazone.net") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuaes.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuaes.kt new file mode 100644 index 00000000..de860719 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuaes.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANHUAES", "Manhuaes", "en") +internal class Manhuaes(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANHUAES, "manhuaes.com") { + + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuafast.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuafast.kt new file mode 100644 index 00000000..a0aa9ceb --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuafast.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANHUAFAST", "Manhuafast", "en") +internal class Manhuafast(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANHUAFAST, "manhuafast.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuaga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuaga.kt new file mode 100644 index 00000000..60a514af --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuaga.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANHUAGA", "Manhuaga", "en") +internal class Manhuaga(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANHUAGA, "manhuaga.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuahot.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuahot.kt new file mode 100644 index 00000000..2f50dbf5 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuahot.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANHUAHOT", "Manhuahot", "en") +internal class Manhuahot(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANHUAHOT, "manhuahot.com", 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuamix.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuamix.kt new file mode 100644 index 00000000..e4793c73 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuamix.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANHUAMIX", "Manhuamix", "en") +internal class Manhuamix(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANHUAMIX, "manhuamix.com", 20) { + + override val tagPrefix = "manhua-genre/" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuaplus.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuaplus.kt new file mode 100644 index 00000000..0ebd060e --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuaplus.kt @@ -0,0 +1,39 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.exception.ParseException +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.parseFailed +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.toRelativeUrl + +@MangaSourceParser("MANHUAPLUS", "Manhuaplus", "en") +internal class Manhuaplus(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANHUAPLUS, "manhuaplus.com") { + + override val withoutAjax = true + + override suspend fun getPages(chapter: MangaChapter): List { + val fullUrl = chapter.url.toAbsoluteUrl(domain) + val doc = webClient.httpGet(fullUrl).parseHtml() + val root = doc.body().selectFirst("div.main-col-inner")?.selectFirst("div.reading-content") + ?: throw ParseException("Root not found", fullUrl) + return root.select("img").map { img -> + val url = img.src()?.toRelativeUrl(domain) ?: img.parseFailed("Image src not found") + MangaPage( + id = generateUid(url), + url = url, + preview = null, + source = source, + ) + } + } + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuaus.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuaus.kt new file mode 100644 index 00000000..7221b7de --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhuaus.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANHUAUS", "Manhuaus", "en") +internal class Manhuaus(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANHUAUS, "manhuaus.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwa18App.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwa18App.kt new file mode 100644 index 00000000..cbdf69d9 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwa18App.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANHWA18APP", "Manhwa18 App", "en") +internal class Manhwa18App(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANHWA18APP, "manhwa18.app") { + + override val isNsfwSource = true + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwa18Org.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwa18Org.kt new file mode 100644 index 00000000..ddb2669e --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwa18Org.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANHWA18ORG", "Manhwa18 Org", "en") +internal class Manhwa18Org(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANHWA18ORG, "manhwa18.org") { + + override val isNsfwSource = true + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwa68.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwa68.kt new file mode 100644 index 00000000..3e2eac1a --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwa68.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANHWA68", "Manhwa 68", "en") +internal class Manhwa68(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANHWA68, "manhwa68.com") { + + override val isNsfwSource = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaClan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaClan.kt index da78a895..96cbe810 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaClan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaClan.kt @@ -8,4 +8,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANHWACLAN", "ManhwaClan", "en") internal class ManhwaClan(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.MANHWACLAN, "manhwaclan.com", pageSize = 10) + MadaraParser(context, MangaSource.MANHWACLAN, "manhwaclan.com", pageSize = 10) { + + override val datePattern = "MMMM dd, yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaFull.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaFull.kt new file mode 100644 index 00000000..d8ba8e24 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaFull.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANHWAFULL", "ManhwaFull", "en") +internal class ManhwaFull(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANHWAFULL, "manhwafull.com") { + + override val datePattern = "MM/dd/yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaHentai.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaHentai.kt new file mode 100644 index 00000000..b8bbeb21 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaHentai.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANHWAHENTAI", "Manhwa Hentai", "en") +internal class ManhwaHentai(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANHWAHENTAI, "manhwahentai.me", 20) { + + override val isNsfwSource = true + override val tagPrefix = "webtoon-genre/" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaKool.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaKool.kt index e82994c5..ba79af68 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaKool.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaKool.kt @@ -8,7 +8,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANHWAKOOL", "Manhwa Kool", "en") internal class ManhwaKool(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.MANHWAKOOL, "manhwakool.com", pageSize = 10) { - - override val datePattern: String = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.MANHWAKOOL, "manhwakool.com", pageSize = 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaTop.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaTop.kt new file mode 100644 index 00000000..fad2ab65 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaTop.kt @@ -0,0 +1,58 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.jsoup.nodes.Document +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrlOrNull +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.mapChapters +import org.koitharu.kotatsu.parsers.util.parseFailed +import org.koitharu.kotatsu.parsers.util.parseHtml +import java.text.SimpleDateFormat + +@MangaSourceParser("MANHWATOP", "ManhwaTop", "en") +internal class ManhwaTop(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANHWATOP, "manhwatop.com") { + + override val postreq = true + + override suspend fun loadChapters(mangaUrl: String, document: Document): List { + + val mangaId = document.select("div#manga-chapters-holder").attr("data-id") + val url = "https://$domain/wp-admin/admin-ajax.php" + val postdata = "action=manga_get_chapters&manga=$mangaId" + val doc = webClient.httpPost(url, postdata).parseHtml() + + val dateFormat = SimpleDateFormat(datePattern, sourceLocale) + + return doc.select(selectchapter).mapChapters(reversed = true) { i, li -> + val a = li.selectFirst("a") + val href = a?.attrAsRelativeUrlOrNull("href") ?: li.parseFailed("Link is missing") + val link = href + stylepage + val dateText = li.selectFirst("a.c-new-tag")?.attr("title") ?: li.selectFirst(selectdate)?.text() + val name = a.selectFirst("p")?.text() ?: a.ownText() + val dateText2 = if (dateText != "Complete") { + dateText + } else { + null + } + MangaChapter( + id = generateUid(href), + url = link, + name = name, + number = i + 1, + branch = null, + uploadDate = parseChapterDate( + dateFormat, + dateText2, + ), + scanlator = null, + source = source, + ) + } + } +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaWorld.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaWorld.kt new file mode 100644 index 00000000..30f96f12 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaWorld.kt @@ -0,0 +1,11 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANHWAWORLD", "Manhwa World", "en") +internal class ManhwaWorld(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANHWAWORLD, "manhwaworld.com") + diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwasco.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwasco.kt new file mode 100644 index 00000000..b300943b --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwasco.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANHWASCO", "Manhwasco", "en") +internal class Manhwasco(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANHWASCO, "manhwasco.net") { + + override val selectgenre = "div.mg_genres a" + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManyComic.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManyComic.kt new file mode 100644 index 00000000..b5f28de6 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManyComic.kt @@ -0,0 +1,16 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANYCOMIC", "Many Comic", "en") +internal class ManyComic(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANYCOMIC, "manycomic.com") { + + override val postreq = true + override val isNsfwSource = true + override val tagPrefix = "comic-genre/" + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManyToon.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManyToon.kt new file mode 100644 index 00000000..ab218aec --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManyToon.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANYTOON", "Many Toon", "en") +internal class ManyToon(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANYTOON, "manytoon.com", 20) { + + override val isNsfwSource = true + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManyToonMe.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManyToonMe.kt new file mode 100644 index 00000000..b4800e00 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManyToonMe.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANYTOONME", "Many Toon Me", "en") +internal class ManyToonMe(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANYTOONME, "manytoon.me", 20) { + + override val isNsfwSource = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MilfToon.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MilfToon.kt new file mode 100644 index 00000000..765dab82 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MilfToon.kt @@ -0,0 +1,15 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MILFTOON", "Milf Toon", "en") +internal class MilfToon(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MILFTOON, "milftoon.xxx", 20) { + + override val isNsfwSource = true + override val postreq = true + override val datePattern = "d MMMM, yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MmScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MmScans.kt new file mode 100644 index 00000000..7c941859 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MmScans.kt @@ -0,0 +1,16 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + + +@MangaSourceParser("MMSCANS", "Mm Scans", "en") +internal class MmScans(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MMSCANS, "mm-scans.org") { + + override val selectchapter = "li.chapter-li" + override val selectdesc = "div.summary-text" + override val withoutAjax = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MortalsGroove.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MortalsGroove.kt new file mode 100644 index 00000000..64da3e22 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MortalsGroove.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MORTALSGROOVE", "Mortals Groove", "en") +internal class MortalsGroove(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MORTALSGROOVE, "mortalsgroove.com") { + + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MurimScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MurimScan.kt new file mode 100644 index 00000000..85bfefcb --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MurimScan.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MURIMSCAN", "Murim Scan", "en") +internal class MurimScan(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MURIMSCAN, "murimscan.run", 100) { + + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/NightComic.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/NightComic.kt new file mode 100644 index 00000000..4f585062 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/NightComic.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("NIGHTCOMIC", "NightComic", "en") +internal class NightComic(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.NIGHTCOMIC, "www.nightcomic.com") { + + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Novelcrow.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Novelcrow.kt new file mode 100644 index 00000000..59207c02 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Novelcrow.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("NOVELCROW", "Novelcrow", "en") +internal class Novelcrow(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.NOVELCROW, "novelcrow.com", 24) { + + override val isNsfwSource = true + override val tagPrefix = "comic-genre/" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Novelmic.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Novelmic.kt new file mode 100644 index 00000000..63c287b3 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Novelmic.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("NOVELMIC", "Novelmic", "en") +internal class Novelmic(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.NOVELMIC, "novelmic.com", 20) { + + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Painfulnightz.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Painfulnightz.kt new file mode 100644 index 00000000..2e2cdc82 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Painfulnightz.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("PAINFULNIGHTZ", "Painfulnightz", "en") +internal class Painfulnightz(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.PAINFULNIGHTZ, "painfulnightz.com") { + + override val datePattern = "d MMMM" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PetrotechSociety.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PetrotechSociety.kt new file mode 100644 index 00000000..001bc272 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PetrotechSociety.kt @@ -0,0 +1,15 @@ +package org.koitharu.kotatsu.parsers.site.madara.en + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("PETROTECHSOCIETY", "PetrotechSociety", "en") +internal class PetrotechSociety(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.PETROTECHSOCIETY, "www.petrotechsociety.org", pageSize = 10) { + + override val postreq = true + override val isNsfwSource = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PianManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PianManga.kt index 081c6f57..0925ab21 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PianManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PianManga.kt @@ -7,7 +7,8 @@ import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("PIANMANGA", "PianManga", "en") -internal class PianManga(context: MangaLoaderContext) : MadaraParser( - context, MangaSource.PIANMANGA, "pianmanga.me", - pageSize = 10, -) +internal class PianManga(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.PIANMANGA, "pianmanga.me", pageSize = 10) { + + override val datePattern = "MMMM dd, yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PlatinumScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PlatinumScans.kt new file mode 100644 index 00000000..3f553104 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PlatinumScans.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.en + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("PLATINUMSCANS", "PlatinumScans", "en") +internal class PlatinumScans(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.PLATINUMSCANS, "platinumscans.com", pageSize = 10) { + + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PornComixOnline.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PornComixOnline.kt new file mode 100644 index 00000000..968c2bb5 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PornComixOnline.kt @@ -0,0 +1,16 @@ +package org.koitharu.kotatsu.parsers.site.madara.en + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("PORNCOMIXONLINE", "PornComixOnline", "en") +internal class PornComixOnline(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.PORNCOMIXONLINE, "www.petrotechsociety.org") { + + override val tagPrefix = "by-tag/" + override val postreq = true + override val isNsfwSource = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ReadFreeComics.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ReadFreeComics.kt new file mode 100644 index 00000000..6b479814 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ReadFreeComics.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.en + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("READFREECOMICS", "ReadFreeComics", "en") +internal class ReadFreeComics(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.READFREECOMICS, "readfreecomics.com") { + + override val tagPrefix = "webtoon-comic-genre/" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ReadManhua.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ReadManhua.kt new file mode 100644 index 00000000..c8b72573 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ReadManhua.kt @@ -0,0 +1,16 @@ +package org.koitharu.kotatsu.parsers.site.madara.en + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("READMANHUA", "Read Manhua", "en") +internal class ReadManhua(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.READMANHUA, "readmanhua.net", 20) { + + override val isNsfwSource = true + override val postreq = true + override val datePattern = "d MMM yy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Rio2Manga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Rio2Manga.kt new file mode 100644 index 00000000..f8a3859b --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Rio2Manga.kt @@ -0,0 +1,11 @@ +package org.koitharu.kotatsu.parsers.site.madara.en + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("RIO2MANGA", "Rio2Manga", "en") +internal class Rio2Manga(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.RIO2MANGA, "rio2manga.com", 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/S2Manga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/S2Manga.kt index 2160e55a..da19c981 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/S2Manga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/S2Manga.kt @@ -7,4 +7,7 @@ import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("S2MANGA", "S2Manga", "en") -internal class S2Manga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.S2MANGA, "s2manga.com") +internal class S2Manga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.S2MANGA, "s2manga.com") { + + override val datePattern = "MMMM dd, yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Sawamics.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Sawamics.kt new file mode 100644 index 00000000..df4a0b5b --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Sawamics.kt @@ -0,0 +1,11 @@ +package org.koitharu.kotatsu.parsers.site.madara.en + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("SAWAMICS", "Sawamics", "en") +internal class Sawamics(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.SAWAMICS, "sawamics.com", 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Scansraw.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Scansraw.kt new file mode 100644 index 00000000..6027f63a --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Scansraw.kt @@ -0,0 +1,11 @@ +package org.koitharu.kotatsu.parsers.site.madara.en + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("SCANSRAW", "Scansraw", "en") +internal class Scansraw(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.SCANSRAW, "scansraw.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ShootingStarScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ShootingStarScans.kt new file mode 100644 index 00000000..102813fe --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ShootingStarScans.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.en + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("SHOOTINGSTARSCANS", "ShootingStar Scans", "en") +internal class ShootingStarScans(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.SHOOTINGSTARSCANS, "shootingstarscans.com") { + + override val tagPrefix = "manga-tag/" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/SleepyTranslations.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/SleepyTranslations.kt new file mode 100644 index 00000000..db42b47b --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/SleepyTranslations.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.en + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("SLEEPYTRANSLATIONS", "Sleepy Translations", "en") +internal class SleepyTranslations(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.SLEEPYTRANSLATIONS, "sleepytranslations.com", 16) { + + override val tagPrefix = "genre/" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Stkissmanga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Stkissmanga.kt index 00f80f8f..36a54bd2 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Stkissmanga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Stkissmanga.kt @@ -8,4 +8,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("STKISSMANGA", "Stkissmanga", "en") internal class Stkissmanga(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.STKISSMANGA, "1stkissmanga.me") + MadaraParser(context, MangaSource.STKISSMANGA, "1stkissmanga.me") { + + override val datePattern = "MMMM dd, yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/SumManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/SumManga.kt new file mode 100644 index 00000000..fb9ded1d --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/SumManga.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("SUMMANGA", "SumManga", "en") +internal class SumManga(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.SUMMANGA, "summanga.com") { + + override val isNsfwSource = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TeenManhua.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TeenManhua.kt new file mode 100644 index 00000000..2392e760 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TeenManhua.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("TEENMANHUA", "TeenManhua", "en") +internal class TeenManhua(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.TEENMANHUA, "teenmanhua.com") { + + override val datePattern = "dd/MM/yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TempleScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TempleScan.kt new file mode 100644 index 00000000..6ed67443 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TempleScan.kt @@ -0,0 +1,15 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("TEMPLESCAN", "TempleScan", "en") +internal class TempleScan(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.TEMPLESCAN, "templescan.net") { + + override val datePattern = "dd.MM.yyyy" + override val tagPrefix = "genre/" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Theguildscans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Theguildscans.kt new file mode 100644 index 00000000..c4c752df --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Theguildscans.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("THEGUILDSCANS", "Theguildscans", "en") +internal class Theguildscans(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.THEGUILDSCANS, "theguildscans.com") { + + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Todaymic.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Todaymic.kt new file mode 100644 index 00000000..0d95bf49 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Todaymic.kt @@ -0,0 +1,11 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("TODAYMIC", "Todaymic", "en") +internal class Todaymic(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.TODAYMIC, "todaymic.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ToonChill.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ToonChill.kt index 59563493..c7fb5bd3 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ToonChill.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ToonChill.kt @@ -8,7 +8,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("TOONCHILL", "Toon Chill", "en") internal class ToonChill(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.TOONCHILL, "toonchill.com", 32) { - - override val datePattern = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.TOONCHILL, "toonchill.com", 32) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Toonily.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Toonily.kt index 89dde668..5fce448e 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Toonily.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Toonily.kt @@ -11,6 +11,6 @@ internal class Toonily(context: MangaLoaderContext) : MadaraParser(context, MangaSource.TOONILY, "toonily.com", pageSize = 18) { override val tagPrefix = "webtoon-genre/" - + override val datePattern = "MMMM dd, yyyy" override val isNsfwSource = false } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ToonilyNet.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ToonilyNet.kt new file mode 100644 index 00000000..64bf4fd6 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ToonilyNet.kt @@ -0,0 +1,11 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("TOONILYNET", "Toonily Net", "en") +internal class ToonilyNet(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.TOONILYNET, "toonily.net") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Tritinia.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Tritinia.kt new file mode 100644 index 00000000..677a6b6c --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Tritinia.kt @@ -0,0 +1,11 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("TRITINIA", "Tritinia", "en") +internal class Tritinia(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.TRITINIA, "tritinia.org") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Wakamics.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Wakamics.kt new file mode 100644 index 00000000..0eb448b7 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Wakamics.kt @@ -0,0 +1,11 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("WAKAMICS", "Wakamics", "en") +internal class Wakamics(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.WAKAMICS, "wakamics.net", 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Webtoon.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Webtoon.kt new file mode 100644 index 00000000..0a2fd348 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Webtoon.kt @@ -0,0 +1,15 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("WEBTOON", "Webtoon Uk", "en") +internal class Webtoon(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.WEBTOON, "webtoon.uk", 20) { + + override val tagPrefix = "manhwa-genre/" + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/WebtoonScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/WebtoonScan.kt new file mode 100644 index 00000000..160163cb --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/WebtoonScan.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("WEBTOONSCAN", "WebtoonScan", "en") +internal class WebtoonScan(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.WEBTOONSCAN, "webtoonscan.com", 20) { + + override val isNsfwSource = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/WebtoonXyz.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/WebtoonXyz.kt new file mode 100644 index 00000000..7029347d --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/WebtoonXyz.kt @@ -0,0 +1,16 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("WEBTOONXYZ", "Webtoon Xyz", "en") +internal class WebtoonXyz(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.WEBTOONXYZ, "www.webtoon.xyz", 20) { + + override val isNsfwSource = true + override val tagPrefix = "webtoon-genre/" + override val datePattern = "d MMM yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Webtoons.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Webtoons.kt new file mode 100644 index 00000000..407a783b --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Webtoons.kt @@ -0,0 +1,15 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("WEBTOONS", "Webtoons", "en") +internal class Webtoons(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.WEBTOONS, "webtoons.top", 20) { + + override val isNsfwSource = true + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Woopread.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Woopread.kt new file mode 100644 index 00000000..2bd362a3 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Woopread.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("WOOPREAD", "Woopread", "en") +internal class Woopread(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.WOOPREAD, "woopread.com", 10) { + + override val tagPrefix = "series-genres/" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/YaoiMobi.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/YaoiMobi.kt new file mode 100644 index 00000000..4dbe345c --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/YaoiMobi.kt @@ -0,0 +1,15 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("YAOIMOBI", "YaoiMobi", "en") +internal class YaoiMobi(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.YAOIMOBI, "yaoi.mobi") { + + override val postreq = true + override val isNsfwSource = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/YaoiScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/YaoiScan.kt new file mode 100644 index 00000000..35fe23a6 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/YaoiScan.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("YAOISCAN", "Yaoi Scan", "en") +internal class YaoiScan(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.YAOISCAN, "yaoiscan.com", 20) { + + override val isNsfwSource = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZandynoFansub.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZandynoFansub.kt new file mode 100644 index 00000000..0b0e17af --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZandynoFansub.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("ZANDYNOFANSUB", "ZandynoFansub", "en") +internal class ZandynoFansub(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.ZANDYNOFANSUB, "zandynofansub.aishiteru.org", 20) { + + override val datePattern = "dd.MM.yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Zinmanhwa.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Zinmanhwa.kt new file mode 100644 index 00000000..928ddf7c --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Zinmanhwa.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("ZINMANHWA", "Zinmanhwa", "en") +internal class Zinmanhwa(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.ZINMANHWA, "zinmanhwa.com") { + + override val datePattern = "dd/MM/yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZuttoManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZuttoManga.kt new file mode 100644 index 00000000..02bc31a8 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZuttoManga.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("ZUTTOMANGA", "ZuttoManga", "en") +internal class ZuttoManga(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.ZUTTOMANGA, "zuttomanga.com") { + + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ApollComics.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ApollComics.kt index 89c63d9c..d4f092de 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ApollComics.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ApollComics.kt @@ -7,7 +7,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("APOLL_COMICS", "Apoll Comics", "es") internal class ApollComics(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.APOLL_COMICS, "apollcomics.com", 10) { - - override val datePattern = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.APOLL_COMICS, "apollcomics.com", 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Bokugents.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Bokugents.kt new file mode 100644 index 00000000..7120cda9 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Bokugents.kt @@ -0,0 +1,11 @@ +package org.koitharu.kotatsu.parsers.site.madara.es + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("BOKUGENTS", "Bokugents", "es") +internal class Bokugents(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.BOKUGENTS, "bokugents.com") +// For this source need to enable the option to ignore SSL errors diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/DokkoManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/DokkoManga.kt index 35dd647b..9dda3e5e 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/DokkoManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/DokkoManga.kt @@ -7,7 +7,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("DOKKOMANGA", "Dokko Manga", "es") internal class DokkoManga(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.DOKKOMANGA, "dokkomanga.com", 10) { - - override val datePattern = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.DOKKOMANGA, "dokkomanga.com", 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/EmperorScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/EmperorScan.kt index d5b63a9e..dcdfa0d8 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/EmperorScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/EmperorScan.kt @@ -7,7 +7,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("EMPERORSCAN", "Emperor Scan", "es") internal class EmperorScan(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.EMPERORSCAN, "dokkomanga.com") { - - override val datePattern = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.EMPERORSCAN, "dokkomanga.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Eromiau.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Eromiau.kt index c7d7d829..3e0c338b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Eromiau.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Eromiau.kt @@ -10,5 +10,4 @@ internal class Eromiau(context: MangaLoaderContext) : MadaraParser(context, MangaSource.EROMIAU, "www.eromiau.com", 10) { override val isNsfwSource = true - override val datePattern = "MMMM d, yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MangaMundoDrama.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MangaMundoDrama.kt index b750b6d5..0f699ba6 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MangaMundoDrama.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MangaMundoDrama.kt @@ -7,7 +7,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGAMUNDODRAMA", "Manga Mundo Drama", "es") internal class MangaMundoDrama(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.MANGAMUNDODRAMA, "inmortalscan.com") { - - override val datePattern = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.MANGAMUNDODRAMA, "inmortalscan.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ManhwaLatino.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ManhwaLatino.kt new file mode 100644 index 00000000..5a41961e --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ManhwaLatino.kt @@ -0,0 +1,55 @@ +package org.koitharu.kotatsu.parsers.site.madara.es + +import org.jsoup.nodes.Document +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrlOrNull +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.mapChapters +import org.koitharu.kotatsu.parsers.util.parseFailed +import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow +import java.text.SimpleDateFormat + +@MangaSourceParser("MANHWALATINO", "Manhwa Latino", "es") +internal class ManhwaLatino(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANHWALATINO, "manhwa-latino.com", 10) { + + override val datePattern = "MM/dd/yyyy" + override val isNsfwSource = true + override val withoutAjax = true + + + override suspend fun getChapters(manga: Manga, doc: Document): List { + val root2 = doc.body().selectFirstOrThrow("div.content-area") + val dateFormat = SimpleDateFormat(datePattern, sourceLocale) + return root2.select(selectchapter).mapChapters(reversed = true) { i, li -> + val a = li.selectFirst("a") + val href = a?.attrAsRelativeUrlOrNull("href") ?: li.parseFailed("Link is missing") + val link = href + stylepage + val dateText = li.selectFirst("a.c-new-tag")?.attr("title") ?: li.selectFirst(selectdate)?.text() + val dateText2 = if (dateText == "¡Recién publicado!") { + "1 mins ago" + } else { + dateText + } + val name = li.selectFirst("a:contains(Capitulo)")?.text() ?: a.ownText() + MangaChapter( + id = generateUid(href), + name = name, + number = i + 1, + url = link, + uploadDate = parseChapterDate( + dateFormat, + dateText2, + ), + source = source, + scanlator = null, + branch = null, + ) + } + } +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MonarcaManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MonarcaManga.kt new file mode 100644 index 00000000..eaf24bf6 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MonarcaManga.kt @@ -0,0 +1,112 @@ +package org.koitharu.kotatsu.parsers.site.madara.es + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaState +import org.koitharu.kotatsu.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrlOrNull +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.host +import org.koitharu.kotatsu.parsers.util.mapNotNullToSet +import org.koitharu.kotatsu.parsers.util.parseFailed +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.removeSuffix +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.toTitleCase +import org.koitharu.kotatsu.parsers.util.urlEncoded + +@MangaSourceParser("MONARCAMANGA", "MonarcaManga", "es") +internal class MonarcaManga(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MONARCAMANGA, "monarcamanga.com") { + + override val tagPrefix = "manga-generos/" + override val withoutAjax = true + + override suspend fun getListPage( + page: Int, + query: String?, + tags: Set?, + sortOrder: SortOrder, + ): List { + + val url = buildString { + append("https://") + append(domain) + val pages = page + 1 + + when { + !query.isNullOrEmpty() -> { + append("/page/") + append(pages.toString()) + append("/?s=") + append(query.urlEncoded()) + append("&post_type=wp-manga&") + } + + !tags.isNullOrEmpty() -> { + append("/$tagPrefix") + for (tag in tags) { + append(tag.key) + } + append("/page/") + append(pages.toString()) + append("?") + } + + else -> { + + append("/$listeurl") + append("/page/") + append(pages.toString()) + append("?") + } + } + append("m_orderby=") + when (sortOrder) { + SortOrder.POPULARITY -> append("views") + SortOrder.UPDATED -> append("latest") + SortOrder.NEWEST -> append("new-manga") + SortOrder.ALPHABETICAL -> append("alphabet") + else -> append("latest") + } + } + val doc = webClient.httpGet(url).parseHtml() + + return doc.select("div.row.c-tabs-item__content").ifEmpty { + doc.select("div.page-item-detail") + }.map { div -> + val href = div.selectFirst("a")?.attrAsRelativeUrlOrNull("href") ?: div.parseFailed("Link not found") + val summary = div.selectFirst(".tab-summary") ?: div.selectFirst(".item-summary") + Manga( + id = generateUid(href), + url = href, + publicUrl = href.toAbsoluteUrl(div.host ?: domain), + coverUrl = div.selectFirst("img")?.src().orEmpty(), + title = (div?.selectFirst("h3") ?: div?.selectFirst("h4"))?.text().orEmpty(), + altTitle = null, + rating = div.selectFirst("span.total_votes")?.ownText()?.toFloatOrNull()?.div(5f) ?: -1f, + tags = summary?.selectFirst(".mg_genres")?.select("a")?.mapNotNullToSet { a -> + MangaTag( + key = a.attr("href").removeSuffix('/').substringAfterLast('/'), + title = a.text().ifEmpty { return@mapNotNullToSet null }.toTitleCase(), + source = source, + ) + }.orEmpty(), + author = summary?.selectFirst(".mg_author")?.selectFirst("a")?.ownText(), + state = when (summary?.selectFirst(".mg_status")?.selectFirst(".summary-content")?.ownText() + ?.lowercase()) { + in ongoing -> MangaState.ONGOING + in finished -> MangaState.FINISHED + else -> null + }, + source = source, + isNsfw = isNsfwSource, + ) + } + } +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MundoManhwa.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MundoManhwa.kt index b1d81107..8081aed7 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MundoManhwa.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MundoManhwa.kt @@ -7,7 +7,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MUNDO_MANHWA", "Mundo Manhwa", "es") internal class MundoManhwa(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.MUNDO_MANHWA, "mundomanhwa.com", 10) { - - override val datePattern = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.MUNDO_MANHWA, "mundomanhwa.com", 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/RagnarokScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/RagnarokScan.kt index 13d84d76..20b591cd 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/RagnarokScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/RagnarokScan.kt @@ -11,6 +11,5 @@ internal class RagnarokScan(context: MangaLoaderContext) : override val stylepage = "" override val tagPrefix = "genero/" - override val datePattern = "MMMM d, yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/RagnarokScanlation.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/RagnarokScanlation.kt index 2d717d54..62908b7c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/RagnarokScanlation.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/RagnarokScanlation.kt @@ -7,7 +7,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("RAGNAROKSCANLATION", "Ragnarok Scanlation", "es") internal class RagnarokScanlation(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.RAGNAROKSCANLATION, "ragnarokscanlation.com") { - - override val datePattern = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.RAGNAROKSCANLATION, "ragnarokscanlation.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/TecnoScann.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/TecnoScann.kt index 0890c5bd..856b842c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/TecnoScann.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/TecnoScann.kt @@ -7,7 +7,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("TECNOSCANN", "TecnoScann", "es") internal class TecnoScann(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.TECNOSCANN, "tecnoscann.com", 24) { - - override val datePattern = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.TECNOSCANN, "tecnoscann.com", 24) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Vermanhwa.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Vermanhwa.kt index f56fd839..4c9d3ad6 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Vermanhwa.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Vermanhwa.kt @@ -2,127 +2,13 @@ package org.koitharu.kotatsu.parsers.site.madara.es import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.model.MangaSource -import org.koitharu.kotatsu.parsers.model.MangaState -import org.koitharu.kotatsu.parsers.model.MangaTag -import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.parsers.site.madara.MadaraParser -import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrl -import org.koitharu.kotatsu.parsers.util.domain -import org.koitharu.kotatsu.parsers.util.generateUid -import org.koitharu.kotatsu.parsers.util.host -import org.koitharu.kotatsu.parsers.util.mapNotNullToSet -import org.koitharu.kotatsu.parsers.util.parseHtml -import org.koitharu.kotatsu.parsers.util.removeSuffix -import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow -import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl -import org.koitharu.kotatsu.parsers.util.toTitleCase -import org.koitharu.kotatsu.parsers.util.urlEncoded -import java.util.EnumSet @MangaSourceParser("VERMANHWA", "Vermanhwa", "es") internal class Vermanhwa(context: MangaLoaderContext) : MadaraParser(context, MangaSource.VERMANHWA, "vermanhwa.es", 10) { override val isNsfwSource = true - override val datePattern = "MMMM d, yyyy" - - override val sortOrders: Set = EnumSet.of( - SortOrder.NEWEST, - SortOrder.ALPHABETICAL, - SortOrder.RATING, - SortOrder.POPULARITY, - SortOrder.UPDATED, - - - ) - - override suspend fun getListPage( - page: Int, - query: String?, - tags: Set?, - sortOrder: SortOrder, - ): List { - val url = buildString { - append("https://") - append(domain) - val pages = page + 1 - - when { - !query.isNullOrEmpty() -> { - append("/page/") - append(pages.toString()) - append("/?s=") - append(query.urlEncoded()) - append("&post_type=wp-manga") - } - - !tags.isNullOrEmpty() -> { - append("/manga-genre/") - for (tag in tags) { - append(tag.key) - } - append("/page/") - append(pages.toString()) - } - - else -> { - - append("/manga/") - append("/page/") - append(pages.toString()) - append("?m_orderby=") - if (sortOrder == SortOrder.NEWEST) { - append("new-manga") - } - if (sortOrder == SortOrder.ALPHABETICAL) { - append("alphabet") - } - if (sortOrder == SortOrder.RATING) { - append("rating") - } - if (sortOrder == SortOrder.POPULARITY) { - append("views") - } - if (sortOrder == SortOrder.UPDATED) { - append("latest") - } - - } - } - } - val doc = webClient.httpGet(url).parseHtml() - return doc.select("div.row.c-tabs-item__content").ifEmpty { - doc.select("div.page-item-detail.manga") - }.map { div -> - val href = div.selectFirstOrThrow("a").attrAsRelativeUrl("href") - val summary = div.selectFirst(".tab-summary") ?: div.selectFirst(".item-summary") - Manga( - id = generateUid(href), - url = href, - publicUrl = href.toAbsoluteUrl(div.host ?: domain), - coverUrl = div.selectFirst("img")?.src().orEmpty(), - title = (summary?.selectFirst("h3") ?: summary?.selectFirst("h4"))?.text().orEmpty(), - altTitle = null, - rating = div.selectFirst("span.total_votes")?.ownText()?.toFloatOrNull()?.div(5f) ?: -1f, - tags = summary?.selectFirst(".mg_genres")?.select("a")?.mapNotNullToSet { a -> - MangaTag( - key = a.attr("href").removeSuffix('/').substringAfterLast('/'), - title = a.text().ifEmpty { return@mapNotNullToSet null }.toTitleCase(), - source = source, - ) - }.orEmpty(), - author = summary?.selectFirst(".mg_author")?.selectFirst("a")?.ownText(), - state = when (summary?.selectFirst(".mg_status")?.selectFirst(".summary-content")?.ownText()?.trim() - ?.lowercase()) { - "OnGoing" -> MangaState.ONGOING - "Completed" -> MangaState.FINISHED - else -> null - }, - source = source, - isNsfw = isNsfwSource, - ) - } - } + override val withoutAjax = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/FrScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/FrScan.kt index 2e99d276..6d76dcb2 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/FrScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/FrScan.kt @@ -7,7 +7,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("FRSCAN", "FrScan", "fr") internal class FrScan(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.FRSCAN, "fr-scan.com") { - - override val datePattern = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.FRSCAN, "fr-scan.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/HhentaiFr.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/HhentaiFr.kt index 6b7e666e..973e88bf 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/HhentaiFr.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/HhentaiFr.kt @@ -11,7 +11,6 @@ import org.koitharu.kotatsu.parsers.util.insertCookies internal class HhentaiFr(context: MangaLoaderContext) : MadaraParser(context, MangaSource.HHENTAIFR, "hhentai.fr") { - override val datePattern = "MMMM d, yyyy" override val isNsfwSource = true init { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/MangasOriginesUnofficial.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/MangasOriginesUnofficial.kt index b0ae1b67..c8ff964d 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/MangasOriginesUnofficial.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/MangasOriginesUnofficial.kt @@ -5,9 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser -@MangaSourceParser("MANGASORIGINESUNOFFICIAL", "Mangas Origines ( unofficial )", "fr") +@MangaSourceParser("MANGASORIGINESUNOFFICIAL", "Mangas Origines ( Unofficial )", "fr") internal class MangasOriginesUnofficial(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.MANGASORIGINESUNOFFICIAL, "mangas-origines.xyz") { - - override val datePattern = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.MANGASORIGINESUNOFFICIAL, "mangas-origines.xyz") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/ScanHentaiMenu.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/ScanHentaiMenu.kt index 2d3c56d7..2518dad0 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/ScanHentaiMenu.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/ScanHentaiMenu.kt @@ -10,5 +10,4 @@ internal class ScanHentaiMenu(context: MangaLoaderContext) : MadaraParser(context, MangaSource.SCANHENTAIMENU, "scan.hentai.menu") { override val isNsfwSource = true - override val datePattern = "MMMM d, yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/ShadowTrad.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/ShadowTrad.kt index 9663e827..010c6c7c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/ShadowTrad.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/ShadowTrad.kt @@ -7,7 +7,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("SHADOWTRAD", "Shadow Trad", "fr") internal class ShadowTrad(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.SHADOWTRAD, "shadowtrad.net", 10) { - - override val datePattern = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.SHADOWTRAD, "shadowtrad.net", 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/ReaperScansParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/ReaperScansParser.kt deleted file mode 100644 index d9657b69..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/ReaperScansParser.kt +++ /dev/null @@ -1,17 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara.id - -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.model.MangaSource -import org.koitharu.kotatsu.parsers.site.madara.MadaraParser -import java.util.Locale - -@MangaSourceParser("REAPER_SCANS_ID", "ReaperScansID", "id") -internal class ReaperScansParser(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.REAPER_SCANS_ID, "reaperscans.id") { - - override val datePattern = "MMMM dd, yyyy" - override val tagPrefix = "genre/" - override val sourceLocale: Locale = Locale.ENGLISH - -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Shinigami.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Shinigami.kt index 14077ad5..c29dec43 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Shinigami.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Shinigami.kt @@ -11,6 +11,5 @@ internal class Shinigami(context: MangaLoaderContext) : MadaraParser(context, MangaSource.SHINIGAMI, "shinigami.id", 10) { override val tagPrefix = "genre/" - override val datePattern = "MMMM d, yyyy" override val sourceLocale: Locale = Locale.ENGLISH } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Worldmanhwas.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Worldmanhwas.kt index 881f1549..891fdde3 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Worldmanhwas.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Worldmanhwas.kt @@ -11,6 +11,5 @@ internal class Worldmanhwas(context: MangaLoaderContext) : MadaraParser(context, MangaSource.WORLDMANHWAS, "worldmanhwas.bar", 10) { override val tagPrefix = "komik-genre/" - override val datePattern = "MMMM d, yyyy" override val sourceLocale: Locale = Locale.ENGLISH } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ja/HachiManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ja/HachiManga.kt index 6c6448ee..5cd39f9f 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ja/HachiManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ja/HachiManga.kt @@ -1,10 +1,222 @@ package org.koitharu.kotatsu.parsers.site.madara.en +import kotlinx.coroutines.async +import kotlinx.coroutines.coroutineScope +import org.jsoup.nodes.Document import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.exception.ParseException +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaPage import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaState +import org.koitharu.kotatsu.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrl +import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrlOrNull +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.host +import org.koitharu.kotatsu.parsers.util.mapChapters +import org.koitharu.kotatsu.parsers.util.mapNotNullToSet +import org.koitharu.kotatsu.parsers.util.parseFailed +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.removeSuffix +import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow +import org.koitharu.kotatsu.parsers.util.selectLast +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.toRelativeUrl +import org.koitharu.kotatsu.parsers.util.toTitleCase +import org.koitharu.kotatsu.parsers.util.urlEncoded +import java.text.SimpleDateFormat +import java.util.EnumSet @MangaSourceParser("HACHIMANGA", "HachiManga", "ja") -internal class HachiManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.HACHIMANGA, "hachiraw.com") +internal class HachiManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.HACHIMANGA, "hachiraw.com") { + + override val datePattern = "MMMM dd, yyyy" + override val selectchapter = "li.a-h" + override val selectdate = "span.chapter-tim" + override val selectdesc = "div.dsct" + override val tagPrefix = "genre/" + + override val sortOrders: Set = EnumSet.of( + SortOrder.UPDATED, + SortOrder.POPULARITY, + SortOrder.NEWEST, + SortOrder.RATING, + ) + + override suspend fun getListPage( + page: Int, + query: String?, + tags: Set?, + sortOrder: SortOrder, + ): List { + val url = buildString { + append("https://") + append(domain) + val pages = page + 1 + + when { + !query.isNullOrEmpty() -> { + + append("/search/") + append(pages.toString()) + append("/?keyword=") + append(query.urlEncoded()) + } + + !tags.isNullOrEmpty() -> { + append("/$tagPrefix") + for (tag in tags) { + append(tag.key) + } + append("/") + append(pages.toString()) + append("/") + } + + else -> { + + if (sortOrder == SortOrder.POPULARITY) { + append("/top-bookmarked") + } + if (sortOrder == SortOrder.NEWEST) { + append("/new-manga") + } + if (sortOrder == SortOrder.RATING) { + append("/top-rating") + } + + if (sortOrder == SortOrder.UPDATED) { + append("/latest-updates") + } + append("/") + append(pages.toString()) + append("/") + } + } + } + val doc = webClient.httpGet(url).parseHtml() + return doc.select("div.manga-item").map { div -> + val href = div.selectFirstOrThrow("a").attrAsRelativeUrl("href") + val summary = div.selectFirst(".tab-summary") ?: div.selectFirst("div.data.wleft") + Manga( + id = generateUid(href), + url = href, + publicUrl = href.toAbsoluteUrl(div.host ?: domain), + coverUrl = div.selectFirst("img")?.src().orEmpty(), + title = (summary?.selectFirst("h3") ?: summary?.selectFirst("h4"))?.text().orEmpty(), + altTitle = null, + rating = div.selectFirst("span.total_votes")?.ownText()?.toFloatOrNull()?.div(5f) ?: -1f, + tags = summary?.selectFirst(".mg_genres")?.select("a")?.mapNotNullToSet { a -> + MangaTag( + key = a.attr("href").removeSuffix('/').substringAfterLast('/'), + title = a.text().ifEmpty { return@mapNotNullToSet null }.toTitleCase(), + source = source, + ) + }.orEmpty(), + author = summary?.selectFirst(".mg_author")?.selectFirst("a")?.ownText(), + state = when (summary?.selectFirst(".mg_status")?.selectFirst(".summary-content")?.ownText()?.trim() + ?.lowercase()) { + "Ongoing" -> MangaState.ONGOING + "Completed " -> MangaState.FINISHED + else -> null + }, + source = source, + isNsfw = isNsfwSource, + ) + } + } + + override suspend fun getDetails(manga: Manga): Manga = coroutineScope { + val fullUrl = manga.url.toAbsoluteUrl(domain) + val doc = webClient.httpGet(fullUrl).parseHtml() + val body = doc.body() + + val chaptersDeferred = async { getChapters(manga, doc) } + + val desc = body.select(selectdesc).let { + if (it.select("p").text().isNotEmpty()) { + it.select("p").joinToString(separator = "\n\n") { p -> + p.text().replace("
", "\n") + } + } else { + it.text() + } + } + + val stateDiv = (body.selectFirst("div.post-content_item:contains(状態)"))?.selectLast("div.summary-content") + + val state = stateDiv?.let { + when (it.text()) { + in ongoing -> MangaState.ONGOING + in finished -> MangaState.FINISHED + else -> null + } + } + + val alt = doc.body().select(".post-content_item:contains(代替名) .summary-content").firstOrNull()?.tableValue() + ?.text()?.trim() + + manga.copy( + tags = doc.body().select(selectgenre).mapNotNullToSet { a -> + MangaTag( + key = a.attr("href").removeSuffix("/").substringAfterLast('/'), + title = a.text().toTitleCase(), + source = source, + ) + }, + description = desc, + altTitle = alt, + state = state, + chapters = chaptersDeferred.await(), + ) + } + + override suspend fun getChapters(manga: Manga, doc: Document): List { + val root2 = doc.body().selectFirstOrThrow("div.manga-content") + val dateFormat = SimpleDateFormat(datePattern, sourceLocale) + return root2.select(selectchapter).mapChapters(reversed = true) { i, li -> + val a = li.selectFirst("a") + val href = a?.attrAsRelativeUrlOrNull("href") ?: li.parseFailed("Link is missing") + val link = href + stylepage + val dateText = li.selectFirst("a.c-new-tag")?.attr("title") ?: li.selectFirst(selectdate)?.text() + val name = a.selectFirst("p")?.text() ?: a.ownText() + MangaChapter( + id = generateUid(href), + name = name, + number = i + 1, + url = link, + uploadDate = parseChapterDate( + dateFormat, + dateText, + ), + source = source, + scanlator = null, + branch = null, + ) + } + } + + override suspend fun getPages(chapter: MangaChapter): List { + val fullUrl = chapter.url.toAbsoluteUrl(domain) + val doc = webClient.httpGet(fullUrl).parseHtml() + val root = doc.body().selectFirst("div.chapter-pages") + ?: throw ParseException("Root not found", fullUrl) + return root.select("div.chapter-page").map { div -> + val img = div.selectFirst("img") ?: div.parseFailed("Page image not found") + val url = img.src()?.toRelativeUrl(domain) ?: div.parseFailed("Image src not found") + MangaPage( + id = generateUid(url), + url = url, + preview = null, + source = source, + ) + } + } +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ko/RawDex.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ko/RawDex.kt index f25e98cc..6c6198c0 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ko/RawDex.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ko/RawDex.kt @@ -11,6 +11,5 @@ internal class RawDex(context: MangaLoaderContext) : MadaraParser(context, MangaSource.RAWDEX, "rawdex.net", 40) { override val isNsfwSource = true - override val datePattern = "MMMM d, yyyy" override val sourceLocale: Locale = Locale.ENGLISH } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ArthurScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ArthurScan.kt index 9b1f4e0e..3d2fb643 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ArthurScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ArthurScan.kt @@ -7,7 +7,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("ARTHUR_SCAN", "Arthur Scan", "pt") internal class ArthurScan(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.ARTHUR_SCAN, "arthurscan.xyz") { - - override val datePattern = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.ARTHUR_SCAN, "arthurscan.xyz") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/AstrumScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/AstrumScans.kt new file mode 100644 index 00000000..60cc4eb9 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/AstrumScans.kt @@ -0,0 +1,15 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("ASTRUMSCANS", "Astrum Scans", "pt") +internal class AstrumScans(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.ASTRUMSCANS, "astrumscans.xyz", 20) { + + override val withoutAjax = true + override val listeurl = "series/" + override val datePattern = "dd/MM/yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Fbsquads.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Fbsquads.kt index 7c624713..6e4b9cf8 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Fbsquads.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Fbsquads.kt @@ -9,7 +9,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class Fbsquads(context: MangaLoaderContext) : MadaraParser(context, MangaSource.FBSQUADS, "fbsquads.com") { - override val tagPrefix = "manga-tag/" override val datePattern: String = "dd/MM/yyyy" override val isNsfwSource = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/FinalScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/FinalScans.kt index b53cd6c2..3ec61696 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/FinalScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/FinalScans.kt @@ -9,6 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class FinalScans(context: MangaLoaderContext) : MadaraParser(context, MangaSource.FINALSCANS, "finalscans.com") { - override val datePattern: String = "MMMM d, yyyy" override val isNsfwSource = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/FoxWhite.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/FoxWhite.kt index 58cab6c5..5b6582a1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/FoxWhite.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/FoxWhite.kt @@ -7,7 +7,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("FOXWHITE", "Fox White", "pt") internal class FoxWhite(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.FOXWHITE, "foxwhite.com.br") { - - override val datePattern = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.FOXWHITE, "foxwhite.com.br") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Hipercool.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Hipercool.kt index 1eecb350..ccf9a548 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Hipercool.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Hipercool.kt @@ -9,7 +9,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class Hipercool(context: MangaLoaderContext) : MadaraParser(context, MangaSource.HIPERCOOL, "hipercool.xyz", pageSize = 20) { - override val datePattern = "MMMM d, yyyy" override val tagPrefix = "manga-tag/" override val isNsfwSource = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ImperiodaBritannia.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ImperiodaBritannia.kt new file mode 100644 index 00000000..dfbab489 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ImperiodaBritannia.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("IMPERIODABRITANNIA", "ImperiodaBritannia", "pt") +internal class ImperiodaBritannia(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.IMPERIODABRITANNIA, "imperiodabritannia.com", 10) { + + override val datePattern: String = "dd 'de' MMMMM 'de' yyyy" + override val withoutAjax = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/LeitorKamisama.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/LeitorKamisama.kt index 8fe97e05..b344dcf9 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/LeitorKamisama.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/LeitorKamisama.kt @@ -9,6 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class LeitorKamisama(context: MangaLoaderContext) : MadaraParser(context, MangaSource.LEITORKAMISAMA, "leitor.kamisama.com.br", 10) { - override val tagPrefix = "manga-tag/" override val datePattern: String = "dd 'de' MMMMM 'de' yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/MaidScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/MaidScan.kt new file mode 100644 index 00000000..cfea48bd --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/MaidScan.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MAIDSCAN", "MaidScan", "pt") +internal class MaidScan(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MAIDSCAN, "maidscan.com.br", 10) { + + override val isNsfwSource = true + override val datePattern: String = "dd 'de' MMMMM 'de' yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/MoonLoversScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/MoonLoversScan.kt index 191e4c5c..2f417b65 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/MoonLoversScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/MoonLoversScan.kt @@ -10,5 +10,4 @@ internal class MoonLoversScan(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MOONLOVERSSCAN, "moonloversscan.com.br", 10) { override val isNsfwSource = true - override val datePattern = "MMMM d, yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Prismahentai.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Prismahentai.kt index 1d2c7c02..ed9958af 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Prismahentai.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Prismahentai.kt @@ -7,7 +7,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("PRISMA_HENTAI", "Prisma hentai", "pt") internal class Prismahentai(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.PRISMA_HENTAI, "prismahentai.com", 18) { - - override val datePattern = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.PRISMA_HENTAI, "prismahentai.com", 18) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Psunicorn.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Psunicorn.kt index b64ecf86..025237db 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Psunicorn.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Psunicorn.kt @@ -11,5 +11,4 @@ internal class Psunicorn(context: MangaLoaderContext) : override val isNsfwSource = true - override val datePattern: String = "MMMM d, yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/RandomScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/RandomScans.kt index 77d3c6d3..c503249c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/RandomScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/RandomScans.kt @@ -7,7 +7,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("RANDOMSCANS", "Random Scans", "pt") internal class RandomScans(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.RANDOMSCANS, "randomscans.com") { - - override val datePattern: String = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.RANDOMSCANS, "randomscans.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/YugenMangas.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/YugenMangas.kt index 6957162c..42a41ada 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/YugenMangas.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/YugenMangas.kt @@ -8,7 +8,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("YUGENMANGAS", "Yugen Mangas", "pt") internal class YugenMangas(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.YUGENMANGAS, "yugenmangas.com.br", 10) { - - override val datePattern: String = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.YUGENMANGAS, "yugenmangas.com.br", 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ru/MangaMammy.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ru/MangaMammy.kt new file mode 100644 index 00000000..2244e352 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ru/MangaMammy.kt @@ -0,0 +1,16 @@ +package org.koitharu.kotatsu.parsers.site.madara.ru + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + + +@MangaSourceParser("MANGAMAMMY", "MangaMammy", "ru") +internal class MangaMammy(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGAMAMMY, "mangamammy.ru") { + + override val datePattern = "dd.MM.yyyy" + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/BakaMan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/BakaMan.kt index c47e4724..5351e554 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/BakaMan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/BakaMan.kt @@ -8,4 +8,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("BAKAMAN", "BakaMan", "th") internal class BakaMan(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.BAKAMAN, "bakaman.net", pageSize = 18) + MadaraParser(context, MangaSource.BAKAMAN, "bakaman.net", pageSize = 18) { + + override val datePattern = "MMMM dd, yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/Cat300.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/Cat300.kt index d0f9d089..92d61336 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/Cat300.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/Cat300.kt @@ -9,5 +9,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("CAT_300", "Cat300", "th") internal class Cat300(context: MangaLoaderContext) : MadaraParser(context, MangaSource.CAT_300, "cat300.com") { + override val datePattern = "MMMM dd, yyyy" override val isNsfwSource = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/AnisaManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/AnisaManga.kt index 70a33f89..54b5c7a3 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/AnisaManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/AnisaManga.kt @@ -9,7 +9,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("ANISA_MANGA", "Anisa Manga", "tr") internal class AnisaManga(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.ANISA_MANGA, "anisamanga.com") { - - override val datePattern = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.ANISA_MANGA, "anisamanga.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MangaDiyari.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MangaDiyari.kt index 0ecc188b..d37de38b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MangaDiyari.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MangaDiyari.kt @@ -9,7 +9,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGADIYARI", "MangaDiyari", "tr") internal class MangaDiyari(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.MANGADIYARI, "manga-diyari.com", 10) { - - override val datePattern = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.MANGADIYARI, "manga-diyari.com", 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Mangawt.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Mangawt.kt index 1937319f..19fd1ecd 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Mangawt.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Mangawt.kt @@ -7,7 +7,4 @@ import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGAWT", "Mangawt", "tr") -internal class Mangawt(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGAWT, "mangawt.com") { - - override val datePattern = "MMMM d, yyyy" -} +internal class Mangawt(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGAWT, "mangawt.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Manwe.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Manwe.kt index db380e96..1d952c28 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Manwe.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Manwe.kt @@ -7,7 +7,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANWE", "Manwe", "tr") internal class Manwe(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.MANWE, "manwe.pro", 20) { - - override val datePattern = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.MANWE, "manwe.pro", 20) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/RomantikManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/RomantikManga.kt index 5ed57bdc..b6980999 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/RomantikManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/RomantikManga.kt @@ -9,7 +9,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("ROMANTIKMANGA", "Romantik Manga", "tr") internal class RomantikManga(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.ROMANTIKMANGA, "romantikmanga.com", 20) { - - override val datePattern = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.ROMANTIKMANGA, "romantikmanga.com", 20) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Tonizutoon.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Tonizutoon.kt index 2cc92101..d2f2adb7 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Tonizutoon.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Tonizutoon.kt @@ -12,5 +12,4 @@ internal class Tonizutoon(context: MangaLoaderContext) : MadaraParser(context, MangaSource.TONIZUTOON, "tonizutoon.com") { override val isNsfwSource = true - override val datePattern = "MMMM d, yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/TortugaCeviri.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/TortugaCeviri.kt index f2fbe9c2..3302c513 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/TortugaCeviri.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/TortugaCeviri.kt @@ -9,7 +9,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("TORTUGACEVIRI", "Tortuga Ceviri", "tr") internal class TortugaCeviri(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.TORTUGACEVIRI, "tortuga-ceviri.com") { - - override val datePattern = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.TORTUGACEVIRI, "tortuga-ceviri.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Webtoonhatti.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Webtoonhatti.kt index fd88dd3f..0bc63acc 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Webtoonhatti.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Webtoonhatti.kt @@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("WEBTOONHATTI", "Webtoonhatti", "tr") internal class Webtoonhatti(context: MangaLoaderContext) : MadaraParser(context, MangaSource.WEBTOONHATTI, "webtoonhatti.com", 20) { - override val tagPrefix = "webtoon-tur/" + override val tagPrefix = "webtoon-tur/" override val datePattern = "d MMMM" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt index 6da99baf..a3cd910e 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt @@ -79,16 +79,16 @@ internal abstract class MangaReaderParser( val tagMap = getOrCreateTagMap() - val selecttag = if (tablemode != null) { - tablemode.select(".seriestugenre > a") + val selectTag = if (tablemode != null) { + docs.select(".seriestugenre > a") } else { docs.select(".wd-full .mgen > a") } - val tags = selecttag.mapNotNullToSet { tagMap[it.text()] } + val tags = selectTag.mapNotNullToSet { tagMap[it.text()] } - val stateselect = if (tablemode != null) { + val stateSelect = if (tablemode != null) { tablemode.selectFirst(".infotable td:contains(Status)") ?: tablemode.selectFirst(".infotable td:contains(Statut)") ?: tablemode.selectFirst(".infotable td:contains(حالة العمل)") @@ -106,10 +106,10 @@ internal abstract class MangaReaderParser( } val state = if (tablemode != null) { - stateselect?.lastElementSibling() + stateSelect?.lastElementSibling() } else { - stateselect?.lastElementChild() + stateSelect?.lastElementChild() } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/DragonTranslationParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/DragonTranslationParser.kt index a9b8b51c..be71c210 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/DragonTranslationParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/DragonTranslationParser.kt @@ -12,7 +12,7 @@ import java.util.Locale internal class DragonTranslationParser(context: MangaLoaderContext) : MangaReaderParser(context, MangaSource.DRAGONTRANSLATION, pageSize = 20, searchPageSize = 10) { override val configKeyDomain: ConfigKey.Domain - get() = ConfigKey.Domain("dragontranslation.com") + get() = ConfigKey.Domain("dragontranslation.net") override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/SushiScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/SushiScan.kt index 9af96d37..ab3f2fff 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/SushiScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/SushiScan.kt @@ -11,8 +11,9 @@ import java.util.Locale @MangaSourceParser("SUSHISCAN", "SushiScan", "fr") internal class SushiScan(context: MangaLoaderContext) : MangaReaderParser(context, MangaSource.SUSHISCAN, pageSize = 20, searchPageSize = 10) { + override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("sushiscan.net") - + override val listUrl = "/catalogue" override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.FRENCH) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikIndoParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikIndoParser.kt index 60d6b010..41b89ab0 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikIndoParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikIndoParser.kt @@ -11,11 +11,9 @@ import java.util.Locale @MangaSourceParser("KOMIKINDO", "KomikIndo", "id") internal class KomikIndoParser(context: MangaLoaderContext) : MangaReaderParser(context, MangaSource.KOMIKINDO, pageSize = 20, searchPageSize = 10) { + override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("komikindo.co") - override val listUrl: String - get() = "/project" - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale("in", "ID")) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikLabParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikLabParser.kt index 8093d027..92e721d5 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikLabParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikLabParser.kt @@ -10,10 +10,7 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser @MangaSourceParser("KOMIKLAB", "KomikLab", "id") internal class KomikLabParser(context: MangaLoaderContext) : MangaReaderParser(context, MangaSource.KOMIKLAB, pageSize = 20, searchPageSize = 10) { + override val configKeyDomain: ConfigKey.Domain get() = ConfigKey.Domain("komiklab.com") - - override val listUrl: String - get() = "/project" - } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangasusuParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangasusuParser.kt deleted file mode 100644 index dbcbd51f..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangasusuParser.kt +++ /dev/null @@ -1,20 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.mangareader.id - -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.config.ConfigKey -import org.koitharu.kotatsu.parsers.model.MangaSource -import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser - - -@MangaSourceParser("MANGASUSU", "Mangasusu", "id") -internal class MangasusuParser(context: MangaLoaderContext) : - MangaReaderParser(context, MangaSource.MANGASUSU, pageSize = 20, searchPageSize = 10) { - override val configKeyDomain: ConfigKey.Domain - get() = ConfigKey.Domain("mangasusu.co.in") - - override val listUrl: String - get() = "/project" - - -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/Golgebahcesi.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/Golgebahcesi.kt new file mode 100644 index 00000000..9373bd5f --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/Golgebahcesi.kt @@ -0,0 +1,18 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import java.text.SimpleDateFormat +import java.util.Locale + +@MangaSourceParser("GOLGEBAHCESI", "Golgebahcesi", "tr") +internal class Golgebahcesi(context: MangaLoaderContext) : + MangaReaderParser(context, MangaSource.GOLGEBAHCESI, pageSize = 14, searchPageSize = 9) { + override val configKeyDomain: ConfigKey.Domain + get() = ConfigKey.Domain("golgebahcesi.com") + + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale("tr")) +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/MajorScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/MajorScans.kt new file mode 100644 index 00000000..aa7af917 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/MajorScans.kt @@ -0,0 +1,18 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import java.text.SimpleDateFormat +import java.util.Locale + +@MangaSourceParser("MAJORSCANS", "MajorScans", "tr") +internal class MajorScans(context: MangaLoaderContext) : + MangaReaderParser(context, MangaSource.MAJORSCANS, pageSize = 20, searchPageSize = 25) { + override val configKeyDomain: ConfigKey.Domain + get() = ConfigKey.Domain("www.majorscans.com") + + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale("tr")) +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/Mangaokutr.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/Mangaokutr.kt new file mode 100644 index 00000000..885e9af1 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/Mangaokutr.kt @@ -0,0 +1,18 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import java.text.SimpleDateFormat +import java.util.Locale + +@MangaSourceParser("MANGAOKUTR", "Mangaokutr", "tr") +internal class Mangaokutr(context: MangaLoaderContext) : + MangaReaderParser(context, MangaSource.MANGAOKUTR, pageSize = 25, searchPageSize = 20) { + override val configKeyDomain: ConfigKey.Domain + get() = ConfigKey.Domain("mangaokutr.com") + + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale("tr")) +} From 8df620b1cd7ff1d2b34e53610845a1293f10e036 Mon Sep 17 00:00:00 2001 From: devi Date: Sat, 15 Jul 2023 19:08:03 +0200 Subject: [PATCH 2/7] fix --- .../kotatsu/parsers/site/Manhwa18Parser.kt | 14 +++++++------- .../parsers/site/mangareader/MangaReaderParser.kt | 1 + .../site/mangareader/tr/TempestfansubParser.kt | 4 ++-- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/Manhwa18Parser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/Manhwa18Parser.kt index fd949c73..760f7afa 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/Manhwa18Parser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/Manhwa18Parser.kt @@ -56,16 +56,16 @@ class Manhwa18Parser(context: MangaLoaderContext) : override suspend fun getDetails(manga: Manga): Manga { val docs = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml() - val cardInfoElement = docs.selectFirst(".card .manga-info") - val author = cardInfoElement?.selectFirst("b:contains(Author(s))")?.parent() - ?.select("a.btn") + val cardInfoElement = docs.selectFirst("div.series-information") + val author = cardInfoElement?.selectFirst(".info-name:contains(Author(s))")?.parent() + ?.select("a") ?.joinToString(", ") { it.text() } val availableTags = tagsMap.get() - val tags = cardInfoElement?.selectFirst("b:contains(Genre(s))")?.parent() - ?.select("a.btn") + val tags = cardInfoElement?.selectFirst(".info-name:contains(Genre(s))")?.parent() + ?.select("a") ?.mapNotNullToSet { availableTags[it.text().lowercase(Locale.ENGLISH)] } - val state = cardInfoElement?.selectFirst("b:contains(Status)")?.parent() - ?.selectFirst("a.btn") + val state = cardInfoElement?.selectFirst(".info-name:contains(Status)")?.parent() + ?.selectFirst("a") ?.let { when (it.text()) { "On going" -> MangaState.ONGOING diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt index a3cd910e..5f38d19d 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt @@ -103,6 +103,7 @@ internal abstract class MangaReaderParser( ?: docs.selectFirst(".tsinfo div:contains(حالة العمل)") ?: docs.selectFirst(".tsinfo div:contains(Estado)") ?: docs.selectFirst(".tsinfo div:contains(สถานะ)") ?: docs.selectFirst(".tsinfo div:contains(Stato )") ?: docs.selectFirst(".tsinfo div:contains(Durum)") ?: docs.selectFirst(".tsinfo div:contains(Statüsü)") + ?: docs.selectFirst(".tsinfo div:contains(Statü)") } val state = if (tablemode != null) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/TempestfansubParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/TempestfansubParser.kt index b8c1d8f8..597142d6 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/TempestfansubParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/TempestfansubParser.kt @@ -12,8 +12,8 @@ import java.util.Locale internal class TempestfansubParser(context: MangaLoaderContext) : MangaReaderParser(context, MangaSource.TEMPESTFANSUB, pageSize = 25, searchPageSize = 40) { override val configKeyDomain: ConfigKey.Domain - get() = ConfigKey.Domain("manga.tempestfansub.com") + get() = ConfigKey.Domain("tempestfansub.com") - override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH) + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale("tr", "TR")) } From 7c4bffede2e93b744d59a54031e972543cc4ba17 Mon Sep 17 00:00:00 2001 From: devi Date: Sat, 15 Jul 2023 19:41:28 +0200 Subject: [PATCH 3/7] minor fix and add quick source ar --- .../kotatsu/parsers/site/madara/MadaraParser.kt | 3 ++- .../kotatsu/parsers/site/madara/ar/MangaLike.kt | 11 +++++++++++ .../kotatsu/parsers/site/madara/ar/MangaLionz.kt | 5 +---- .../kotatsu/parsers/site/mangareader/ar/SwaTeam.kt | 2 +- 4 files changed, 15 insertions(+), 6 deletions(-) create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaLike.kt diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt index c468461e..592148be 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt @@ -298,7 +298,8 @@ internal abstract class MadaraParser( ?: body.selectFirst("div.post-content_item:contains(Durum)") ?: body.selectFirst("div.post-content_item:contains(Statüsü)") ?: body.selectFirst("div.post-content_item:contains(Статус)") - ?: body.selectFirst("div.post-content_item:contains(状态)"))?.selectLast("div.summary-content") + ?: body.selectFirst("div.post-content_item:contains(状态)") + ?: body.selectFirst("div.post-content_item:contains(الحالة)"))?.selectLast("div.summary-content") val state = stateDiv?.let { when (it.text()) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaLike.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaLike.kt new file mode 100644 index 00000000..5a94170d --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaLike.kt @@ -0,0 +1,11 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGALIKE", "MangaLike", "ar") +internal class MangaLike(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGALIKE, "mangalike.me", pageSize = 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaLionz.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaLionz.kt index 5825a973..040d1d83 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaLionz.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaLionz.kt @@ -8,7 +8,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGALIONZ", "Manga Lionz", "ar") internal class MangaLionz(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.MANGALIONZ, "mangalionz.com", pageSize = 10) { - - override val datePattern = "MMMM d, yyyy" -} + MadaraParser(context, MangaSource.MANGALIONZ, "mangalionz.com", pageSize = 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/SwaTeam.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/SwaTeam.kt index a86b6c5c..ededbcbe 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/SwaTeam.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/SwaTeam.kt @@ -27,7 +27,7 @@ internal class SwaTeam(context: MangaLoaderContext) : MangaReaderParser(context, MangaSource.SWATEAM, pageSize = 42, searchPageSize = 39) { override val configKeyDomain: ConfigKey.Domain - get() = ConfigKey.Domain("swateam.me") + get() = ConfigKey.Domain("swatop.club") override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("dd-MM-yyyy", Locale("ar", "AR")) From e67beae235b1e4048fed2d53f4b977e12c08b8cb Mon Sep 17 00:00:00 2001 From: devi Date: Sat, 15 Jul 2023 21:20:23 +0200 Subject: [PATCH 4/7] add source request --- .../parsers/site/madara/pt/HikariScan.kt | 13 ++ .../site/mangareader/MangaReaderParser.kt | 2 +- .../parsers/site/mangareader/ar/MangaProtm.kt | 21 ++ .../parsers/site/mangareader/en/RealmScans.kt | 20 ++ .../parsers/site/mangareader/id/Komikcast.kt | 216 ++++++++++++++++++ 5 files changed, 271 insertions(+), 1 deletion(-) create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/HikariScan.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/MangaProtm.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/RealmScans.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Komikcast.kt diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/HikariScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/HikariScan.kt new file mode 100644 index 00000000..704dfa74 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/HikariScan.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("HIKARISCAN", "Hikari Scan", "pt") +internal class HikariScan(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.HIKARISCAN, "hikariscan.com.br", pageSize = 10) { + + override val datePattern: String = "dd 'de' MMMMM 'de' yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt index 5f38d19d..83a38464 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt @@ -204,7 +204,7 @@ internal abstract class MangaReaderParser( return parseMangaList(webClient.httpGet(url).parseHtml()) } - private fun parseMangaList(docs: Document): List { + protected open fun parseMangaList(docs: Document): List { return docs.select(".postbody .listupd .bs .bsx").mapNotNull { val a = it.selectFirst("a") ?: return@mapNotNull null val relativeUrl = a.attrAsRelativeUrl("href") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/MangaProtm.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/MangaProtm.kt new file mode 100644 index 00000000..07c9fd55 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/MangaProtm.kt @@ -0,0 +1,21 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.ar + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import java.text.SimpleDateFormat +import java.util.Locale + +@MangaSourceParser("MANGAPROTM", "MangaProtm", "ar") +internal class MangaProtm(context: MangaLoaderContext) : + MangaReaderParser(context, MangaSource.MANGAPROTM, pageSize = 20, searchPageSize = 20) { + + override val configKeyDomain: ConfigKey.Domain + get() = ConfigKey.Domain("mangaprotm.com") + + override val listUrl = "/series" + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale("ar", "AR")) + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/RealmScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/RealmScans.kt new file mode 100644 index 00000000..4dfa880d --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/RealmScans.kt @@ -0,0 +1,20 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.en + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import java.text.SimpleDateFormat +import java.util.Locale + + +@MangaSourceParser("REALMSCANS", "RealmScans", "en") +internal class RealmScans(context: MangaLoaderContext) : + MangaReaderParser(context, MangaSource.REALMSCANS, pageSize = 30, searchPageSize = 50) { + override val configKeyDomain: ConfigKey.Domain + get() = ConfigKey.Domain("realmscans.xyz") + + override val listUrl = "/series" + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("dd MMM yyyy", Locale.ENGLISH) +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Komikcast.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Komikcast.kt new file mode 100644 index 00000000..2a58038e --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Komikcast.kt @@ -0,0 +1,216 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.id + +import org.json.JSONObject +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaState +import org.koitharu.kotatsu.parsers.model.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.model.WordSet +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrlOrNull +import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrl +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.mapChapters +import org.koitharu.kotatsu.parsers.util.mapNotNullToSet +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.tryParse +import java.text.DateFormat +import java.util.Calendar + +@MangaSourceParser("KOMIKCAST", "Komikcast", "id") +internal class Komikcast(context: MangaLoaderContext) : + MangaReaderParser(context, MangaSource.KOMIKCAST, pageSize = 60, searchPageSize = 28) { + override val configKeyDomain: ConfigKey.Domain + get() = ConfigKey.Domain("komikcast.io") + + override val listUrl = "/daftar-komik" + + override suspend fun getDetails(manga: Manga): Manga { + val docs = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml() + val chapters = docs.select("#chapter-wrapper > li").mapChapters(reversed = true) { index, element -> + val url = element.selectFirst("a")?.attrAsRelativeUrl("href") ?: return@mapChapters null + MangaChapter( + id = generateUid(url), + name = docs.selectFirst("a.chapter-link-item")?.ownText().orEmpty(), + url = url, + number = index + 1, + scanlator = null, + uploadDate = parseChapterDate( + chapterDateFormat, + element.selectFirst("div.chapter-link-time")?.text(), + ), + branch = null, + source = source, + ) + } + return parseInfo(docs, manga, chapters) + } + + override suspend fun parseInfo(docs: Document, manga: Manga, chapters: List): Manga { + + /// set if is table + + val tagMap = getOrCreateTagMap() + + val tags = docs.select(".komik_info-content-genre > a").mapNotNullToSet { tagMap[it.text()] } + + val state = docs.selectFirst(".komik_info-content-meta span:contains(Status)")?.lastElementChild() + + val mangaState = state?.let { + when (it.text()) { + "Ongoing" -> MangaState.ONGOING + "Completed" -> MangaState.FINISHED + else -> null + } + } + + + val author = docs.selectFirst(".komik_info-content-meta span:contains(Author)")?.lastElementChild()?.text() + + val nsfw = docs.selectFirst(".restrictcontainer") != null + || docs.selectFirst(".info-right .alr") != null + || docs.selectFirst(".postbody .alr") != null + + return manga.copy( + description = docs.selectFirst("div.komik_info-description-sinopsis")?.text(), + state = mangaState, + author = author, + isNsfw = manga.isNsfw || nsfw, + tags = tags, + chapters = chapters, + ) + } + + + override fun parseMangaList(docs: Document): List { + return docs.select("div.list-update_item").mapNotNull { + val a = it.selectFirst("a") ?: return@mapNotNull null + val relativeUrl = a.attrAsRelativeUrl("href") + val rating = it.selectFirst(".numscore")?.text() + ?.toFloatOrNull()?.div(10) ?: RATING_UNKNOWN + + val name = it.selectFirst("h3.title")?.text().orEmpty() + Manga( + id = generateUid(relativeUrl), + url = relativeUrl, + title = name, + altTitle = null, + publicUrl = a.attrAsAbsoluteUrl("href"), + rating = rating, + isNsfw = isNsfwSource, + coverUrl = it.selectFirst("img.ts-post-image")?.imageUrl().orEmpty(), + tags = emptySet(), + state = null, + author = null, + source = source, + ) + } + } + + private fun Element.imageUrl(): String { + return attrAsAbsoluteUrlOrNull("src") + ?: attrAsAbsoluteUrlOrNull("data-src") + ?: attrAsAbsoluteUrlOrNull("data-cfsrc") + ?: "" + } + + override suspend fun getPages(chapter: MangaChapter): List { + val chapterUrl = chapter.url.toAbsoluteUrl(domain) + val docs = webClient.httpGet(chapterUrl).parseHtml() + + val test = docs.select("script:containsData(ts_reader)") + if (test.isNullOrEmpty()) { + return docs.select("div#chapter_body img").map { img -> + val url = img.imageUrl() + MangaPage( + id = generateUid(url), + url = url, + preview = null, + source = source, + ) + } + } else { + val script = docs.selectFirstOrThrow("script:containsData(ts_reader)") + val images = JSONObject(script.data().substringAfter('(').substringBeforeLast(')')) + .getJSONArray("sources") + .getJSONObject(0) + .getJSONArray("images") + val pages = ArrayList(images.length()) + for (i in 0 until images.length()) { + pages.add( + MangaPage( + id = generateUid(images.getString(i)), + url = images.getString(i), + preview = null, + source = source, + ), + ) + } + + return pages + + } + + } + + protected fun parseChapterDate(dateFormat: DateFormat, date: String?): Long { + date ?: return 0 + return when { + date.endsWith(" ago", ignoreCase = true) -> { + parseRelativeDate(date) + } + + else -> dateFormat.tryParse(date) + } + } + + private fun parseRelativeDate(date: String): Long { + val number = Regex("""(\d+)""").find(date)?.value?.toIntOrNull() ?: return 0 + val cal = Calendar.getInstance() + + return when { + WordSet( + "day", + "days", + ).anyWordIn(date) -> cal.apply { add(Calendar.DAY_OF_MONTH, -number) }.timeInMillis + + WordSet("hour", "hours").anyWordIn(date) -> cal.apply { + add( + Calendar.HOUR, + -number, + ) + }.timeInMillis + + WordSet( + "mins", + ).anyWordIn(date) -> cal.apply { + add( + Calendar.MINUTE, + -number, + ) + }.timeInMillis + + WordSet("second").anyWordIn(date) -> cal.apply { + add( + Calendar.SECOND, + -number, + ) + }.timeInMillis + + WordSet("month", "months").anyWordIn(date) -> cal.apply { add(Calendar.MONTH, -number) }.timeInMillis + WordSet("year").anyWordIn(date) -> cal.apply { add(Calendar.YEAR, -number) }.timeInMillis + else -> 0 + } + } +} From 5104a8b5422578d616420e3b22bc02e5ba0c2a0b Mon Sep 17 00:00:00 2001 From: devi Date: Sun, 16 Jul 2023 08:31:50 +0200 Subject: [PATCH 5/7] add source request and remove source duplicate --- .../site/mangareader/en/LegionScansEn.kt | 15 --------------- .../parsers/site/mangareader/th/LamiManga.kt | 18 ++++++++++++++++++ .../parsers/site/mangareader/th/ThaiManga.kt | 18 ++++++++++++++++++ 3 files changed, 36 insertions(+), 15 deletions(-) delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/LegionScansEn.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/LamiManga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/ThaiManga.kt diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/LegionScansEn.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/LegionScansEn.kt deleted file mode 100644 index 7e40f260..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/LegionScansEn.kt +++ /dev/null @@ -1,15 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.mangareader.en - -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.config.ConfigKey -import org.koitharu.kotatsu.parsers.model.MangaSource -import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser - - -@MangaSourceParser("LEGIONSCANS_EN", "Legion Scans EN", "en") -internal class LegionScansEn(context: MangaLoaderContext) : - MangaReaderParser(context, MangaSource.LEGIONSCANS_EN, pageSize = 20, searchPageSize = 10) { - override val configKeyDomain: ConfigKey.Domain - get() = ConfigKey.Domain("legionscans.com") -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/LamiManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/LamiManga.kt new file mode 100644 index 00000000..adba4d9d --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/LamiManga.kt @@ -0,0 +1,18 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.th + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import java.text.SimpleDateFormat +import java.util.Locale + +@MangaSourceParser("LAMIMANGA", "Lami Manga", "th") +internal class LamiManga(context: MangaLoaderContext) : + MangaReaderParser(context, MangaSource.LAMIMANGA, pageSize = 20, searchPageSize = 10) { + override val configKeyDomain: ConfigKey.Domain + get() = ConfigKey.Domain("www.lami-manga.com") + + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale("th", "TH")) +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/ThaiManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/ThaiManga.kt new file mode 100644 index 00000000..777be98d --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/ThaiManga.kt @@ -0,0 +1,18 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.th + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import java.text.SimpleDateFormat +import java.util.Locale + +@MangaSourceParser("THAIMANGA", "Thai Manga", "th") +internal class ThaiManga(context: MangaLoaderContext) : + MangaReaderParser(context, MangaSource.THAIMANGA, pageSize = 40, searchPageSize = 10) { + override val configKeyDomain: ConfigKey.Domain + get() = ConfigKey.Domain("www.thaimanga.net") + + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale("th", "TH")) +} From 94496ecc026d768e21ece69ea4b95c25f5c89b84 Mon Sep 17 00:00:00 2001 From: devi Date: Sun, 16 Jul 2023 18:51:25 +0200 Subject: [PATCH 6/7] fix Asura Scans --- .../kotatsu/parsers/site/mangareader/en/AsuraScansParser.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/AsuraScansParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/AsuraScansParser.kt index 675e5c1f..1eb5a267 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/AsuraScansParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/AsuraScansParser.kt @@ -10,7 +10,7 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser internal class AsuraScansParser(context: MangaLoaderContext) : MangaReaderParser(context, MangaSource.ASURASCANS, pageSize = 20, searchPageSize = 10) { override val configKeyDomain: ConfigKey.Domain - get() = ConfigKey.Domain("asurascans.com") + get() = ConfigKey.Domain("asura.gg") } From c9e7d4f48313511f2b4709a2e7dbfdb1499a080a Mon Sep 17 00:00:00 2001 From: devi Date: Sun, 16 Jul 2023 20:02:36 +0200 Subject: [PATCH 7/7] add source requested --- .../parsers/site/mangareader/ar/Oxapk.kt | 99 +++++++++++++++++++ .../parsers/site/mangareader/th/Doujin69.kt | 20 ++++ .../parsers/site/mangareader/th/InuManga.kt | 18 ++++ .../parsers/site/mangareader/th/MafiaManga.kt | 18 ++++ .../parsers/site/mangareader/th/Manga689.kt | 18 ++++ .../parsers/site/mangareader/th/PopsManga.kt | 18 ++++ .../parsers/site/mangareader/th/Sodsaime.kt | 18 ++++ 7 files changed, 209 insertions(+) create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Oxapk.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/Doujin69.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/InuManga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/MafiaManga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/Manga689.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/PopsManga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/Sodsaime.kt diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Oxapk.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Oxapk.kt new file mode 100644 index 00000000..00f02cd2 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Oxapk.kt @@ -0,0 +1,99 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.ar + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.WordSet +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrl +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.mapChapters +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.tryParse +import java.text.DateFormat +import java.text.SimpleDateFormat +import java.util.Calendar +import java.util.Locale + +@MangaSourceParser("OXAPK", "Oxapk", "ar") +internal class Oxapk(context: MangaLoaderContext) : + MangaReaderParser(context, MangaSource.OXAPK, pageSize = 24, searchPageSize = 10) { + + override val configKeyDomain: ConfigKey.Domain + get() = ConfigKey.Domain("oxapk.com") + + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale("ar", "AR")) + + override suspend fun getDetails(manga: Manga): Manga { + val docs = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml() + val chapters = docs.select("#chapterlist > ul > li").mapChapters(reversed = true) { index, element -> + val url = element.selectFirst("a")?.attrAsRelativeUrl("href") ?: return@mapChapters null + MangaChapter( + id = generateUid(url), + name = docs.selectFirst("a.chapter-link-item")?.ownText().orEmpty(), + url = url, + number = index + 1, + scanlator = null, + uploadDate = parseChapterDate( + chapterDateFormat, + element.selectFirst("div.chapter-link-time")?.text(), + ), + branch = null, + source = source, + ) + } + return parseInfo(docs, manga, chapters) + } + + protected fun parseChapterDate(dateFormat: DateFormat, date: String?): Long { + date ?: return 0 + return when { + date.endsWith("منذ ", ignoreCase = true) -> { + parseRelativeDate(date) + } + + else -> dateFormat.tryParse(date) + } + } + + private fun parseRelativeDate(date: String): Long { + val number = Regex("""(\d+)""").find(date)?.value?.toIntOrNull() ?: return 0 + val cal = Calendar.getInstance() + + return when { + WordSet("أيام").anyWordIn(date) -> cal.apply { add(Calendar.DAY_OF_MONTH, -number) }.timeInMillis + + WordSet("hour", "hours").anyWordIn(date) -> cal.apply { + add( + Calendar.HOUR, + -number, + ) + }.timeInMillis + + WordSet( + "mins", + ).anyWordIn(date) -> cal.apply { + add( + Calendar.MINUTE, + -number, + ) + }.timeInMillis + + WordSet("second").anyWordIn(date) -> cal.apply { + add( + Calendar.SECOND, + -number, + ) + }.timeInMillis + + WordSet("أشهر").anyWordIn(date) -> cal.apply { add(Calendar.MONTH, -number) }.timeInMillis + WordSet("year").anyWordIn(date) -> cal.apply { add(Calendar.YEAR, -number) }.timeInMillis + else -> 0 + } + } +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/Doujin69.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/Doujin69.kt new file mode 100644 index 00000000..a4eae5ee --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/Doujin69.kt @@ -0,0 +1,20 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.th + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import java.text.SimpleDateFormat +import java.util.Locale + +@MangaSourceParser("DOUJIN69", "Doujin69", "th") +internal class Doujin69(context: MangaLoaderContext) : + MangaReaderParser(context, MangaSource.DOUJIN69, pageSize = 40, searchPageSize = 21) { + override val configKeyDomain: ConfigKey.Domain + get() = ConfigKey.Domain("doujin69.com") + + override val isNsfwSource = true + override val listUrl = "/doujin" + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale("th", "TH")) +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/InuManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/InuManga.kt new file mode 100644 index 00000000..b70f1cb0 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/InuManga.kt @@ -0,0 +1,18 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.th + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import java.text.SimpleDateFormat +import java.util.Locale + +@MangaSourceParser("INUMANGA", "Inu Manga", "th") +internal class InuManga(context: MangaLoaderContext) : + MangaReaderParser(context, MangaSource.INUMANGA, pageSize = 40, searchPageSize = 10) { + override val configKeyDomain: ConfigKey.Domain + get() = ConfigKey.Domain("www.inu-manga.com") + + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale("th", "TH")) +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/MafiaManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/MafiaManga.kt new file mode 100644 index 00000000..9dc130dc --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/MafiaManga.kt @@ -0,0 +1,18 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.th + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import java.text.SimpleDateFormat +import java.util.Locale + +@MangaSourceParser("MAFIAMANGA", "Mafia Manga", "th") +internal class MafiaManga(context: MangaLoaderContext) : + MangaReaderParser(context, MangaSource.MAFIAMANGA, pageSize = 20, searchPageSize = 10) { + override val configKeyDomain: ConfigKey.Domain + get() = ConfigKey.Domain("mafia-manga.com") + + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale("th", "TH")) +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/Manga689.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/Manga689.kt new file mode 100644 index 00000000..43b4e7b3 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/Manga689.kt @@ -0,0 +1,18 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.th + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import java.text.SimpleDateFormat +import java.util.Locale + +@MangaSourceParser("MANGA689", "Manga689", "th") +internal class Manga689(context: MangaLoaderContext) : + MangaReaderParser(context, MangaSource.MANGA689, pageSize = 45, searchPageSize = 21) { + override val configKeyDomain: ConfigKey.Domain + get() = ConfigKey.Domain("manga689.com") + + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale("th", "TH")) +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/PopsManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/PopsManga.kt new file mode 100644 index 00000000..51fc3fa5 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/PopsManga.kt @@ -0,0 +1,18 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.th + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import java.text.SimpleDateFormat +import java.util.Locale + +@MangaSourceParser("POPSMANGA", "PopsManga", "th") +internal class PopsManga(context: MangaLoaderContext) : + MangaReaderParser(context, MangaSource.POPSMANGA, pageSize = 20, searchPageSize = 14) { + override val configKeyDomain: ConfigKey.Domain + get() = ConfigKey.Domain("popsmanga.com") + + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale("th", "TH")) +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/Sodsaime.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/Sodsaime.kt new file mode 100644 index 00000000..c6075cdf --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/th/Sodsaime.kt @@ -0,0 +1,18 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.th + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import java.text.SimpleDateFormat +import java.util.Locale + +@MangaSourceParser("SODSAIME", "สดใสเมะ", "th") +internal class Sodsaime(context: MangaLoaderContext) : + MangaReaderParser(context, MangaSource.SODSAIME, pageSize = 40, searchPageSize = 10) { + override val configKeyDomain: ConfigKey.Domain + get() = ConfigKey.Domain("www.xn--l3c0azab5a2gta.com") + + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale("th", "TH")) +}