diff --git a/multisrc/overrides/madara/arangscans/src/ArangScans.kt b/multisrc/overrides/madara/arangscans/src/ArangScans.kt index f4398f523..0e03fb769 100644 --- a/multisrc/overrides/madara/arangscans/src/ArangScans.kt +++ b/multisrc/overrides/madara/arangscans/src/ArangScans.kt @@ -6,7 +6,8 @@ import okhttp3.Request import java.text.SimpleDateFormat import java.util.Locale -class ArangScans : Madara("Arang Scans", "https://www.arangscans.com", "en", SimpleDateFormat("d MMM yyyy", Locale.US)) { +class ArangScans : Madara("Arang Scans", "https://arangscans.com", "en") { + override val userAgentRandomizer = "" // has very few manga override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/manga?m_orderby=views", headers) override fun popularMangaNextPageSelector(): String? = null diff --git a/multisrc/overrides/madara/lilymanga/src/LilyManga.kt b/multisrc/overrides/madara/lilymanga/src/LilyManga.kt new file mode 100644 index 000000000..fb6080186 --- /dev/null +++ b/multisrc/overrides/madara/lilymanga/src/LilyManga.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.en.lilymanga + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class LilyManga : Madara("Lily Manga", "https://lilymanga.com", "en", SimpleDateFormat("yyyy-MM-dd", Locale.US)) diff --git a/multisrc/overrides/madara/lovablesubs/src/LovableSubs.kt b/multisrc/overrides/madara/lovablesubs/src/LovableSubs.kt new file mode 100644 index 000000000..22534ef37 --- /dev/null +++ b/multisrc/overrides/madara/lovablesubs/src/LovableSubs.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.tr.lovablesubs + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class LovableSubs : Madara("LovableSubs", "https://lovablesubs.com", "tr", SimpleDateFormat("dd MMM yyyy", Locale("tr"))) diff --git a/multisrc/overrides/madara/manga347/src/Manga347.kt b/multisrc/overrides/madara/manga347/src/Manga347.kt new file mode 100644 index 000000000..8868d311d --- /dev/null +++ b/multisrc/overrides/madara/manga347/src/Manga347.kt @@ -0,0 +1,9 @@ +package eu.kanade.tachiyomi.extension.en.manga347 + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class Manga347 : Madara("Manga347", "https://manga347.com", "en", SimpleDateFormat("d MMM, yyyy", Locale.US)) { + override val pageListParseSelector = "li.blocks-gallery-item" +} diff --git a/multisrc/overrides/madara/manga68/src/Manga68.kt b/multisrc/overrides/madara/manga68/src/Manga68.kt new file mode 100644 index 000000000..b7b03fced --- /dev/null +++ b/multisrc/overrides/madara/manga68/src/Manga68.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.en.manga68 + +import eu.kanade.tachiyomi.multisrc.madara.Madara + +class Manga68 : Madara("Manga68", "https://manga68.com", "en") { + override val pageListParseSelector = "div.page-break, div.text-left p" +} diff --git a/multisrc/overrides/madara/mangaaction/src/MangaAction.kt b/multisrc/overrides/madara/mangaaction/src/MangaAction.kt new file mode 100644 index 000000000..e94d7b4f5 --- /dev/null +++ b/multisrc/overrides/madara/mangaaction/src/MangaAction.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.ar.mangaaction + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class MangaAction : Madara("Manga Action", "https://manga-action.com", "ar", SimpleDateFormat("yyyy-MM-dd", Locale("ar"))) diff --git a/multisrc/overrides/madara/mangaarabonline/src/MangaArabOnline.kt b/multisrc/overrides/madara/mangaarabonline/src/MangaArabOnline.kt new file mode 100644 index 000000000..6b05165b0 --- /dev/null +++ b/multisrc/overrides/madara/mangaarabonline/src/MangaArabOnline.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.ar.mangaarabonline + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class MangaArabOnline : Madara("Manga Arab Online مانجا عرب اون لاين", "https://mangaarabonline.com", "ar", SimpleDateFormat("MMM d, yyyy", Locale.forLanguageTag("ar"))) diff --git a/multisrc/overrides/madara/mangaarabteam/src/MangaArabTeam.kt b/multisrc/overrides/madara/mangaarabteam/src/MangaArabTeam.kt new file mode 100644 index 000000000..74b65f1c6 --- /dev/null +++ b/multisrc/overrides/madara/mangaarabteam/src/MangaArabTeam.kt @@ -0,0 +1,14 @@ +package eu.kanade.tachiyomi.extension.ar.mangaarabteam + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.source.model.Page +import okhttp3.Request +import java.text.SimpleDateFormat +import java.util.Locale + +class MangaArabTeam : Madara("مانجا عرب تيم Manga Arab Team", "https://mangaarabteam.com", "ar", SimpleDateFormat("dd MMM، yyyy", Locale.forLanguageTag("ar"))) { + override fun imageRequest(page: Page): Request { + return GET(page.imageUrl!!.replace("http:", "https:")) + } +} diff --git a/multisrc/overrides/madara/mangabaz/src/MangaBaz.kt b/multisrc/overrides/madara/mangabaz/src/MangaBaz.kt new file mode 100644 index 000000000..646581f35 --- /dev/null +++ b/multisrc/overrides/madara/mangabaz/src/MangaBaz.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.tr.mangabaz + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class MangaBaz : Madara("MangaBaz", "https://mangabaz.com", "tr", SimpleDateFormat("dd MMMM yyyy", Locale.forLanguageTag("tr"))) diff --git a/multisrc/overrides/madara/mangaclash/src/MangaClash.kt b/multisrc/overrides/madara/mangaclash/src/MangaClash.kt new file mode 100644 index 000000000..9abe1f951 --- /dev/null +++ b/multisrc/overrides/madara/mangaclash/src/MangaClash.kt @@ -0,0 +1,12 @@ +package eu.kanade.tachiyomi.extension.en.mangaclash + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class MangaClash : Madara( + "Manga Clash", + "https://mangaclash.com", + "en", + dateFormat = SimpleDateFormat("MM/dd/yy", Locale.US) +) diff --git a/multisrc/overrides/madara/mangacrimson/src/MangaCrimson.kt b/multisrc/overrides/madara/mangacrimson/src/MangaCrimson.kt new file mode 100644 index 000000000..f43ba6d46 --- /dev/null +++ b/multisrc/overrides/madara/mangacrimson/src/MangaCrimson.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.tr.mangacrimson + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class MangaCrimson : Madara("Manga Crimson", "https://mangacrimson.com", "tr", SimpleDateFormat("dd MMMM yyyy", Locale("tr"))) diff --git a/multisrc/overrides/madara/mangadods/src/MangaDods.kt b/multisrc/overrides/madara/mangadods/src/MangaDods.kt new file mode 100644 index 000000000..1ae4bcf2c --- /dev/null +++ b/multisrc/overrides/madara/mangadods/src/MangaDods.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.en.mangadods + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class MangaDods : Madara("MangaDods", "https://www.mangadods.com", "en", SimpleDateFormat("yyyy-MM-dd", Locale.US)) diff --git a/multisrc/overrides/madara/mangaeffect/src/MangaEffect.kt b/multisrc/overrides/madara/mangaeffect/src/MangaEffect.kt new file mode 100644 index 000000000..95b2e2dcc --- /dev/null +++ b/multisrc/overrides/madara/mangaeffect/src/MangaEffect.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.en.mangaeffect + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class MangaEffect : Madara("MangaEffect", "https://mangaeffect.com", "en", SimpleDateFormat("dd.MM.yyyy", Locale.US)) diff --git a/multisrc/overrides/madara/mangagreat/src/MangaGreat.kt b/multisrc/overrides/madara/mangagreat/src/MangaGreat.kt new file mode 100644 index 000000000..274cf3703 --- /dev/null +++ b/multisrc/overrides/madara/mangagreat/src/MangaGreat.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.en.mangagreat + +import eu.kanade.tachiyomi.multisrc.madara.Madara + +class MangaGreat : Madara("MangaGreat", "https://mangagreat.com", "en") { + override val pageListParseSelector = "li.blocks-gallery-item" +} diff --git a/multisrc/overrides/madara/mangalek/src/Mangalek.kt b/multisrc/overrides/madara/mangalek/src/Mangalek.kt new file mode 100644 index 000000000..e5493909d --- /dev/null +++ b/multisrc/overrides/madara/mangalek/src/Mangalek.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.ar.mangalek + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class Mangalek : Madara("مانجا ليك", "https://mangalek.com", "ar", SimpleDateFormat("MMMM dd, yyyy", Locale("ar"))) diff --git a/multisrc/overrides/madara/mangaonlineco/src/MangaOnlineCo.kt b/multisrc/overrides/madara/mangaonlineco/src/MangaOnlineCo.kt new file mode 100644 index 000000000..c66dfb6fe --- /dev/null +++ b/multisrc/overrides/madara/mangaonlineco/src/MangaOnlineCo.kt @@ -0,0 +1,11 @@ +package eu.kanade.tachiyomi.extension.th.mangaonlineco + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import eu.kanade.tachiyomi.source.model.SChapter +import okhttp3.Response +import java.text.SimpleDateFormat +import java.util.Locale + +class MangaOnlineCo : Madara("Manga-Online.co", "https://www.manga-online.co", "th", SimpleDateFormat("MMM dd, yyyy", Locale("th"))) { + override fun chapterListParse(response: Response): List = super.chapterListParse(response).reversed() +} diff --git a/multisrc/overrides/madara/mangaphoenix/src/MangaPhoenix.kt b/multisrc/overrides/madara/mangaphoenix/src/MangaPhoenix.kt new file mode 100644 index 000000000..50e5e7f0a --- /dev/null +++ b/multisrc/overrides/madara/mangaphoenix/src/MangaPhoenix.kt @@ -0,0 +1,8 @@ +package eu.kanade.tachiyomi.extension.tr.mangaphoenix + +import eu.kanade.tachiyomi.multisrc.madara.Madara + +class MangaPhoenix : Madara("Manga Diyari", "https://mangadiyari.com", "tr") { + // Formerly "Manga Phoenix" + override val id = 4308007020001642101 +} diff --git a/multisrc/overrides/madara/mangaread/src/MangaRead.kt b/multisrc/overrides/madara/mangaread/src/MangaRead.kt new file mode 100644 index 000000000..d38cba628 --- /dev/null +++ b/multisrc/overrides/madara/mangaread/src/MangaRead.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.en.mangaread + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class MangaRead : Madara("Manga Read", "https://mangaread.co", "en", SimpleDateFormat("yyyy-MM-dd", Locale.US)) diff --git a/multisrc/overrides/madara/mangareadorg/src/MangaReadOrg.kt b/multisrc/overrides/madara/mangareadorg/src/MangaReadOrg.kt new file mode 100644 index 000000000..090a26f3f --- /dev/null +++ b/multisrc/overrides/madara/mangareadorg/src/MangaReadOrg.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.en.mangareadorg + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class MangaReadOrg : Madara("MangaRead.org", "https://www.mangaread.org", "en", SimpleDateFormat("dd.MM.yyy", Locale.US)) diff --git a/multisrc/overrides/madara/mangascantrad/src/MangaScantrad.kt b/multisrc/overrides/madara/mangascantrad/src/MangaScantrad.kt new file mode 100644 index 000000000..b977b80bb --- /dev/null +++ b/multisrc/overrides/madara/mangascantrad/src/MangaScantrad.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.fr.mangascantrad + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class MangaScantrad : Madara("Manga-Scantrad", "https://manga-scantrad.net", "fr", SimpleDateFormat("d MMM yyyy", Locale.FRANCE)) diff --git a/multisrc/overrides/madara/mangaspark/src/MangaSpark.kt b/multisrc/overrides/madara/mangaspark/src/MangaSpark.kt new file mode 100644 index 000000000..8bcff1aef --- /dev/null +++ b/multisrc/overrides/madara/mangaspark/src/MangaSpark.kt @@ -0,0 +1,24 @@ +package eu.kanade.tachiyomi.extension.ar.mangaspark + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import eu.kanade.tachiyomi.source.model.SManga +import org.jsoup.nodes.Element + +class MangaSpark : Madara("MangaSpark", "https://mangaspark.com", "ar") { + override fun popularMangaFromElement(element: Element): SManga { + val manga = SManga.create() + + with(element) { + select(popularMangaUrlSelector).first()?.let { + manga.setUrlWithoutDomain(it.attr("abs:href")) + manga.title = it.ownText() + } + + select("img").first()?.let { + manga.thumbnail_url = imageFromElement(it)?.replace("mangaspark", "mangalek") + } + } + + return manga + } +} diff --git a/multisrc/overrides/madara/mangastarz/src/MangaStarz.kt b/multisrc/overrides/madara/mangastarz/src/MangaStarz.kt new file mode 100644 index 000000000..965ebd230 --- /dev/null +++ b/multisrc/overrides/madara/mangastarz/src/MangaStarz.kt @@ -0,0 +1,24 @@ +package eu.kanade.tachiyomi.extension.ar.mangastarz + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import eu.kanade.tachiyomi.source.model.SManga +import org.jsoup.nodes.Element + +class MangaStarz : Madara("Manga Starz", "https://mangastarz.com", "ar") { + override fun popularMangaFromElement(element: Element): SManga { + val manga = SManga.create() + + with(element) { + select(popularMangaUrlSelector).first()?.let { + manga.setUrlWithoutDomain(it.attr("abs:href")) + manga.title = it.ownText() + } + + select("img").first()?.let { + manga.thumbnail_url = imageFromElement(it)?.replace("mangastarz", "mangalek") + } + } + + return manga + } +} diff --git a/multisrc/overrides/madara/mangasy/src/MangaSY.kt b/multisrc/overrides/madara/mangasy/src/MangaSY.kt new file mode 100644 index 000000000..d9ae61981 --- /dev/null +++ b/multisrc/overrides/madara/mangasy/src/MangaSY.kt @@ -0,0 +1,12 @@ +package eu.kanade.tachiyomi.extension.en.mangasy + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import eu.kanade.tachiyomi.source.model.Page +import okhttp3.CacheControl +import okhttp3.Request + +class MangaSY : Madara("Manga SY", "https://www.mangasy.com", "en") { + override fun imageRequest(page: Page): Request = super.imageRequest(page).newBuilder() + .cacheControl(CacheControl.FORCE_NETWORK) + .build() +} diff --git a/multisrc/overrides/madara/mangateca/src/MangaTeca.kt b/multisrc/overrides/madara/mangateca/src/MangaTeca.kt new file mode 100644 index 000000000..09ca07d91 --- /dev/null +++ b/multisrc/overrides/madara/mangateca/src/MangaTeca.kt @@ -0,0 +1,35 @@ +package eu.kanade.tachiyomi.extension.pt.mangateca + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import eu.kanade.tachiyomi.source.model.SChapter +import okhttp3.Headers +import org.jsoup.nodes.Element +import java.text.SimpleDateFormat +import java.util.Locale + +class MangaTeca : Madara( + "MangaTeca", + "https://www.mangateca.com", + "pt-BR", + SimpleDateFormat("MMMM dd, yyyy", Locale("pt", "BR")) +) { + override fun headersBuilder(): Headers.Builder = Headers.Builder() + .add("User-Agent", USER_AGENT) + .add("Referer", baseUrl) + .add("Origin", baseUrl) + + override fun chapterFromElement(element: Element): SChapter { + val parsedChapter = super.chapterFromElement(element) + + parsedChapter.date_upload = element.select("img").firstOrNull()?.attr("alt") + ?.let { parseChapterDate(it) } + ?: parseChapterDate(element.select("span.chapter-release-date i").firstOrNull()?.text()) + + return parsedChapter + } + + companion object { + private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " + + "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36" + } +} diff --git a/multisrc/overrides/madara/mangayosh/src/MangaYosh.kt b/multisrc/overrides/madara/mangayosh/src/MangaYosh.kt new file mode 100644 index 000000000..c934440eb --- /dev/null +++ b/multisrc/overrides/madara/mangayosh/src/MangaYosh.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.id.mangayosh + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class MangaYosh : Madara("MangaYosh", "https://mangayosh.xyz", "id", SimpleDateFormat("dd MMM yyyy", Locale.US)) diff --git a/multisrc/overrides/madara/mangazukiclub/src/MangazukiClubFactory.kt b/multisrc/overrides/madara/mangazukiclub/src/MangazukiClubFactory.kt new file mode 100644 index 000000000..6507f09b6 --- /dev/null +++ b/multisrc/overrides/madara/mangazukiclub/src/MangazukiClubFactory.kt @@ -0,0 +1,14 @@ +package eu.kanade.tachiyomi.extension.all.mangazukiclub + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import eu.kanade.tachiyomi.source.Source +import eu.kanade.tachiyomi.source.SourceFactory + +class MangazukiClubFactory : SourceFactory { + override fun createSources(): List = listOf( + MangazukiClubJP(), + MangazukiClubKO(), + ) +} +class MangazukiClubJP : Madara("Mangazuki.club", "https://mangazuki.club", "ja") +class MangazukiClubKO : Madara("Mangazuki.club", "https://mangazuki.club", "ko") diff --git a/multisrc/overrides/madara/manhuabox/src/ManhuaBox.kt b/multisrc/overrides/madara/manhuabox/src/ManhuaBox.kt new file mode 100644 index 000000000..f0bec66ef --- /dev/null +++ b/multisrc/overrides/madara/manhuabox/src/ManhuaBox.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.en.manhuabox + +import eu.kanade.tachiyomi.multisrc.madara.Madara + +class ManhuaBox : Madara("ManhuaBox", "https://manhuabox.net", "en") { + override val pageListParseSelector = "div.page-break, div.text-left p img" +} diff --git a/multisrc/overrides/madara/manhuafast/src/ManhuaFast.kt b/multisrc/overrides/madara/manhuafast/src/ManhuaFast.kt new file mode 100644 index 000000000..9312dea6a --- /dev/null +++ b/multisrc/overrides/madara/manhuafast/src/ManhuaFast.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.en.manhuafast + +import eu.kanade.tachiyomi.multisrc.madara.Madara + +class ManhuaFast : Madara("ManhuaFast", "https://manhuafast.com", "en") { + override val pageListParseSelector = "li.blocks-gallery-item" +} diff --git a/multisrc/overrides/madara/manhuaplus/src/ManhuaPlus.kt b/multisrc/overrides/madara/manhuaplus/src/ManhuaPlus.kt new file mode 100644 index 000000000..64a7795c0 --- /dev/null +++ b/multisrc/overrides/madara/manhuaplus/src/ManhuaPlus.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.en.manhuaplus + +import eu.kanade.tachiyomi.multisrc.madara.Madara + +class ManhuaPlus : Madara("Manhua Plus", "https://manhuaplus.com", "en") { + override val pageListParseSelector = "li.blocks-gallery-item" +} diff --git a/multisrc/overrides/madara/manhuaus/src/ManhuaUS.kt b/multisrc/overrides/madara/manhuaus/src/ManhuaUS.kt new file mode 100644 index 000000000..5af646230 --- /dev/null +++ b/multisrc/overrides/madara/manhuaus/src/ManhuaUS.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.en.manhuaus + +import eu.kanade.tachiyomi.multisrc.madara.Madara + +class ManhuaUS : Madara("ManhuaUS", "https://manhuaus.com", "en") { + override val pageListParseSelector = "li.blocks-gallery-item" +} diff --git a/multisrc/overrides/madara/martialscans/src/MartialScans.kt b/multisrc/overrides/madara/martialscans/src/MartialScans.kt new file mode 100644 index 000000000..7bd1b121b --- /dev/null +++ b/multisrc/overrides/madara/martialscans/src/MartialScans.kt @@ -0,0 +1,26 @@ +package eu.kanade.tachiyomi.extension.en.martialscans + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import eu.kanade.tachiyomi.source.model.SManga +import org.jsoup.nodes.Element + +class MartialScans : Madara("Martial Scans", "https://martialscans.com", "en") { + override fun popularMangaFromElement(element: Element): SManga { + val manga = SManga.create() + + with(element) { + select(popularMangaUrlSelector).last()?.let { + manga.setUrlWithoutDomain(it.attr("href")) + manga.title = it.ownText() + } + + select("img").last()?.let { + manga.thumbnail_url = imageFromElement(it) + } + } + + return manga + } + + override fun searchMangaFromElement(element: Element): SManga = popularMangaFromElement(element) +} diff --git a/multisrc/overrides/madara/milftoon/src/Milftoon.kt b/multisrc/overrides/madara/milftoon/src/Milftoon.kt new file mode 100644 index 000000000..8c9aee4a0 --- /dev/null +++ b/multisrc/overrides/madara/milftoon/src/Milftoon.kt @@ -0,0 +1,10 @@ +package eu.kanade.tachiyomi.extension.en.milftoon + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import eu.kanade.tachiyomi.network.GET +import okhttp3.Request + +class Milftoon : Madara("Milftoon", "https://milftoon.xxx", "en") { + override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/page/$page/?m_orderby=views", headers) + override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/page/$page/?m_orderby=latest", headers) +} diff --git a/multisrc/overrides/madara/mixedmanga/src/MixedManga.kt b/multisrc/overrides/madara/mixedmanga/src/MixedManga.kt new file mode 100644 index 000000000..13c9f8934 --- /dev/null +++ b/multisrc/overrides/madara/mixedmanga/src/MixedManga.kt @@ -0,0 +1,10 @@ +package eu.kanade.tachiyomi.extension.en.mixedmanga + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import okhttp3.Headers +import java.text.SimpleDateFormat +import java.util.Locale + +class MixedManga : Madara("Mixed Manga", "https://mixedmanga.com", "en", SimpleDateFormat("d MMM yyyy", Locale.US)) { + override fun headersBuilder(): Headers.Builder = super.headersBuilder().add("Referer", baseUrl) +} diff --git a/multisrc/overrides/madara/mundowuxia/src/MundoWuxia.kt b/multisrc/overrides/madara/mundowuxia/src/MundoWuxia.kt new file mode 100644 index 000000000..692291bb9 --- /dev/null +++ b/multisrc/overrides/madara/mundowuxia/src/MundoWuxia.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.es.mundowuxia + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class MundoWuxia : Madara("Mundo Wuxia", "https://mundowuxia.com", "es", SimpleDateFormat("MMMM dd, yyyy", Locale("es"))) diff --git a/multisrc/overrides/madara/mysticalmerries/src/MysticalMerries.kt b/multisrc/overrides/madara/mysticalmerries/src/MysticalMerries.kt new file mode 100644 index 000000000..1d2dd5333 --- /dev/null +++ b/multisrc/overrides/madara/mysticalmerries/src/MysticalMerries.kt @@ -0,0 +1,9 @@ +package eu.kanade.tachiyomi.extension.en.mysticalmerries + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import eu.kanade.tachiyomi.network.GET + +class MysticalMerries : Madara("Mystical Merries", "https://mysticalmerries.com", "en") { + override fun popularMangaRequest(page: Int) = GET("$baseUrl/genre/manhwa/page/$page/?m_orderby=trending", headers) + override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/genre/manhwa/page/$page/?m_orderby=latest", headers) +} diff --git a/multisrc/overrides/madara/nazarickscans/src/NazarickScans.kt b/multisrc/overrides/madara/nazarickscans/src/NazarickScans.kt new file mode 100644 index 000000000..ee913c34d --- /dev/null +++ b/multisrc/overrides/madara/nazarickscans/src/NazarickScans.kt @@ -0,0 +1,11 @@ +package eu.kanade.tachiyomi.extension.en.nazarickscans + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import eu.kanade.tachiyomi.network.GET + +class NazarickScans : Madara("Nazarick Scans", "https://nazarickscans.com", "en") { + override fun popularMangaRequest(page: Int) = GET("$baseUrl/manga/page/$page/?m_orderby=trending", headers) + override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/manga/page/$page/?m_orderby=trending", headers) + override fun popularMangaNextPageSelector(): String? = null + override fun latestUpdatesNextPageSelector(): String? = null +} diff --git a/multisrc/overrides/madara/neatmanga/src/NeatManga.kt b/multisrc/overrides/madara/neatmanga/src/NeatManga.kt new file mode 100644 index 000000000..aa9d7f20b --- /dev/null +++ b/multisrc/overrides/madara/neatmanga/src/NeatManga.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.en.neatmanga + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class NeatManga : Madara("NeatManga", "https://neatmanga.com", "en", SimpleDateFormat("dd MMM yyyy", Locale.US)) diff --git a/multisrc/overrides/madara/nekobreaker/src/NekoBreaker.kt b/multisrc/overrides/madara/nekobreaker/src/NekoBreaker.kt new file mode 100644 index 000000000..2b7a781f2 --- /dev/null +++ b/multisrc/overrides/madara/nekobreaker/src/NekoBreaker.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.pt.nekobreaker + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class NekoBreaker : Madara("NekoBreaker", "https://nekobreaker.com", "pt-BR", SimpleDateFormat("MMMM dd, yyyy", Locale("pt"))) diff --git a/multisrc/overrides/madara/neoxscanlator/src/NeoxScanlator.kt b/multisrc/overrides/madara/neoxscanlator/src/NeoxScanlator.kt new file mode 100644 index 000000000..0ae0957fb --- /dev/null +++ b/multisrc/overrides/madara/neoxscanlator/src/NeoxScanlator.kt @@ -0,0 +1,34 @@ +package eu.kanade.tachiyomi.extension.pt.neoxscanlator + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import eu.kanade.tachiyomi.source.model.FilterList +import okhttp3.Headers +import okhttp3.OkHttpClient +import java.text.SimpleDateFormat +import java.util.Locale +import java.util.concurrent.TimeUnit + +class NeoxScanlator : Madara( + "Neox Scanlator", + "https://neoxscans.com", + "pt-BR", + SimpleDateFormat("dd/MM/yyyy", Locale("pt", "BR")) +) { + override val client: OkHttpClient = network.cloudflareClient.newBuilder() + .connectTimeout(1, TimeUnit.MINUTES) + .readTimeout(1, TimeUnit.MINUTES) + .build() + + override fun headersBuilder(): Headers.Builder = Headers.Builder() + .add("User-Agent", USER_AGENT) + .add("Referer", baseUrl) + .add("Origin", baseUrl) + + // Only status and order by filter work. + override fun getFilterList(): FilterList = FilterList(super.getFilterList().slice(3..4)) + + companion object { + private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " + + "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36" + } +} diff --git a/multisrc/overrides/madara/nightcomic/src/NightComic.kt b/multisrc/overrides/madara/nightcomic/src/NightComic.kt new file mode 100644 index 000000000..14d219fb5 --- /dev/null +++ b/multisrc/overrides/madara/nightcomic/src/NightComic.kt @@ -0,0 +1,11 @@ +package eu.kanade.tachiyomi.extension.en.nightcomic + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import okhttp3.Headers + +class NightComic : Madara("Night Comic", "https://www.nightcomic.com", "en") { + override val formHeaders: Headers = headersBuilder() + .add("Content-Type", "application/x-www-form-urlencoded") + .add("X-MOD-SBB-CTYPE", "xhr") + .build() +} diff --git a/multisrc/overrides/madara/nijitranslations/src/NijiTranslations.kt b/multisrc/overrides/madara/nijitranslations/src/NijiTranslations.kt new file mode 100644 index 000000000..bec40b814 --- /dev/null +++ b/multisrc/overrides/madara/nijitranslations/src/NijiTranslations.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.ar.nijitranslations + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class NijiTranslations : Madara("Niji Translations", "https://niji-translations.com", "ar", SimpleDateFormat("MMMM dd, yyyy", Locale("ar"))) diff --git a/multisrc/overrides/madara/offscan/src/OffScan.kt b/multisrc/overrides/madara/offscan/src/OffScan.kt new file mode 100644 index 000000000..7ea291170 --- /dev/null +++ b/multisrc/overrides/madara/offscan/src/OffScan.kt @@ -0,0 +1,12 @@ +package eu.kanade.tachiyomi.extension.pt.offscan + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class OffScan : Madara( + "Off Scan", + "https://offscan.top", + "pt-BR", + dateFormat = SimpleDateFormat("dd/MM/yy", Locale.US) +) diff --git a/multisrc/overrides/madara/pmscans/src/PMScans.kt b/multisrc/overrides/madara/pmscans/src/PMScans.kt new file mode 100644 index 000000000..4622d7e89 --- /dev/null +++ b/multisrc/overrides/madara/pmscans/src/PMScans.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.en.pmscans + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class PMScans : Madara("PMScans", "https://www.pmscans.com", "en", SimpleDateFormat("MMM-dd-yy", Locale.US)) diff --git a/multisrc/overrides/madara/pojokmanga/src/PojokManga.kt b/multisrc/overrides/madara/pojokmanga/src/PojokManga.kt new file mode 100644 index 000000000..0d007f5b1 --- /dev/null +++ b/multisrc/overrides/madara/pojokmanga/src/PojokManga.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.id.pojokmanga + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class PojokManga : Madara("Pojok Manga", "https://pojokmanga.com", "id", SimpleDateFormat("MMM dd, yyyy", Locale.US)) diff --git a/multisrc/overrides/madara/projetoscanlator/src/ProjetoScanlator.kt b/multisrc/overrides/madara/projetoscanlator/src/ProjetoScanlator.kt new file mode 100644 index 000000000..8bdc9301b --- /dev/null +++ b/multisrc/overrides/madara/projetoscanlator/src/ProjetoScanlator.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.pt.projetoscanlator + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class ProjetoScanlator : Madara("Projeto Scanlator", "https://projetoscanlator.com", "pt-BR", SimpleDateFormat("dd/MM/yyyy", Locale("pt", "BR"))) diff --git a/multisrc/overrides/madara/queensmanga/src/QueensManga.kt b/multisrc/overrides/madara/queensmanga/src/QueensManga.kt new file mode 100644 index 000000000..12bb8fe1a --- /dev/null +++ b/multisrc/overrides/madara/queensmanga/src/QueensManga.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.ar.queensmanga + +import eu.kanade.tachiyomi.multisrc.madara.Madara + +class QueensManga : Madara("QueensManga ملكات المانجا", "https://queensmanga.com", "ar") { + override fun chapterListSelector(): String = "div.listing-chapters_wrap a" +} diff --git a/multisrc/overrides/madara/randomtranslations/src/RandomTranslations.kt b/multisrc/overrides/madara/randomtranslations/src/RandomTranslations.kt new file mode 100644 index 000000000..b1eaa4a5a --- /dev/null +++ b/multisrc/overrides/madara/randomtranslations/src/RandomTranslations.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.en.randomtranslations + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class RandomTranslations : Madara("Random Translations", "https://randomtranslations.com", "en", SimpleDateFormat("dd/MM/yyyy", Locale.US)) diff --git a/multisrc/overrides/madara/rawmangas/src/RawMangas.kt b/multisrc/overrides/madara/rawmangas/src/RawMangas.kt new file mode 100644 index 000000000..b3714d74c --- /dev/null +++ b/multisrc/overrides/madara/rawmangas/src/RawMangas.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.ja.rawmangas + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class RawMangas : Madara("Raw Mangas", "https://rawmangas.net", "ja", SimpleDateFormat("MMMM dd, yyyy", Locale.US)) diff --git a/multisrc/overrides/madara/readmanhua/src/ReadManhua.kt b/multisrc/overrides/madara/readmanhua/src/ReadManhua.kt new file mode 100644 index 000000000..cc23aaeab --- /dev/null +++ b/multisrc/overrides/madara/readmanhua/src/ReadManhua.kt @@ -0,0 +1,12 @@ +package eu.kanade.tachiyomi.extension.en.readmanhua + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class ReadManhua : Madara( + "ReadManhua", + "https://readmanhua.net", + "en", + dateFormat = SimpleDateFormat("dd MMM yy", Locale.US) +) diff --git a/multisrc/overrides/madara/renascans/src/RenaScans.kt b/multisrc/overrides/madara/renascans/src/RenaScans.kt new file mode 100644 index 000000000..7c8046ceb --- /dev/null +++ b/multisrc/overrides/madara/renascans/src/RenaScans.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.en.renascans + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class RenaScans : Madara("Renascence Scans (Renascans)", "https://new.renascans.com", "en", SimpleDateFormat("dd/MM/yyyy", Locale.US)) diff --git a/multisrc/overrides/madara/ruyamanga/src/RuyaManga.kt b/multisrc/overrides/madara/ruyamanga/src/RuyaManga.kt new file mode 100644 index 000000000..2fe40b66d --- /dev/null +++ b/multisrc/overrides/madara/ruyamanga/src/RuyaManga.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.tr.ruyamanga + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class RuyaManga : Madara("Rüya Manga", "https://www.ruyamanga.com", "tr", SimpleDateFormat("dd MMMM yyyy", Locale.forLanguageTag("tr"))) diff --git a/multisrc/overrides/madara/shoujohearts/src/ShoujoHearts.kt b/multisrc/overrides/madara/shoujohearts/src/ShoujoHearts.kt new file mode 100644 index 000000000..48c199a07 --- /dev/null +++ b/multisrc/overrides/madara/shoujohearts/src/ShoujoHearts.kt @@ -0,0 +1,16 @@ +package eu.kanade.tachiyomi.extension.en.shoujohearts + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import eu.kanade.tachiyomi.network.POST +import okhttp3.CacheControl +import okhttp3.Request + +class ShoujoHearts : Madara("ShoujoHearts", "http://shoujohearts.com", "en") { + override fun popularMangaRequest(page: Int): Request = + POST("$baseUrl/reader/wp-admin/admin-ajax.php", formHeaders, formBuilder(page, true).build(), CacheControl.FORCE_NETWORK) + + override fun latestUpdatesRequest(page: Int): Request = + POST("$baseUrl/reader/wp-admin/admin-ajax.php", formHeaders, formBuilder(page, false).build(), CacheControl.FORCE_NETWORK) + + override fun searchPage(page: Int): String = "reader/page/$page/" +} diff --git a/multisrc/overrides/madara/sixiangscans/src/SiXiangScans.kt b/multisrc/overrides/madara/sixiangscans/src/SiXiangScans.kt new file mode 100644 index 000000000..c846cbda6 --- /dev/null +++ b/multisrc/overrides/madara/sixiangscans/src/SiXiangScans.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.en.sixiangscans + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class SiXiangScans : Madara("SiXiang Scans", "http://www.sixiangscans.com", "en", SimpleDateFormat("MMMM dd, yyyy", Locale.US)) diff --git a/multisrc/overrides/madara/siyahmelek/src/Siyahmelek.kt b/multisrc/overrides/madara/siyahmelek/src/Siyahmelek.kt new file mode 100644 index 000000000..726606f9f --- /dev/null +++ b/multisrc/overrides/madara/siyahmelek/src/Siyahmelek.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.tr.siyahmelek + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class Siyahmelek : Madara("Siyahmelek", "https://siyahmelek.com", "tr", SimpleDateFormat("dd MMM yyyy", Locale("tr"))) diff --git a/multisrc/overrides/madara/soloscanlation/src/SoloScanlation.kt b/multisrc/overrides/madara/soloscanlation/src/SoloScanlation.kt new file mode 100644 index 000000000..ec89d8d2b --- /dev/null +++ b/multisrc/overrides/madara/soloscanlation/src/SoloScanlation.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.en.soloscanlation + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class SoloScanlation : Madara("SoloScanlation", "https://soloscanlation.site", "en", SimpleDateFormat("MMMM dd, yyyy", Locale.US)) diff --git a/multisrc/overrides/madara/spookyscanlations/src/SpookyScanlations.kt b/multisrc/overrides/madara/spookyscanlations/src/SpookyScanlations.kt new file mode 100644 index 000000000..3f71ca77b --- /dev/null +++ b/multisrc/overrides/madara/spookyscanlations/src/SpookyScanlations.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.es.spookyscanlations + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class SpookyScanlations : Madara("Spooky Scanlations", "https://spookyscanlations.xyz", "es", SimpleDateFormat("MMMM dd, yyyy", Locale("es"))) diff --git a/multisrc/overrides/madara/stagecomics/src/StageComics.kt b/multisrc/overrides/madara/stagecomics/src/StageComics.kt new file mode 100644 index 000000000..0b9890b2c --- /dev/null +++ b/multisrc/overrides/madara/stagecomics/src/StageComics.kt @@ -0,0 +1,19 @@ +package eu.kanade.tachiyomi.extension.pt.stagecomics + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import eu.kanade.tachiyomi.source.model.SChapter +import org.jsoup.nodes.Element +import java.text.SimpleDateFormat +import java.util.Locale + +class StageComics : Madara("StageComics", "https://stagecomics.com", "pt-BR", SimpleDateFormat("MMMM dd, yyyy", Locale("pt"))) { + override fun chapterFromElement(element: Element): SChapter { + val parsedChapter = super.chapterFromElement(element) + + parsedChapter.date_upload = element.select("img").firstOrNull()?.attr("alt") + ?.let { parseChapterDate(it) } + ?: parseChapterDate(element.select("span.chapter-release-date i").firstOrNull()?.text()) + + return parsedChapter + } +} diff --git a/multisrc/overrides/madara/threesixtyfivemanga/src/ThreeSixtyFiveManga.kt b/multisrc/overrides/madara/threesixtyfivemanga/src/ThreeSixtyFiveManga.kt new file mode 100644 index 000000000..0d375b494 --- /dev/null +++ b/multisrc/overrides/madara/threesixtyfivemanga/src/ThreeSixtyFiveManga.kt @@ -0,0 +1,10 @@ +package eu.kanade.tachiyomi.extension.en.threesixtyfivemanga + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import eu.kanade.tachiyomi.network.GET +import okhttp3.Request + +class ThreeSixtyFiveManga : Madara("365Manga", "https://365manga.com", "en") { + override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/manga/page/$page/?m_orderby=views", headers) + override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/manga/page/$page/?m_orderby=latest", headers) +} diff --git a/multisrc/overrides/madara/toongod/src/ToonGod.kt b/multisrc/overrides/madara/toongod/src/ToonGod.kt new file mode 100644 index 000000000..a3f78d090 --- /dev/null +++ b/multisrc/overrides/madara/toongod/src/ToonGod.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.en.toongod + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class ToonGod : Madara("ToonGod", "https://www.toongod.com", "en", SimpleDateFormat("dd MMM yyyy", Locale.US)) diff --git a/multisrc/overrides/madara/toonily/src/Toonily.kt b/multisrc/overrides/madara/toonily/src/Toonily.kt new file mode 100644 index 000000000..28ee3d605 --- /dev/null +++ b/multisrc/overrides/madara/toonily/src/Toonily.kt @@ -0,0 +1,37 @@ +package eu.kanade.tachiyomi.extension.en.toonily + +import eu.kanade.tachiyomi.multisrc.madara.Madara + +class Toonily : Madara("Toonily", "https://toonily.com", "en") { + override fun getGenreList(): List = listOf( + Genre("Action", "action-webtoon"), + Genre("Adult", "adult-webtoon"), + Genre("Adventure", "adventure-webtoon"), + Genre("Comedy", "comedy-webtoon"), + Genre("Drama", "drama-webtoon"), + Genre("Fantasy", "fantasy-webtoon"), + Genre("Gender Bender", "gender-bender"), + Genre("Gossip", "gossip"), + Genre("Harem", "harem-webtoon"), + Genre("Historical", "webtoon-historical"), + Genre("Horror", "horror-webtoon"), + Genre("Josei", "josei-manga"), + Genre("Mature", "mature-webtoon"), + Genre("Mystery", "mystery-webtoon"), + Genre("NTR", "ntr-webtoon"), + Genre("Psychological", "psychological-webtoon"), + Genre("Romance", "romance-webtoon"), + Genre("School life", "school-life-webtoon"), + Genre("Sci-Fi", "scifi-webtoon"), + Genre("Seinen", "seinen-webtoon"), + Genre("Shoujo", "shoujo"), + Genre("Shounen", "shounen-webtoon"), + Genre("Slice of Life", "sliceoflife-webtoon"), + Genre("Supernatural", "supernatural-webtoon"), + Genre("Thriller", "thriller-webtoon"), + Genre("Tragedy", "tragedy"), + Genre("Vanilla", "vanilla-webtoon"), + Genre("Yaoi", "yaoi-webtoon"), + Genre("Yuri", "yuri-webtoon") + ) +} diff --git a/multisrc/overrides/madara/toonpoint/src/ToonPoint.kt b/multisrc/overrides/madara/toonpoint/src/ToonPoint.kt new file mode 100644 index 000000000..d2b6adf42 --- /dev/null +++ b/multisrc/overrides/madara/toonpoint/src/ToonPoint.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.en.toonpoint + +import eu.kanade.tachiyomi.multisrc.madara.Madara + +class ToonPoint : Madara("ToonPoint", "https://toonpoint.com", "en") { + override val userAgentRandomizer = "" +} diff --git a/multisrc/overrides/madara/topmanhua/src/TopManhua.kt b/multisrc/overrides/madara/topmanhua/src/TopManhua.kt new file mode 100644 index 000000000..a266577da --- /dev/null +++ b/multisrc/overrides/madara/topmanhua/src/TopManhua.kt @@ -0,0 +1,10 @@ +package eu.kanade.tachiyomi.extension.en.topmanhua + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import okhttp3.Headers +import java.text.SimpleDateFormat +import java.util.Locale + +class TopManhua : Madara("Top Manhua", "https://topmanhua.com", "en", SimpleDateFormat("MM/dd/yy", Locale.US)) { + override fun headersBuilder(): Headers.Builder = super.headersBuilder().add("Referer", baseUrl) +} diff --git a/multisrc/overrides/madara/truyentranhaudiocom/src/TruyenTranhAudioCom.kt b/multisrc/overrides/madara/truyentranhaudiocom/src/TruyenTranhAudioCom.kt new file mode 100644 index 000000000..97e0962fc --- /dev/null +++ b/multisrc/overrides/madara/truyentranhaudiocom/src/TruyenTranhAudioCom.kt @@ -0,0 +1,26 @@ +package eu.kanade.tachiyomi.extension.vi.truyentranhaudiocom + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.source.model.Page +import eu.kanade.tachiyomi.source.model.SManga +import okhttp3.Request +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import java.text.SimpleDateFormat +import java.util.Locale + +class TruyenTranhAudioCom : Madara("TruyenTranhAudio.com", "https://truyentranhaudio.com", "vi", SimpleDateFormat("dd/MM/yyyy", Locale.getDefault())) { + override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/page/$page?s&post_type=wp-manga&m_orderby=views", headers) + override fun popularMangaSelector() = searchMangaSelector() + override fun popularMangaFromElement(element: Element): SManga = searchMangaFromElement(element) + override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/page/$page?s&post_type=wp-manga&m_orderby=latest", headers) + override fun latestUpdatesSelector() = searchMangaSelector() + override fun latestUpdatesFromElement(element: Element): SManga = searchMangaFromElement(element) + override fun pageListParse(document: Document): List { + return document.select("div.reading-content img").map { it.attr("abs:src") } + .filterNot { it.isNullOrEmpty() } + .distinct() + .mapIndexed { i, url -> Page(i, "", url) } + } +} diff --git a/multisrc/overrides/madara/truyentranhaudioonline/src/TruyenTranhAudioOnline.kt b/multisrc/overrides/madara/truyentranhaudioonline/src/TruyenTranhAudioOnline.kt new file mode 100644 index 000000000..e84a39968 --- /dev/null +++ b/multisrc/overrides/madara/truyentranhaudioonline/src/TruyenTranhAudioOnline.kt @@ -0,0 +1,21 @@ +package eu.kanade.tachiyomi.extension.vi.truyentranhaudioonline + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import eu.kanade.tachiyomi.source.model.Page +import okhttp3.Headers +import org.jsoup.nodes.Document +import java.text.SimpleDateFormat +import java.util.Locale + +class TruyenTranhAudioOnline : Madara("TruyenTranhAudio.online", "https://truyentranhaudio.online", "vi", SimpleDateFormat("dd/MM/yyyy", Locale.getDefault())) { + override val formHeaders: Headers = headersBuilder() + .add("Content-Type", "application/x-www-form-urlencoded") + .build() + + override fun pageListParse(document: Document): List { + return document.select("div.reading-content img").map { it.attr("abs:src") } + .filterNot { it.isNullOrEmpty() } + .distinct() + .mapIndexed { i, url -> Page(i, "", url) } + } +} diff --git a/multisrc/overrides/madara/tsubakinoscan/src/TsubakiNoScan.kt b/multisrc/overrides/madara/tsubakinoscan/src/TsubakiNoScan.kt new file mode 100644 index 000000000..9292601e3 --- /dev/null +++ b/multisrc/overrides/madara/tsubakinoscan/src/TsubakiNoScan.kt @@ -0,0 +1,12 @@ +package eu.kanade.tachiyomi.extension.fr.tsubakinoscan + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class TsubakiNoScan : Madara( + "Tsubaki No Scan", + "https://tsubakinoscan.com", + "fr", + dateFormat = SimpleDateFormat("dd/MM/yy", Locale.US) +) diff --git a/multisrc/overrides/madara/turkcemanga/src/TurkceManga.kt b/multisrc/overrides/madara/turkcemanga/src/TurkceManga.kt new file mode 100644 index 000000000..13f3c9c2a --- /dev/null +++ b/multisrc/overrides/madara/turkcemanga/src/TurkceManga.kt @@ -0,0 +1,30 @@ +package eu.kanade.tachiyomi.extension.tr.turkcemanga + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.POST +import eu.kanade.tachiyomi.source.Source +import eu.kanade.tachiyomi.source.SourceFactory +import eu.kanade.tachiyomi.source.model.FilterList +import eu.kanade.tachiyomi.source.model.Page +import eu.kanade.tachiyomi.source.model.SChapter +import eu.kanade.tachiyomi.source.model.SManga +import okhttp3.CacheControl +import okhttp3.Headers +import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.Response +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import java.text.SimpleDateFormat +import java.util.Locale +import java.util.concurrent.TimeUnit + +class TurkceManga : Madara("Türkçe Manga", "https://turkcemanga.com", "tr") { + override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/page/$page/?s&post_type=wp-manga&m_orderby=views", headers) + override fun popularMangaSelector() = searchMangaSelector() + override fun popularMangaFromElement(element: Element): SManga = searchMangaFromElement(element) + override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/page/$page/?s&post_type=wp-manga&m_orderby=latest", headers) + override fun latestUpdatesSelector() = searchMangaSelector() + override fun latestUpdatesFromElement(element: Element): SManga = searchMangaFromElement(element) +} diff --git a/multisrc/overrides/madara/uyuyanbalik/src/UyuyanBalik.kt b/multisrc/overrides/madara/uyuyanbalik/src/UyuyanBalik.kt new file mode 100644 index 000000000..c97685fdd --- /dev/null +++ b/multisrc/overrides/madara/uyuyanbalik/src/UyuyanBalik.kt @@ -0,0 +1,8 @@ +package eu.kanade.tachiyomi.extension.tr.uyuyanbalik + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class UyuyanBalik : Madara("Uyuyan Balik", "https://uyuyanbalik.com/", "tr", SimpleDateFormat("dd MMMM yyyy", Locale.US)) + diff --git a/multisrc/overrides/madara/voidscans/src/Voidscans.kt b/multisrc/overrides/madara/voidscans/src/Voidscans.kt new file mode 100644 index 000000000..e5e4ae330 --- /dev/null +++ b/multisrc/overrides/madara/voidscans/src/Voidscans.kt @@ -0,0 +1,9 @@ +package eu.kanade.tachiyomi.extension.en.voidscans + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.source.model.FilterList + +class Voidscans : Madara("Void Scans", "https://voidscans.com", "en") { + override fun searchMangaRequest(page: Int, query: String, filters: FilterList) = GET("$baseUrl/?s=$query&post_type=wp-manga") +} diff --git a/multisrc/overrides/madara/warqueenscan/src/WarQueenScan.kt b/multisrc/overrides/madara/warqueenscan/src/WarQueenScan.kt new file mode 100644 index 000000000..e0981dbc9 --- /dev/null +++ b/multisrc/overrides/madara/warqueenscan/src/WarQueenScan.kt @@ -0,0 +1,8 @@ +package eu.kanade.tachiyomi.extension.pt.warqueenscan + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class WarQueenScan : Madara("War Queen Scan", "https://wqscan.com", "pt-BR", SimpleDateFormat("dd/MM/yyyy", Locale.US)) + diff --git a/multisrc/overrides/madara/webtoonxyz/src/WebtoonXYZ.kt b/multisrc/overrides/madara/webtoonxyz/src/WebtoonXYZ.kt new file mode 100644 index 000000000..5832fbe8a --- /dev/null +++ b/multisrc/overrides/madara/webtoonxyz/src/WebtoonXYZ.kt @@ -0,0 +1,11 @@ +package eu.kanade.tachiyomi.extension.en.webtoonxyz + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import eu.kanade.tachiyomi.network.GET +import okhttp3.Request + +class WebtoonXYZ : Madara("WebtoonXYZ", "https://www.webtoon.xyz", "en") { + private fun pagePath(page: Int) = if (page > 1) "page/$page/" else "" + override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/webtoons/${pagePath(page)}?m_orderby=views", headers) + override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/webtoons/${pagePath(page)}?m_orderby=latest", headers) +} diff --git a/multisrc/overrides/madara/wescans/src/WeScans.kt b/multisrc/overrides/madara/wescans/src/WeScans.kt new file mode 100644 index 000000000..eafdfc340 --- /dev/null +++ b/multisrc/overrides/madara/wescans/src/WeScans.kt @@ -0,0 +1,15 @@ +package eu.kanade.tachiyomi.extension.en.wescans + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.source.model.FilterList +import okhttp3.Request + +class WeScans : Madara("WeScans", "https://wescans.xyz", "en") { + override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/manhua/manga/?m_orderby=views", headers) + override fun popularMangaNextPageSelector(): String? = null + override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/manhua/manga/?m_orderby=latest", headers) + override fun searchMangaRequest(page: Int, query: String, filters: FilterList) = GET("$baseUrl/manhua/?s=$query&post_type=wp-manga") + override fun searchMangaNextPageSelector(): String? = null + override fun getFilterList(): FilterList = FilterList() +} diff --git a/multisrc/overrides/madara/worldromancetranslation/src/WorldRomanceTranslation.kt b/multisrc/overrides/madara/worldromancetranslation/src/WorldRomanceTranslation.kt new file mode 100644 index 000000000..fbf305a6e --- /dev/null +++ b/multisrc/overrides/madara/worldromancetranslation/src/WorldRomanceTranslation.kt @@ -0,0 +1,8 @@ +package eu.kanade.tachiyomi.extension.id.worldromancetranslation + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class WorldRomanceTranslation : Madara("World Romance Translation", "https://wrt.my.id/", "id", SimpleDateFormat("dd MMMM yyyy", Locale("id"))) + diff --git a/multisrc/overrides/madara/wuxiaworld/src/WuxiaWorld.kt b/multisrc/overrides/madara/wuxiaworld/src/WuxiaWorld.kt new file mode 100644 index 000000000..ce7c6996f --- /dev/null +++ b/multisrc/overrides/madara/wuxiaworld/src/WuxiaWorld.kt @@ -0,0 +1,13 @@ +package eu.kanade.tachiyomi.extension.en.wuxiaworld + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.source.model.FilterList +import okhttp3.Request + +class WuxiaWorld : Madara("WuxiaWorld", "https://wuxiaworld.site", "en") { + override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/tag/webcomic/page/$page/?m_orderby=views", headers) + override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/tag/webcomic/page/$page/?m_orderby=latest", headers) + override fun searchMangaRequest(page: Int, query: String, filters: FilterList) = super.searchMangaRequest(page, "$query comics", filters) + override fun popularMangaNextPageSelector() = "div.nav-previous.float-left" +} diff --git a/multisrc/overrides/madara/yaoitoshokan/src/YaoiToshokan.kt b/multisrc/overrides/madara/yaoitoshokan/src/YaoiToshokan.kt new file mode 100644 index 000000000..28d745a5b --- /dev/null +++ b/multisrc/overrides/madara/yaoitoshokan/src/YaoiToshokan.kt @@ -0,0 +1,28 @@ +package eu.kanade.tachiyomi.extension.pt.yaoitoshokan + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import eu.kanade.tachiyomi.source.model.Page +import eu.kanade.tachiyomi.source.model.SChapter +import okhttp3.Response +import org.jsoup.nodes.Document +import java.text.SimpleDateFormat +import java.util.Locale + +class YaoiToshokan : Madara("Yaoi Toshokan", "https://yaoitoshokan.com.br", "pt-BR", SimpleDateFormat("dd MMM yyyy", Locale("pt", "BR"))) { + // Page has custom link to scan website. + override val popularMangaUrlSelector = "div.post-title a:not([target])" + + // Chapters are listed old to new. + override fun chapterListParse(response: Response): List { + return super.chapterListParse(response).reversed() + } + + override fun pageListParse(document: Document): List { + return document.select(pageListParseSelector) + .mapIndexed { index, element -> + // Had to add trim because of white space in source. + val imageUrl = element.select("img").attr("data-src").trim() + Page(index, document.location(), imageUrl) + } + } +} diff --git a/multisrc/overrides/madara/yokaijump/src/YokaiJump.kt b/multisrc/overrides/madara/yokaijump/src/YokaiJump.kt new file mode 100644 index 000000000..c8349ed6e --- /dev/null +++ b/multisrc/overrides/madara/yokaijump/src/YokaiJump.kt @@ -0,0 +1,12 @@ +package eu.kanade.tachiyomi.extension.fr.yokaijump + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class YokaiJump : Madara( + "Yokai Jump", + "https://yokaijump.fr", + "fr", + dateFormat = SimpleDateFormat("dd/MM/yy", Locale.US) +) diff --git a/multisrc/overrides/madara/yuriverso/src/YuriVerso.kt b/multisrc/overrides/madara/yuriverso/src/YuriVerso.kt new file mode 100644 index 000000000..a2a67deb9 --- /dev/null +++ b/multisrc/overrides/madara/yuriverso/src/YuriVerso.kt @@ -0,0 +1,12 @@ +package eu.kanade.tachiyomi.extension.pt.yuriverso + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import java.text.SimpleDateFormat +import java.util.Locale + +class YuriVerso : Madara( + "Yuri Verso", + "https://yuri.live", + "pt-BR", + SimpleDateFormat("dd/MM/yyyy", Locale("pt", "BR")) +) diff --git a/multisrc/overrides/madara/zinmanga/src/ZinManga.kt b/multisrc/overrides/madara/zinmanga/src/ZinManga.kt new file mode 100644 index 000000000..6c08e3c1d --- /dev/null +++ b/multisrc/overrides/madara/zinmanga/src/ZinManga.kt @@ -0,0 +1,9 @@ +package eu.kanade.tachiyomi.extension.en.zinmanga + +import eu.kanade.tachiyomi.multisrc.madara.Madara +import okhttp3.Headers + +class ZinManga : Madara("Zin Translator", "https://zinmanga.com", "en") { + override fun headersBuilder(): Headers.Builder = super.headersBuilder() + .add("Referer", "https://zinmanga.com/") +} diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/MadaraGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/MadaraGenerator.kt index daee83c2a..d7649be3a 100644 --- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/MadaraGenerator.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/MadaraGenerator.kt @@ -1,6 +1,7 @@ package eu.kanade.tachiyomi.multisrc.madara import eu.kanade.tachiyomi.multisrc.ThemeSourceData.SingleLang +import eu.kanade.tachiyomi.multisrc.ThemeSourceData.MultiLang import eu.kanade.tachiyomi.multisrc.ThemeSourceGenerator class MadaraGenerator : ThemeSourceGenerator { @@ -15,25 +16,25 @@ class MadaraGenerator : ThemeSourceGenerator { SingleLang("Adonis Fansub", "https://manga.adonisfansub.com", "tr"), SingleLang("AkuManga", "https://akumanga.com", "ar"), SingleLang("AlianzaMarcial", "https://alianzamarcial.xyz", "es"), - SingleLang("AllPornComic", "https://allporncomic.com", "en"), + SingleLang("AllPornComic", "https://allporncomic.com", "en", isNsfw = true), SingleLang("Aloalivn", "https://aloalivn.com", "en"), SingleLang("AniMangaEs", "http://animangaes.com", "en"), SingleLang("Agent of Change Translations", "https://aoc.moe", "en"), SingleLang("ApollComics", "https://apollcomics.xyz", "es"), - SingleLang("Arang Scans", "https://www.arangscans.com", "en"), + SingleLang("Arang Scans", "https://arangscans.com", "en", overrideVersionCode = 1), SingleLang("ArazNovel", "https://www.araznovel.com", "tr"), SingleLang("Argos Scan", "https://argosscan.com", "pt-BR"), SingleLang("Asgard Team", "https://www.asgard1team.com", "ar"), SingleLang("Astral Library", "https://www.astrallibrary.net", "en"), SingleLang("Atikrost", "https://atikrost.com", "tr"), - SingleLang("ATM-Subs", "https://atm-subs.fr", "fr", className = "ATMSubs", pkgName = "atmsubs"), + SingleLang("ATM-Subs", "https://atm-subs.fr", "fr", className = "ATMSubs"), SingleLang("Azora", "https://www.azoramanga.com", "ar"), SingleLang("Bakaman", "https://bakaman.net", "th"), SingleLang("BestManga", "https://bestmanga.club", "ru"), SingleLang("BestManhua", "https://bestmanhua.com", "en", overrideVersionCode = 1), SingleLang("BoysLove", "https://boyslove.me", "en"), SingleLang("CatOnHeadTranslations", "https://catonhead.com", "en"), - SingleLang("CAT-translator", "https://cat-translator.com", "th", className = "CatTranslator", pkgName = "cattranslator"), + SingleLang("CAT-translator", "https://cat-translator.com", "th", className = "CatTranslator"), SingleLang("Chibi Manga", "https://www.cmreader.info", "en"), SingleLang("Clover Manga", "Clover Manga", "tr"), SingleLang("ComicKiba", "https://comickiba.com", "en"), @@ -78,8 +79,151 @@ class MadaraGenerator : ThemeSourceGenerator { SingleLang("KlikManga", "https://klikmanga.com", "id"), SingleLang("Kissmanga.in", "https://kissmanga.in", "en", className= "KissmangaIn"), SingleLang("Kombatch", "https://kombatch.com", "id"), - + SingleLang("KomikGo", "https://komikgo.com", "id"), + SingleLang("Lily Manga", "https://lilymanga.com", "en"), + SingleLang("LovableSubs", "https://lovablesubs.com", "tr"), + SingleLang("Manga18 Fun", "https://manga18.fun", "en"), + SingleLang("Manga347", "https://manga347.com", "en"), + SingleLang("مانجا العاشق", "https://3asq.org", "ar", className = "Manga3asq"), + SingleLang("Manga3S", "https://manga3s.com", "en"), + SingleLang("Manga68", "https://manga68.com", "en"), + SingleLang("Manga Action", "https://manga-action.com", "ar"), + SingleLang("Manga Arab Online مانجا عرب اون لاين", "https://mangaarabonline.com", "ar", className = "MangaArabOnline"), + SingleLang("مانجا عرب تيم Manga Arab Team", "https://mangaarabteam.com", "ar", className = "MangaArabTeam"), + SingleLang("MangaBaz", "https://mangabaz.com", "tr"), + SingleLang("Manga Bin", "https://mangabin.com/", "en"), + SingleLang("MangaBob", "https://mangabob.com", "en"), + SingleLang("Manga Chill", "https://mangachill.com/", "en"), + SingleLang("Manga Clash", "https://mangaclash.com", "en"), + SingleLang("Manga Crimson", "https://mangacrimson.com", "tr"), + SingleLang("MangaCultivator", "https://mangacultivator.com", "en"), + SingleLang("MangaDods", "https://www.mangadods.com", "en"), + SingleLang("MangaEffect", "https://mangaeffect.com", "en"), + SingleLang("MangaGreat", "https://mangagreat.com", "en"), + SingleLang("Manga Hentai", "https://mangahentai.me", "en", isNsfw = true), + SingleLang("Manga Kiss", "https://mangakiss.org", "en"), + SingleLang("MangaKomi", "https://mangakomi.com", "en"), + SingleLang("Manga Land Arabic", "https://mangalandarabic.com", "ar"), + SingleLang("مانجا ليك", "https://mangalek.com", "ar", className = "Mangalek"), + SingleLang("Manga Lord", "https://mangalord.com", "en"), + SingleLang("Manganelo.link", "https://manganelo.link", "en", className = "ManganeloLink"), + SingleLang("Manga Nine", "https://manganine.com", "en"), + SingleLang("Manga-Online.co", "https://www.manga-online.co", "th", className = "MangaOnlineCo"), + SingleLang("Manga Diyari", "https://mangadiyari.com", "tr"), + SingleLang("MangaRave", "http://www.mangarave.com", "en"), + SingleLang("MangaRawr", "https://mangarawr.com", "en"), + SingleLang("Manga Read", "https://mangaread.co", "en"), + SingleLang("MangaRead.org", "https://www.mangaread.org", "en", className = "MangaReadOrg"), + SingleLang("Mangareceh", "https://mangareceh.id", "id"), + SingleLang("Manga Rock Team", "https://mangarockteam.com", "en"), + SingleLang("Manga Rocky", "https://mangarocky.com", "en"), + SingleLang("MangaRoma", "https://mangaroma.com", "en"), + SingleLang("Manga-Scantrad", "https://manga-scantrad.net", "fr", className = "MangaScantrad"), + SingleLang("MangaSco", "https://mangasco.com", "en"), + SingleLang("MangaSpark", "https://mangaspark.com", "ar"), + SingleLang("Manga Starz", "https://mangastarz.com", "ar"), + SingleLang("MangaStein", "https://mangastein.com", "tr"), + SingleLang("Mangasushi", "https://mangasushi.net", "en"), + SingleLang("Manga SY", "https://www.mangasy.com", "en"), + SingleLang("MangaTeca", "https://www.mangateca.com", "pt-BR"), + SingleLang("Manga Turf", "https://mangaturf.com", "en"), + SingleLang("MangaTX", "https://mangatx.com", "en"), + SingleLang("Manga Weebs", "https://mangaweebs.in", "en"), + SingleLang("MangaWT", "https://mangawt.com", "tr"), + SingleLang("MangaYaku", "https://mangayaku.my.id", "id"), + SingleLang("MangaYosh", "https://mangayosh.xyz", "id"), + MultiLang("Mangazuki.club", "https://mangazuki.club", listOf("ja", "ko"), + className = "MangazukiClubFactory"), + SingleLang("Mangazuki.me", "https://mangazuki.me", "en", className = "MangazukiMe"), SingleLang("Mangazuki.online", "http://mangazukinew.online", "en", className = "MangazukiOnline"), + SingleLang("ManhuaBox", "https://manhuabox.net", "en"), + SingleLang("ManhuaFast", "https://manhuafast.com", "en"), + SingleLang("Manhuaga", "https://manhuaga.com", "en"), + SingleLang("Manhua Plus", "https://manhuaplus.com", "en"), + SingleLang("Manhuas.net", "https://manhuas.net", "en", className = "Manhuasnet"), + SingleLang("Manhuas World", "https://manhuasworld.com", "en"), + SingleLang("Manhua SY", "https://www.manhuasy.com", "en"), + SingleLang("ManhuaUS", "https://manhuaus.com", "en"), + SingleLang("Manhwa Raw", "https://manhwaraw.com", "ko"), + SingleLang("Manhwatop", "https://manhwatop.com", "en"), + SingleLang("Manwahentai.me", "https://manhwahentai.me", "en", className = "ManwahentaiMe", isNsfw = true), + SingleLang("Manwha Club", "https://manhwa.club", "en"), + SingleLang("ManyToon", "https://manytoon.com", "en"), + SingleLang("ManyToonClub", "https://manytoon.club", "ko"), + SingleLang("ManyToon.me", "https://manytoon.me", "en", className = "ManyToonMe"), + SingleLang("Mark Scans", "https://markscans.online", "pt-BR"), + SingleLang("Martial Scans", "https://martialscans.com", "en"), + SingleLang("MG Komik", "https://mgkomik.my.id", "id"), + SingleLang("Milftoon", "https://milftoon.xxx", "en", isNsfw = true), + SingleLang("Miracle Scans", "https://miraclescans.com", "en"), + SingleLang("Mixed Manga", "https://mixedmanga.com", "en"), + SingleLang("MMScans", "https://mm-scans.com/", "en"), + SingleLang("Mundo Wuxia", "https://mundowuxia.com", "es"), + SingleLang("Mystical Merries", "https://mysticalmerries.com", "en"), + SingleLang("Nazarick Scans", "https://nazarickscans.com", "en"), + SingleLang("NeatManga", "https://neatmanga.com", "en"), + SingleLang("NekoBreaker", "https://nekobreaker.com", "pt-BR"), + SingleLang("NekoScan", "https://nekoscan.com", "en"), + SingleLang("Neox Scanlator", "https://neoxscans.com", "pt-BR"), + SingleLang("Night Comic", "https://www.nightcomic.com", "en"), + SingleLang("Niji Translations", "https://niji-translations.com", "ar"), + SingleLang("Ninjavi", "https://ninjavi.com", "ar"), + SingleLang("NTS Void Scans", "https://ntsvoidscans.com", "en"), + SingleLang("Off Scan", "https://offscan.top", "pt-BR"), + SingleLang("مانجا اولاو", "https://olaoe.giize.com", "ar", className = "OlaoeManga"), + SingleLang("OnManga", "https://onmanga.com", "en"), + SingleLang("Origami Orpheans", "https://origami-orpheans.com.br", "pt-BR"), + SingleLang("PMScans", "https://www.pmscans.com", "en"), + SingleLang("Pojok Manga", "https://pojokmanga.com", "id"), + SingleLang("PornComix", "https://www.porncomixonline.net", "en", isNsfw = true), + SingleLang("Prime Manga", "https://primemanga.com", "en"), + SingleLang("Projeto Scanlator", "https://projetoscanlator.com", "pt-BR"), + SingleLang("QueensManga ملكات المانجا", "https://queensmanga.com", "ar", className = "QueensManga"), + SingleLang("Raider Scans", "https://raiderscans.com", "en"), + SingleLang("Random Translations", "https://randomtranslations.com", "en"), + SingleLang("Raw Mangas", "https://rawmangas.net", "ja", isNsfw = true), + SingleLang("ReadManhua", "https://readmanhua.net", "en"), + SingleLang("Renascence Scans (Renascans)", "https://new.renascans.com", "en", className = "RenaScans"), + SingleLang("Rüya Manga", "https://www.ruyamanga.com", "tr", className = "RuyaManga"), + SingleLang("S2Manga", "https://s2manga.com", "en"), + SingleLang("Sekte Doujin", "https://sektedoujin.xyz", "id", isNsfw = true), + SingleLang("ShoujoHearts", "http://shoujohearts.com", "en"), + SingleLang("SiXiang Scans", "http://www.sixiangscans.com", "en"), + SingleLang("Siyahmelek", "https://siyahmelek.com", "tr", isNsfw = true), + SingleLang("Skymanga", "https://skymanga.co", "en"), + SingleLang("SoloScanlation", "https://soloscanlation.site", "en"), + SingleLang("Spooky Scanlations", "https://spookyscanlations.xyz", "es"), + SingleLang("StageComics", "https://stagecomics.com", "pt-BR"), + SingleLang("TheTopComic", "https://thetopcomic.com", "en"), + SingleLang("365Manga", "https://365manga.com", "en", className = "ThreeSixtyFiveManga"), + SingleLang("ToonGod", "https://www.toongod.com", "en"), + SingleLang("Toonily", "https://toonily.com", "en", isNsfw = true), + SingleLang("Toonily.net", "https://toonily.net", "en", isNsfw = true, className = "ToonilyNet"), + SingleLang("ToonPoint", "https://toonpoint.com", "en"), + SingleLang("Top Manhua", "https://topmanhua.com", "en"), + SingleLang("TritiniaScans", "https://tritinia.com", "en"), + SingleLang("TruyenTranhAudio.com", "https://truyentranhaudio.com", "vi", className = "TruyenTranhAudioCom"), + SingleLang("TruyenTranhAudio.online", "https://truyentranhaudio.online", "vi", className = "TruyenTranhAudioOnline"), + SingleLang("Tsubaki No Scan", "https://tsubakinoscan.com", "fr"), + SingleLang("Türkçe Manga", "https://turkcemanga.com", "tr", className = "TurkceManga"), + SingleLang("Twilight Scans", "https://twilightscans.com", "en"), + SingleLang("Uyuyan Balik", "https://uyuyanbalik.com/", "tr"), + SingleLang("Vanguard Bun", "https://vanguardbun.com/", "en"), + SingleLang("Void Scans", "https://voidscans.com", "en"), + SingleLang("Wakascan", "https://wakascan.com", "fr"), + SingleLang("War Queen Scan", "https://wqscan.com", "pt-BR"), + SingleLang("WebNovel", "https://webnovel.live", "en"), + SingleLang("WebToonily", "https://webtoonily.com", "en"), + SingleLang("WebtoonXYZ", "https://www.webtoon.xyz", "en"), + SingleLang("WeScans", "https://wescans.xyz", "en"), + SingleLang("WoopRead", "https://woopread.com", "en"), + SingleLang("World Romance Translation", "https://wrt.my.id/", "id"), + SingleLang("WuxiaWorld", "https://wuxiaworld.site", "en"), + SingleLang("Yaoi Toshokan", "https://yaoitoshokan.com.br", "pt-BR", isNsfw = true), + SingleLang("Yokai Jump", "https://yokaijump.fr", "fr"), + SingleLang("Yuri Verso", "https://yuri.live", "pt-BR"), + SingleLang("Zin Translator", "https://zinmanga.com", "en"), + SingleLang("ZManga", "https://zmanga.org", "es"), ) companion object { diff --git a/src/all/madara/AndroidManifest.xml b/src/all/madara/AndroidManifest.xml deleted file mode 100644 index 30deb7f79..000000000 --- a/src/all/madara/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/src/all/madara/build.gradle b/src/all/madara/build.gradle deleted file mode 100644 index 9b0873e1a..000000000 --- a/src/all/madara/build.gradle +++ /dev/null @@ -1,13 +0,0 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' - -ext { - extName = 'Madara (multiple sources)' - pkgNameSuffix = "all.madara" - extClass = '.MadaraFactory' - extVersionCode = 180 - libVersion = '1.2' - containsNsfw = true -} - -apply from: "$rootDir/common.gradle" diff --git a/src/all/madara/res/mipmap-hdpi/ic_launcher.png b/src/all/madara/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index bc8eef503..000000000 Binary files a/src/all/madara/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/all/madara/res/mipmap-mdpi/ic_launcher.png b/src/all/madara/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index e51d65390..000000000 Binary files a/src/all/madara/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/all/madara/res/mipmap-xhdpi/ic_launcher.png b/src/all/madara/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index b011eaf9b..000000000 Binary files a/src/all/madara/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/all/madara/res/mipmap-xxhdpi/ic_launcher.png b/src/all/madara/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index dac0772db..000000000 Binary files a/src/all/madara/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/all/madara/res/mipmap-xxxhdpi/ic_launcher.png b/src/all/madara/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index c2706aa3f..000000000 Binary files a/src/all/madara/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/all/madara/res/web_hi_res_512.png b/src/all/madara/res/web_hi_res_512.png deleted file mode 100644 index a62cfe72f..000000000 Binary files a/src/all/madara/res/web_hi_res_512.png and /dev/null differ diff --git a/src/all/madara/src/eu/kanade/tachiyomi/extension/all/madara/Madara.kt b/src/all/madara/src/eu/kanade/tachiyomi/extension/all/madara/Madara.kt deleted file mode 100644 index a69602267..000000000 --- a/src/all/madara/src/eu/kanade/tachiyomi/extension/all/madara/Madara.kt +++ /dev/null @@ -1,525 +0,0 @@ -package eu.kanade.tachiyomi.extension.all.madara - -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.network.POST -import eu.kanade.tachiyomi.network.asObservable -import eu.kanade.tachiyomi.source.model.Filter -import eu.kanade.tachiyomi.source.model.FilterList -import eu.kanade.tachiyomi.source.model.MangasPage -import eu.kanade.tachiyomi.source.model.Page -import eu.kanade.tachiyomi.source.model.SChapter -import eu.kanade.tachiyomi.source.model.SManga -import eu.kanade.tachiyomi.source.online.ParsedHttpSource -import eu.kanade.tachiyomi.util.asJsoup -import okhttp3.CacheControl -import okhttp3.FormBody -import okhttp3.Headers -import okhttp3.HttpUrl -import okhttp3.OkHttpClient -import okhttp3.Request -import okhttp3.RequestBody -import okhttp3.Response -import org.jsoup.nodes.Document -import org.jsoup.nodes.Element -import rx.Observable -import java.text.ParseException -import java.text.SimpleDateFormat -import java.util.Calendar -import java.util.Locale -import java.util.concurrent.TimeUnit -import kotlin.math.absoluteValue -import kotlin.random.Random - -abstract class Madara( - override val name: String, - override val baseUrl: String, - override val lang: String, - private val dateFormat: SimpleDateFormat = SimpleDateFormat("MMMM dd, yyyy", Locale.US) -) : ParsedHttpSource() { - - override val supportsLatest = true - - override val client: OkHttpClient = network.cloudflareClient.newBuilder() - .connectTimeout(10, TimeUnit.SECONDS) - .readTimeout(30, TimeUnit.SECONDS) - .build() - - // helps with cloudflare for some sources, makes it worse for others; override with empty string if the latter is true - protected open val userAgentRandomizer = " ${Random.nextInt().absoluteValue}" - - override fun headersBuilder(): Headers.Builder = Headers.Builder() - .add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/78.0$userAgentRandomizer") - - // Popular Manga - - override fun popularMangaSelector() = "div.page-item-detail" - - open val popularMangaUrlSelector = "div.post-title a" - - override fun popularMangaFromElement(element: Element): SManga { - val manga = SManga.create() - - with(element) { - select(popularMangaUrlSelector).first()?.let { - manga.setUrlWithoutDomain(it.attr("abs:href")) - manga.title = it.ownText() - } - - select("img").first()?.let { - manga.thumbnail_url = imageFromElement(it) - } - } - - return manga - } - - open fun formBuilder(page: Int, popular: Boolean) = FormBody.Builder().apply { - add("action", "madara_load_more") - add("page", (page - 1).toString()) - add("template", "madara-core/content/content-archive") - add("vars[orderby]", "meta_value_num") - add("vars[paged]", "1") - add("vars[posts_per_page]", "20") - add("vars[post_type]", "wp-manga") - add("vars[post_status]", "publish") - add("vars[meta_key]", if (popular) "_wp_manga_views" else "_latest_update") - add("vars[order]", "desc") - add("vars[sidebar]", if (popular) "full" else "right") - add("vars[manga_archives_item_layout]", "big_thumbnail") - } - - open val formHeaders: Headers by lazy { headersBuilder().build() } - - override fun popularMangaRequest(page: Int): Request { - return POST("$baseUrl/wp-admin/admin-ajax.php", formHeaders, formBuilder(page, true).build(), CacheControl.FORCE_NETWORK) - } - - override fun popularMangaNextPageSelector(): String? = "body:not(:has(.no-posts))" - - // Latest Updates - - override fun latestUpdatesSelector() = popularMangaSelector() - - override fun latestUpdatesFromElement(element: Element): SManga { - // Even if it's different from the popular manga's list, the relevant classes are the same - return popularMangaFromElement(element) - } - - override fun latestUpdatesRequest(page: Int): Request { - return POST("$baseUrl/wp-admin/admin-ajax.php", formHeaders, formBuilder(page, false).build(), CacheControl.FORCE_NETWORK) - } - - override fun latestUpdatesNextPageSelector(): String? = popularMangaNextPageSelector() - - override fun latestUpdatesParse(response: Response): MangasPage { - val mp = super.latestUpdatesParse(response) - val mangas = mp.mangas.distinctBy { it.url } - return MangasPage(mangas, mp.hasNextPage) - } - - override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable { - return client.newCall(searchMangaRequest(page, query, filters)) - .asObservable().doOnNext { response -> - if (!response.isSuccessful) { - response.close() - // Error message for exceeding last page - if (response.code() == 404) - error("Already on the Last Page!") - else throw Exception("HTTP error ${response.code()}") - } - } - .map { response -> - searchMangaParse(response) - } - } - - // Search Manga - - protected open fun searchPage(page: Int): String = "page/$page/" - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val url = HttpUrl.parse("$baseUrl/${searchPage(page)}")!!.newBuilder() - url.addQueryParameter("s", query) - url.addQueryParameter("post_type", "wp-manga") - filters.forEach { filter -> - when (filter) { - is AuthorFilter -> { - if (filter.state.isNotBlank()) { - url.addQueryParameter("author", filter.state) - } - } - is ArtistFilter -> { - if (filter.state.isNotBlank()) { - url.addQueryParameter("artist", filter.state) - } - } - is YearFilter -> { - if (filter.state.isNotBlank()) { - url.addQueryParameter("release", filter.state) - } - } - is StatusFilter -> { - filter.state.forEach { - if (it.state) { - url.addQueryParameter("status[]", it.id) - } - } - } - is OrderByFilter -> { - if (filter.state != 0) { - url.addQueryParameter("m_orderby", filter.toUriPart()) - } - } - is GenreConditionFilter -> { - url.addQueryParameter("op", filter.toUriPart()) - } - is GenreList -> { - filter.state - .filter { it.state } - .let { list -> - if (list.isNotEmpty()) { list.forEach { genre -> url.addQueryParameter("genre[]", genre.id) } } - } - } - } - } - return GET(url.toString(), headers) - } - - private class AuthorFilter : Filter.Text("Author") - private class ArtistFilter : Filter.Text("Artist") - private class YearFilter : Filter.Text("Year of Released") - private class StatusFilter(status: List) : Filter.Group("Status", status) - private class OrderByFilter : UriPartFilter( - "Order By", - arrayOf( - Pair("