diff --git a/multisrc/overrides/madara/comictoon/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/comictoon/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index cfe9de43b..000000000 Binary files a/multisrc/overrides/madara/comictoon/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/comictoon/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/comictoon/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 00afe0905..000000000 Binary files a/multisrc/overrides/madara/comictoon/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/comictoon/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/comictoon/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 42324c417..000000000 Binary files a/multisrc/overrides/madara/comictoon/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/comictoon/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/comictoon/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 182779dee..000000000 Binary files a/multisrc/overrides/madara/comictoon/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/comictoon/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/comictoon/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 5044b9303..000000000 Binary files a/multisrc/overrides/madara/comictoon/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/comictoon/res/web_hi_res_512.png b/multisrc/overrides/madara/comictoon/res/web_hi_res_512.png deleted file mode 100644 index f4914a0fd..000000000 Binary files a/multisrc/overrides/madara/comictoon/res/web_hi_res_512.png and /dev/null differ diff --git a/multisrc/overrides/madara/comictoon/src/Comictoon.kt b/multisrc/overrides/madara/comictoon/src/Comictoon.kt deleted file mode 100644 index 5f8c08434..000000000 --- a/multisrc/overrides/madara/comictoon/src/Comictoon.kt +++ /dev/null @@ -1,7 +0,0 @@ -package eu.kanade.tachiyomi.extension.th.comictoon - -import eu.kanade.tachiyomi.multisrc.madara.Madara -import java.text.SimpleDateFormat -import java.util.Locale - -class Comictoon : Madara("Comictoon", "https://comictoonthaith-new.com", "th", SimpleDateFormat("MMMMM dd, yyyy", Locale("th"))) diff --git a/multisrc/overrides/madara/faestorm/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/faestorm/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 4634a904e..000000000 Binary files a/multisrc/overrides/madara/faestorm/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/faestorm/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/faestorm/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index c922e1225..000000000 Binary files a/multisrc/overrides/madara/faestorm/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/faestorm/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/faestorm/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 893159adc..000000000 Binary files a/multisrc/overrides/madara/faestorm/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/faestorm/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/faestorm/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 577f07a5f..000000000 Binary files a/multisrc/overrides/madara/faestorm/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/faestorm/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/faestorm/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 87cf1b737..000000000 Binary files a/multisrc/overrides/madara/faestorm/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/faestorm/res/web_hi_res_512.png b/multisrc/overrides/madara/faestorm/res/web_hi_res_512.png deleted file mode 100644 index bba71bef1..000000000 Binary files a/multisrc/overrides/madara/faestorm/res/web_hi_res_512.png and /dev/null differ diff --git a/multisrc/overrides/madara/faestorm/src/FaeStorm.kt b/multisrc/overrides/madara/faestorm/src/FaeStorm.kt deleted file mode 100644 index aa5fc045b..000000000 --- a/multisrc/overrides/madara/faestorm/src/FaeStorm.kt +++ /dev/null @@ -1,12 +0,0 @@ -package eu.kanade.tachiyomi.extension.tr.faestorm - -import eu.kanade.tachiyomi.multisrc.madara.Madara -import java.text.SimpleDateFormat -import java.util.Locale - -class FaeStorm : Madara( - "FaeStorm", - "https://faestormmanga.com", - "tr", - SimpleDateFormat("d MMM yyy", Locale("tr")), -) diff --git a/multisrc/overrides/madara/hatachimanga/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/hatachimanga/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index cd720cb14..000000000 Binary files a/multisrc/overrides/madara/hatachimanga/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/hatachimanga/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/hatachimanga/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 4b25d9280..000000000 Binary files a/multisrc/overrides/madara/hatachimanga/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/hatachimanga/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/hatachimanga/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 7f3841ef9..000000000 Binary files a/multisrc/overrides/madara/hatachimanga/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/hatachimanga/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/hatachimanga/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index a69788c98..000000000 Binary files a/multisrc/overrides/madara/hatachimanga/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/hatachimanga/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/hatachimanga/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 29336f906..000000000 Binary files a/multisrc/overrides/madara/hatachimanga/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/hatachimanga/res/web_hi_res_512.png b/multisrc/overrides/madara/hatachimanga/res/web_hi_res_512.png deleted file mode 100644 index f43bae8dd..000000000 Binary files a/multisrc/overrides/madara/hatachimanga/res/web_hi_res_512.png and /dev/null differ diff --git a/multisrc/overrides/madara/manga4all/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/manga4all/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index d7044f324..000000000 Binary files a/multisrc/overrides/madara/manga4all/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/manga4all/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/manga4all/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 0bf5afcff..000000000 Binary files a/multisrc/overrides/madara/manga4all/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/manga4all/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/manga4all/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 472e52f9b..000000000 Binary files a/multisrc/overrides/madara/manga4all/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/manga4all/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/manga4all/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 5711a845b..000000000 Binary files a/multisrc/overrides/madara/manga4all/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/manga4all/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/manga4all/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 42fb8dd08..000000000 Binary files a/multisrc/overrides/madara/manga4all/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/manga4all/res/web_hi_res_512.png b/multisrc/overrides/madara/manga4all/res/web_hi_res_512.png deleted file mode 100644 index 808045b49..000000000 Binary files a/multisrc/overrides/madara/manga4all/res/web_hi_res_512.png and /dev/null differ diff --git a/multisrc/overrides/madara/manga4all/src/Manga4All.kt b/multisrc/overrides/madara/manga4all/src/Manga4All.kt deleted file mode 100644 index 84a04622a..000000000 --- a/multisrc/overrides/madara/manga4all/src/Manga4All.kt +++ /dev/null @@ -1,12 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.manga4all - -import eu.kanade.tachiyomi.multisrc.madara.Madara -import java.text.SimpleDateFormat -import java.util.Locale - -class Manga4All : Madara( - "Manga4All", - "https://manga4all.net", - "en", - dateFormat = SimpleDateFormat("d MMM yyyy", Locale.US), -) diff --git a/multisrc/overrides/madara/mangaonlineco/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/mangaonlineco/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index c872377d7..000000000 Binary files a/multisrc/overrides/madara/mangaonlineco/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/mangaonlineco/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/mangaonlineco/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 98f0b9483..000000000 Binary files a/multisrc/overrides/madara/mangaonlineco/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/mangaonlineco/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/mangaonlineco/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index decd54db3..000000000 Binary files a/multisrc/overrides/madara/mangaonlineco/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/mangaonlineco/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/mangaonlineco/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 9ee13e3c3..000000000 Binary files a/multisrc/overrides/madara/mangaonlineco/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/mangaonlineco/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/mangaonlineco/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 273239940..000000000 Binary files a/multisrc/overrides/madara/mangaonlineco/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/mangaonlineco/res/web_hi_res_512.png b/multisrc/overrides/madara/mangaonlineco/res/web_hi_res_512.png deleted file mode 100644 index af8adf423..000000000 Binary files a/multisrc/overrides/madara/mangaonlineco/res/web_hi_res_512.png and /dev/null differ diff --git a/multisrc/overrides/madara/mangaonlineco/src/MangaOnlineCo.kt b/multisrc/overrides/madara/mangaonlineco/src/MangaOnlineCo.kt deleted file mode 100644 index c66dfb6fe..000000000 --- a/multisrc/overrides/madara/mangaonlineco/src/MangaOnlineCo.kt +++ /dev/null @@ -1,11 +0,0 @@ -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/painfulnightzscan/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/painfulnightzscan/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index b7265edbe..000000000 Binary files a/multisrc/overrides/madara/painfulnightzscan/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/painfulnightzscan/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/painfulnightzscan/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 3b2b356e7..000000000 Binary files a/multisrc/overrides/madara/painfulnightzscan/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/painfulnightzscan/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/painfulnightzscan/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 619a03792..000000000 Binary files a/multisrc/overrides/madara/painfulnightzscan/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/painfulnightzscan/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/painfulnightzscan/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index ad77c4f45..000000000 Binary files a/multisrc/overrides/madara/painfulnightzscan/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/painfulnightzscan/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/painfulnightzscan/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 101ac61d6..000000000 Binary files a/multisrc/overrides/madara/painfulnightzscan/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/painfulnightzscan/res/web_hi_res_512.png b/multisrc/overrides/madara/painfulnightzscan/res/web_hi_res_512.png deleted file mode 100644 index 5c7b5998f..000000000 Binary files a/multisrc/overrides/madara/painfulnightzscan/res/web_hi_res_512.png and /dev/null differ diff --git a/multisrc/overrides/madara/scansraw/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/scansraw/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index cd8d4db48..000000000 Binary files a/multisrc/overrides/madara/scansraw/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/scansraw/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/scansraw/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index aee571c1f..000000000 Binary files a/multisrc/overrides/madara/scansraw/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/scansraw/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/scansraw/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 6cb578108..000000000 Binary files a/multisrc/overrides/madara/scansraw/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/scansraw/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/scansraw/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 9dc4058e8..000000000 Binary files a/multisrc/overrides/madara/scansraw/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/scansraw/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/scansraw/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 853b90874..000000000 Binary files a/multisrc/overrides/madara/scansraw/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/madara/scansraw/res/web_hi_res_512.png b/multisrc/overrides/madara/scansraw/res/web_hi_res_512.png deleted file mode 100644 index 9db0a7a6d..000000000 Binary files a/multisrc/overrides/madara/scansraw/res/web_hi_res_512.png and /dev/null differ diff --git a/multisrc/overrides/madara/scansraw/src/ScansRaw.kt b/multisrc/overrides/madara/scansraw/src/ScansRaw.kt deleted file mode 100644 index b8d9a4741..000000000 --- a/multisrc/overrides/madara/scansraw/src/ScansRaw.kt +++ /dev/null @@ -1,7 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.scansraw - -import eu.kanade.tachiyomi.multisrc.madara.Madara - -class ScansRaw : Madara("Scans Raw", "https://scansraw.com", "en") { - override val useNewChapterEndpoint: Boolean = true -} 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 a555c07f7..9e3cab489 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 @@ -77,7 +77,6 @@ class MadaraGenerator : ThemeSourceGenerator { SingleLang("ComicKiba", "https://comickiba.com", "en", overrideVersionCode = 1), SingleLang("Comics Valley", "https://comicsvalley.com", "hi", isNsfw = true, overrideVersionCode = 1), SingleLang("ComicsWorld", "https://comicsworld.in", "hi"), - SingleLang("Comictoon", "https://comictoonthaith-new.com", "th", isNsfw = true), SingleLang("Comicz.net v2", "https://v2.comiz.net", "all", isNsfw = true, className = "ComiczNetV2"), SingleLang("Cookie Kiara", "https://18.kiara.cool", "en", isNsfw = true), SingleLang("CopyPasteScan", "https://copypastescan.xyz", "es", overrideVersionCode = 1), @@ -101,7 +100,6 @@ class MadaraGenerator : ThemeSourceGenerator { SingleLang("Eromiau", "https://www.eromiau.com", "es", isNsfw = true), SingleLang("Esomanga", "https://esomanga.com", "tr", overrideVersionCode = 1), SingleLang("FactManga", "https://factmanga.com", "en", isNsfw = false), - SingleLang("FaeStorm", "https://faestormmanga.com", "tr"), SingleLang("Fay Scans", "https://fayscans.com.br", "pt-BR", overrideVersionCode = 1), SingleLang("Final Scans", "https://finalscans.com", "pt-BR", isNsfw = true, overrideVersionCode = 1), SingleLang("Fire Scans", "https://firescans.xyz", "en", overrideVersionCode = 1), @@ -128,7 +126,6 @@ class MadaraGenerator : ThemeSourceGenerator { SingleLang("Hades no Fansub Hentai", "https://h.mangareaderpro.com", "es", isNsfw = true), SingleLang("Hades no Fansub", "https://mangareaderpro.com", "es", overrideVersionCode = 1), SingleLang("Harimanga", "https://harimanga.com", "en", overrideVersionCode = 3), - SingleLang("Hatachi Manga", "https://hachiraw.com", "ja", isNsfw = true, overrideVersionCode = 2), SingleLang("Hattori Manga", "https://hattorimanga.com", "tr", isNsfw = true), SingleLang("Hayalistic", "https://hayalistic.com", "tr"), SingleLang("Hentai CB", "https://hentaicube.net", "vi", isNsfw = true, overrideVersionCode = 6, pkgName = "hentaicube"), @@ -236,7 +233,6 @@ class MadaraGenerator : ThemeSourceGenerator { SingleLang("Manga Weebs", "https://mangaweebs.in", "en", overrideVersionCode = 8), SingleLang("Manga-1001.com", "https://manga-1001.com", "en", isNsfw = false, className = "MangaDash1001Com"), SingleLang("Manga-fast.com", "https://manga-fast.com", "en", className = "Mangafastcom", overrideVersionCode = 3), - SingleLang("Manga-Online.co", "https://www.manga-online.co", "th", className = "MangaOnlineCo"), SingleLang("Manga-Raw.info (unoriginal)", "https://manga-raw.info", "en", isNsfw = true, className = "MangaRawInfo"), SingleLang("Manga-Scantrad", "https://manga-scantrad.io", "fr", className = "MangaScantrad", overrideVersionCode = 3), SingleLang("Manga-TX", "https://manga-tx.com", "en", className = "Mangatxunoriginal"), @@ -244,7 +240,6 @@ class MadaraGenerator : ThemeSourceGenerator { SingleLang("Manga1st.online", "https://manga1st.online", "en", className = "MangaFirstOnline", overrideVersionCode = 1), SingleLang("Manga347", "https://manga347.com", "en", overrideVersionCode = 3), SingleLang("Manga3S", "https://manga3s.com", "en", overrideVersionCode = 4), - SingleLang("Manga4All", "https://manga4all.net", "en", overrideVersionCode = 3), SingleLang("Manga68", "https://manga68.com", "en", overrideVersionCode = 1), SingleLang("MangaBaz", "https://mangabaz.net", "en"), SingleLang("MangaBob", "https://mangabob.com", "en", overrideVersionCode = 1), @@ -385,7 +380,6 @@ class MadaraGenerator : ThemeSourceGenerator { SingleLang("Novels Town", "https://novelstown.cyou", "ar"), SingleLang("Oh No Manga", "https://ohnomanga.com", "en", isNsfw = true), SingleLang("OnlyManhwa", "https://onlymanhwa.org", "en", isNsfw = true), - SingleLang("Painful Nightz Scan", "https://painfulnightz.com", "en", overrideVersionCode = 1), SingleLang("Pantheon Scan", "https://pantheon-scan.com", "fr", overrideVersionCode = 1), SingleLang("Paragon Scans", "https://paragonscans.com", "en", isNsfw = true), SingleLang("Passa Mão Scan", "https://passamaoscan.com", "pt-BR", isNsfw = true, className = "PassaMaoScan"), @@ -430,7 +424,6 @@ class MadaraGenerator : ThemeSourceGenerator { SingleLang("Sawamics", "https://sawamics.com", "en"), SingleLang("ScamberTraslator", "https://scambertraslator.com", "es", overrideVersionCode = 3), SingleLang("Scan Hentai Menu", "https://scan.hentai.menu", "fr", isNsfw = true, overrideVersionCode = 1), - SingleLang("Scans Raw", "https://scansraw.com", "en", overrideVersionCode = 1), SingleLang("Scantrad-VF", "https://scantrad-vf.co", "fr", className = "ScantradVF"), SingleLang("Sdl scans", "https://sdlscans.com", "es", className = "SdlScans"), SingleLang("Shadowtrad", "https://shadowtrad.net", "fr"), diff --git a/src/en/soushiyofamiliar/AndroidManifest.xml b/src/en/soushiyofamiliar/AndroidManifest.xml deleted file mode 100644 index 8072ee00d..000000000 --- a/src/en/soushiyofamiliar/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/src/en/soushiyofamiliar/build.gradle b/src/en/soushiyofamiliar/build.gradle deleted file mode 100644 index b7d74c4cc..000000000 --- a/src/en/soushiyofamiliar/build.gradle +++ /dev/null @@ -1,12 +0,0 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' - -ext { - extName = 'Familiar by Soushiyo' - pkgNameSuffix = 'en.soushiyofamiliar' - extClass = '.SoushiyoFamiliar' - extVersionCode = 1 - isNsfw = true -} - -apply from: "$rootDir/common.gradle" diff --git a/src/en/soushiyofamiliar/res/mipmap-hdpi/ic_launcher.png b/src/en/soushiyofamiliar/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index b9ae36fd8..000000000 Binary files a/src/en/soushiyofamiliar/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/soushiyofamiliar/res/mipmap-mdpi/ic_launcher.png b/src/en/soushiyofamiliar/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index b52fe269a..000000000 Binary files a/src/en/soushiyofamiliar/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/soushiyofamiliar/res/mipmap-xhdpi/ic_launcher.png b/src/en/soushiyofamiliar/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 9bc22e4f5..000000000 Binary files a/src/en/soushiyofamiliar/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/soushiyofamiliar/res/mipmap-xxhdpi/ic_launcher.png b/src/en/soushiyofamiliar/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 8cdfff9fb..000000000 Binary files a/src/en/soushiyofamiliar/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/soushiyofamiliar/res/mipmap-xxxhdpi/ic_launcher.png b/src/en/soushiyofamiliar/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 1d5f771f0..000000000 Binary files a/src/en/soushiyofamiliar/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/soushiyofamiliar/res/web_hi_res_512.png b/src/en/soushiyofamiliar/res/web_hi_res_512.png deleted file mode 100644 index 5c945809c..000000000 Binary files a/src/en/soushiyofamiliar/res/web_hi_res_512.png and /dev/null differ diff --git a/src/en/soushiyofamiliar/src/eu/kanade/tachiyomi/extension/en/soushiyofamiliar/SoushiyoFamiliar.kt b/src/en/soushiyofamiliar/src/eu/kanade/tachiyomi/extension/en/soushiyofamiliar/SoushiyoFamiliar.kt deleted file mode 100644 index 23eaeb970..000000000 --- a/src/en/soushiyofamiliar/src/eu/kanade/tachiyomi/extension/en/soushiyofamiliar/SoushiyoFamiliar.kt +++ /dev/null @@ -1,135 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.soushiyofamiliar - -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 okhttp3.Request -import okhttp3.Response -import org.jsoup.nodes.Document -import org.jsoup.nodes.Element -import rx.Observable -import java.text.SimpleDateFormat -import java.util.Locale - -class SoushiyoFamiliar : ParsedHttpSource() { - - override val name = "Soushiyo: Familiar" - - override val baseUrl = "https://familiar.soushiyo.com" - - override val lang = "en" - - override val supportsLatest = false - - override fun fetchPopularManga(page: Int): Observable { - val manga = SManga.create().apply { - title = "Familiar" - artist = "Soushiyo" - author = "Soushiyo" - status = SManga.ONGOING - url = "/familiar-chapter-list/" - description = "a witch. a cat. a contract.\n\nWhen career-driven editor Diana Vallejo accidentally summons a familiar whose specialty is soft domination, her life takes a turn for the better – but for how long?\n\nFamiliar is a modern-day, slice-of-life romcomic about magick, work/life balance, BDSM, and relationships. It is kinky, queer, sex-positive, and free to read online. It is also erotic, sexually explicit, and written for adult audiences only." - thumbnail_url = "https://i.redd.it/wbe6ewkjtz291.jpg" - } - - return Observable.just(MangasPage(arrayListOf(manga), false)) - } - - override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable = Observable.just(MangasPage(emptyList(), false)) - - override fun fetchMangaDetails(manga: SManga): Observable = Observable.just(manga) - - override fun chapterListParse(response: Response): List { - val chapterList = super.chapterListParse(response).distinct() - val chapterListNew = mutableListOf() - - for (i in chapterList.indices) { - /* Some chapters are already listed on the site but are not yet out (have no link) --> Skip them */ - if (chapterList[i].url.isNotEmpty()) { - /* Add chapter to front of new list --> Reverse order so that newest chapter is first */ - chapterListNew.add(0, chapterList[i]) - } - } - - return chapterListNew - } - - override fun chapterListSelector() = "tbody > tr[class^='row-']" - - override fun chapterFromElement(element: Element): SChapter { - val textAct = element.select(".column-1").text() - val textChapNum = element.select(".column-2").text() - val textChapName = element.select(".column-3").text() - var textDate = "" - - /* The date is in column 6 after a globe symbol --> Find/select the symbol */ - val dateSymbolElements = element.select(".column-6 > .fa-globe") - /* Unreleased entries don't have a symbol and date */ - if (dateSymbolElements.size != 0) { - /* Get the text after the symbol (if there are more occurrences then take the last, so the latest date is used in the app) */ - textDate = dateSymbolElements.last()!!.nextSibling().toString() - /* Filter out any characters that do not belong to the valid date format "M/d/yy" */ - textDate = textDate.replace("[^0-9/]".toRegex(), "") - } - - val chapter = SChapter.create() - chapter.url = element.select(".column-3 > a").attr("href").substringAfter(baseUrl) // This is empty if there is no link (e.g. for unreleased chapters) --> This is then handled in chapterListParse - chapter.name = "Act $textAct - Chapter $textChapNum: $textChapName" - chapter.date_upload = parseDate(textDate) - - return chapter - } - - override fun pageListParse(document: Document): List { - val pages = mutableListOf() - - val elements = document.select(".esg-entry-media > img") - for (i in 0 until elements.size) { - pages.add(Page(pages.size, "", elements[i].attr("abs:src"))) - } - - return pages - } - - override fun imageUrlParse(document: Document) = throw UnsupportedOperationException("Not used.") - - override fun popularMangaSelector(): String = throw UnsupportedOperationException("Not used.") - - override fun searchMangaFromElement(element: Element): SManga = throw UnsupportedOperationException("Not used.") - - override fun searchMangaNextPageSelector(): String = throw UnsupportedOperationException("Not used.") - - override fun searchMangaSelector(): String = throw UnsupportedOperationException("Not used.") - - override fun popularMangaRequest(page: Int): Request = throw UnsupportedOperationException("Not used.") - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request = throw UnsupportedOperationException("Not used.") - - override fun popularMangaNextPageSelector(): String = throw UnsupportedOperationException("Not used.") - - override fun popularMangaFromElement(element: Element): SManga = throw UnsupportedOperationException("Not used.") - - override fun mangaDetailsParse(document: Document): SManga = throw UnsupportedOperationException("Not used.") - - override fun latestUpdatesNextPageSelector(): String? = throw UnsupportedOperationException("Not used.") - - override fun latestUpdatesFromElement(element: Element): SManga = throw UnsupportedOperationException("Not used.") - - override fun latestUpdatesRequest(page: Int): Request = throw UnsupportedOperationException("Not used.") - - override fun latestUpdatesSelector(): String = throw UnsupportedOperationException("Not used.") - - private fun parseDate(dateStr: String): Long { - return runCatching { DATE_FORMATTER.parse(dateStr)?.time } - .getOrNull() ?: 0L - } - - companion object { - private val DATE_FORMATTER by lazy { - SimpleDateFormat("M/d/yy", Locale.ENGLISH) - } - } -} diff --git a/src/es/mangatigre/AndroidManifest.xml b/src/es/mangatigre/AndroidManifest.xml deleted file mode 100644 index 8072ee00d..000000000 --- a/src/es/mangatigre/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/src/es/mangatigre/build.gradle b/src/es/mangatigre/build.gradle deleted file mode 100644 index 88aa9fdcd..000000000 --- a/src/es/mangatigre/build.gradle +++ /dev/null @@ -1,13 +0,0 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply plugin: 'kotlinx-serialization' - -ext { - extName = 'MangaTigre' - pkgNameSuffix = 'es.mangatigre' - extClass = '.MangaTigre' - extVersionCode = 3 - isNsfw = true -} - -apply from: "$rootDir/common.gradle" diff --git a/src/es/mangatigre/res/mipmap-hdpi/ic_launcher.png b/src/es/mangatigre/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index f96cfabf1..000000000 Binary files a/src/es/mangatigre/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/mangatigre/res/mipmap-mdpi/ic_launcher.png b/src/es/mangatigre/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index cdd4454db..000000000 Binary files a/src/es/mangatigre/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/mangatigre/res/mipmap-xhdpi/ic_launcher.png b/src/es/mangatigre/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index e4fb3a1de..000000000 Binary files a/src/es/mangatigre/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/mangatigre/res/mipmap-xxhdpi/ic_launcher.png b/src/es/mangatigre/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 130f029b0..000000000 Binary files a/src/es/mangatigre/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/mangatigre/res/mipmap-xxxhdpi/ic_launcher.png b/src/es/mangatigre/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index a7b64891e..000000000 Binary files a/src/es/mangatigre/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/mangatigre/res/web_hi_res_512.png b/src/es/mangatigre/res/web_hi_res_512.png deleted file mode 100644 index a50992167..000000000 Binary files a/src/es/mangatigre/res/web_hi_res_512.png and /dev/null differ diff --git a/src/es/mangatigre/src/eu/kanade/tachiyomi/extension/es/mangatigre/MangaTigre.kt b/src/es/mangatigre/src/eu/kanade/tachiyomi/extension/es/mangatigre/MangaTigre.kt deleted file mode 100644 index 56a730c0e..000000000 --- a/src/es/mangatigre/src/eu/kanade/tachiyomi/extension/es/mangatigre/MangaTigre.kt +++ /dev/null @@ -1,389 +0,0 @@ -package eu.kanade.tachiyomi.extension.es.mangatigre - -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.network.POST -import eu.kanade.tachiyomi.network.interceptor.rateLimitHost -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.HttpSource -import eu.kanade.tachiyomi.util.asJsoup -import kotlinx.serialization.decodeFromString -import kotlinx.serialization.encodeToString -import kotlinx.serialization.json.Json -import kotlinx.serialization.json.JsonObject -import kotlinx.serialization.json.JsonPrimitive -import kotlinx.serialization.json.jsonObject -import okhttp3.HttpUrl.Companion.toHttpUrl -import okhttp3.HttpUrl.Companion.toHttpUrlOrNull -import okhttp3.MediaType.Companion.toMediaType -import okhttp3.OkHttpClient -import okhttp3.Request -import okhttp3.RequestBody.Companion.toRequestBody -import okhttp3.Response -import okio.Buffer -import org.jsoup.nodes.Element -import uy.kohesive.injekt.injectLazy -import java.util.Calendar - -class MangaTigre : HttpSource() { - - override val name = "MangaTigre" - - override val baseUrl = "https://www.mangatigre.net" - - override val lang = "es" - - override val supportsLatest = true - - private val json: Json by injectLazy() - - private val imgCDNUrl = "https://i2.mtcdn.xyz" - - private var mtToken = "" - - override val client: OkHttpClient = network.client.newBuilder() - .addInterceptor { chain -> - val request = chain.request() - - if (request.method == "POST") { - val response = chain.proceed(request) - - if (response.code == 419) { - response.close() - setToken() - - val newBody = json.parseToJsonElement(request.bodyString).jsonObject.toMutableMap().apply { - this["_token"] = JsonPrimitive(mtToken) - } - - val payload = Json.encodeToString(JsonObject(newBody)).toRequestBody(JSON_MEDIA_TYPE) - - val apiHeaders = headersBuilder() - .add("Accept", ACCEPT_JSON) - .add("Content-Type", payload.contentType().toString()) - .build() - - val newRequest = request.newBuilder() - .headers(apiHeaders) - .method(request.method, payload) - .build() - - return@addInterceptor chain.proceed(newRequest) - } - return@addInterceptor response - } - chain.proceed(request) - } - .rateLimitHost(baseUrl.toHttpUrl(), 1, 2) - .build() - - private fun setToken() { - val document = client.newCall(GET(baseUrl, headers)).execute().asJsoup() - mtToken = document.selectFirst("input.input-search[data-csrf]")!!.attr("data-csrf") - } - - override fun popularMangaRequest(page: Int): Request { - val payloadObj = PayloadManga( - page = page, - token = mtToken, - ) - - val payload = json.encodeToString(payloadObj).toRequestBody(JSON_MEDIA_TYPE) - - val apiHeaders = headersBuilder() - .add("Accept", ACCEPT_JSON) - .add("Content-Type", payload.contentType().toString()) - .build() - - return POST("$baseUrl/mangas?sort=views", apiHeaders, payload) - } - - override fun popularMangaParse(response: Response): MangasPage { - val jsonString = response.body.string() - - val result = json.decodeFromString(jsonString) - - val mangas = result.mangas.map { - SManga.create().apply { - setUrlWithoutDomain("$baseUrl/manga/${it.slug}") - title = it.title - thumbnail_url = "$imgCDNUrl/mangas/${it.thumbnailFileName}" - } - } - val hasNextPage = result.totalPages > result.page - - return MangasPage(mangas, hasNextPage) - } - - override fun latestUpdatesRequest(page: Int): Request { - val payloadObj = PayloadManga( - page = page, - token = mtToken, - ) - - val payload = json.encodeToString(payloadObj).toRequestBody(JSON_MEDIA_TYPE) - - val apiHeaders = headersBuilder() - .add("Accept", ACCEPT_JSON) - .add("Content-Type", payload.contentType().toString()) - .build() - - return POST("$baseUrl/mangas?sort=date", apiHeaders, payload) - } - - override fun latestUpdatesParse(response: Response) = popularMangaParse(response) - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - if (query.isNotEmpty()) { - if (query.length < 2) throw Exception("La cadena de búsqueda debe tener por lo menos 2 caracteres") - - val payloadObj = PayloadSearch( - query = query, - token = mtToken, - ) - val payload = json.encodeToString(payloadObj).toRequestBody(JSON_MEDIA_TYPE) - - val apiHeaders = headersBuilder() - .add("Accept", ACCEPT_JSON) - .add("Content-Type", payload.contentType().toString()) - .build() - - return POST("$baseUrl/mangas/search#$query", apiHeaders, payload) - } - - val url = "$baseUrl/mangas".toHttpUrlOrNull()!!.newBuilder() - - filters.forEach { filter -> - when (filter) { - is OrderFilter -> { - url.addQueryParameter("sort", filter.toUriPart()) - } - is TypeFilter -> { - filter.state.forEach { content -> - if (content.state) url.addQueryParameter("type[]", content.id) - } - } - is StatusFilter -> { - filter.state.forEach { content -> - if (content.state) url.addQueryParameter("status[]", content.id) - } - } - is DemographicFilter -> { - filter.state.forEach { content -> - if (content.state) url.addQueryParameter("demographic[]", content.id) - } - } - is ContentFilter -> { - filter.state.forEach { content -> - if (content.state) url.addQueryParameter("content[]", content.id) - } - } - is FormatFilter -> { - filter.state.forEach { content -> - if (content.state) url.addQueryParameter("format[]", content.id) - } - } - is GenreFilter -> { - filter.state.forEach { content -> - if (content.state) url.addQueryParameter("genre[]", content.id) - } - } - is ThemeFilter -> { - filter.state.forEach { content -> - if (content.state) url.addQueryParameter("theme[]", content.id) - } - } - else -> {} - } - } - - val payloadObj = PayloadManga( - page = page, - token = mtToken, - ) - val payload = json.encodeToString(payloadObj).toRequestBody(JSON_MEDIA_TYPE) - - val apiHeaders = headersBuilder() - .add("Accept", ACCEPT_JSON) - .add("Content-Type", payload.contentType().toString()) - .build() - - return POST(url.build().toString(), apiHeaders, payload) - } - - override fun searchMangaParse(response: Response): MangasPage { - val query = response.request.url.fragment - val jsonString = response.body.string() - - if (!query.isNullOrEmpty()) { - val result = json.decodeFromString(jsonString) - - val mangas = result.result.map { - SManga.create().apply { - setUrlWithoutDomain("$baseUrl/manga/${it.slug}") - title = it.title - thumbnail_url = "$imgCDNUrl/mangas/${it.thumbnailFileName}" - } - } - - return MangasPage(mangas, false) - } - - val result = json.decodeFromString(jsonString) - - val mangas = result.mangas.map { - SManga.create().apply { - setUrlWithoutDomain("$baseUrl/manga/${it.slug}") - title = it.title - thumbnail_url = "$imgCDNUrl/mangas/${it.thumbnailFileName}" - } - } - val hasNextPage = result.totalPages > result.page - - return MangasPage(mangas, hasNextPage) - } - - override fun mangaDetailsParse(response: Response): SManga { - val document = response.asJsoup() - - return SManga.create().apply { - document.selectFirst("div.mangas-content")!!.let { mangasContent -> - thumbnail_url = mangasContent.selectFirst("div.manga-image > img")!!.attr("abs:data-src") - val summary = mangasContent.selectFirst("div.synopsis > p")?.ownText()?.trim() ?: "" - with(mangasContent.selectFirst("ul.list-group")!!) { - description = createDescription(this, summary) - genre = createGenres(this) - author = selectFirst("li:has(strong:contains(Autor)) > a")?.ownText()?.trim() - artist = selectFirst("li:has(strong:contains(Artista)) > a")?.ownText()?.trim() - status = selectFirst("li:has(strong:contains(Estado))")?.ownText()?.trim()!!.toStatus() - } - } - } - } - - private fun createGenres(element: Element): String { - val demographic = element.select("li:has(strong:contains(Demografía)) a").joinToString { it.text() } - val genres = element.select("li:has(strong:contains(Géneros)) a").joinToString { it.text() } - val themes = element.select("li:has(strong:contains(Temas)) a").joinToString { it.text() } - val content = element.select("li:has(strong:contains(Contenido)) a").joinToString { it.text() } - return listOf(demographic, genres, themes, content).joinToString(", ") - } - - private fun createDescription(element: Element, summary: String): String { - val originalName = element.selectFirst("li:has(strong:contains(Original))")?.ownText()?.trim() ?: "" - val alternativeName = element.select("li:has(strong:contains(Alternativo)) span.alter-name").text() - val year = element.selectFirst("li:has(strong:contains(Año))")?.ownText()?.trim() ?: "" - val animeAdaptation = element.selectFirst("li:has(strong:contains(Anime))")?.ownText()?.trim() ?: "" - val country = element.selectFirst("li:has(strong:contains(País))")?.ownText()?.trim() ?: "" - return StringBuilder() - .appendLine("Nombre Original: $originalName") - .appendLine("Títulos Alternativos: $alternativeName") - .appendLine("Año: $year") - .appendLine("Adaptación al Anime: $animeAdaptation") - .appendLine("País: $country") - .appendLine() - .appendLine("Sinopsis: $summary") - .toString() - } - - override fun chapterListRequest(manga: SManga): Request { - val payloadObj = PayloadChapter( - token = mtToken, - ) - - val payload = json.encodeToString(payloadObj).toRequestBody(JSON_MEDIA_TYPE) - - val apiHeaders = headersBuilder() - .add("Accept", ACCEPT_JSON) - .add("Content-Type", payload.contentType().toString()) - .build() - - return POST("$baseUrl${manga.url}", apiHeaders, payload) - } - - override fun chapterListParse(response: Response): List { - return response.asJsoup().select("li").map { - SChapter.create().apply { - setUrlWithoutDomain(it.select("a").attr("href")) - name = it.selectFirst("a")!!.ownText().trim() - date_upload = parseRelativeDate(it.selectFirst("span")!!.ownText().trim()) - } - } - } - - override fun pageListParse(response: Response): List { - val document = response.asJsoup() - val script = document.selectFirst("script:containsData(window.chapter)")!!.data() - val jsonString = CHAPTERS_REGEX.find(script)!!.groupValues[1] - - val result = json.decodeFromString(jsonString) - val slug = result.manga.slug - val number = result.number.toString() - - return result.images.map { - val imageUrl = "$imgCDNUrl/chapters/$slug/$number/${it.value.name}.${it.value.format}" - Page(it.key.toInt(), "", imageUrl) - }.sortedBy { it.index } - } - - override fun getFilterList() = FilterList( - Filter.Header("Los filtros serán ignorados si se realiza una búsqueda textual"), - Filter.Separator(), - OrderFilter(), - Filter.Separator(), - TypeFilter(getFilterTypeList()), - Filter.Separator(), - StatusFilter(getFilterStatusList()), - Filter.Separator(), - DemographicFilter(getFilterDemographicList()), - Filter.Separator(), - ContentFilter(getFilterContentList()), - Filter.Separator(), - FormatFilter(getFilterFormatList()), - Filter.Separator(), - GenreFilter(getFilterGenreList()), - Filter.Separator(), - ThemeFilter(getFilterThemeList()), - ) - - override fun imageUrlParse(response: Response) = throw UnsupportedOperationException("Not used.") - - private fun parseRelativeDate(date: String): Long { - val number = Regex("""(\d+)""").find(date)?.value?.toIntOrNull() ?: return 0 - val cal = Calendar.getInstance() - - return when { - WordSet("segundo").anyWordIn(date) -> cal.apply { add(Calendar.SECOND, -number) }.timeInMillis - WordSet("minuto").anyWordIn(date) -> cal.apply { add(Calendar.MINUTE, -number) }.timeInMillis - WordSet("hora").anyWordIn(date) -> cal.apply { add(Calendar.HOUR, -number) }.timeInMillis - WordSet("día").anyWordIn(date) -> cal.apply { add(Calendar.DAY_OF_MONTH, -number) }.timeInMillis - WordSet("semana").anyWordIn(date) -> cal.apply { add(Calendar.DAY_OF_MONTH, -number * 7) }.timeInMillis - WordSet("mes").anyWordIn(date) -> cal.apply { add(Calendar.MONTH, -number) }.timeInMillis - WordSet("año").anyWordIn(date) -> cal.apply { add(Calendar.YEAR, -number) }.timeInMillis - else -> 0 - } - } - class WordSet(private vararg val words: String) { - fun anyWordIn(dateString: String): Boolean = words.any { dateString.contains(it, ignoreCase = true) } - } - - private val Request.bodyString: String - get() { - val requestCopy = newBuilder().build() - val buffer = Buffer() - - return runCatching { buffer.apply { requestCopy.body!!.writeTo(this) }.readUtf8() } - .getOrNull() ?: "" - } - - companion object { - private const val ACCEPT_JSON = "application/json, text/plain, */*" - private val JSON_MEDIA_TYPE = "application/json".toMediaType() - - private val CHAPTERS_REGEX = """window\.chapter\s*=\s*'(.+?)';""".toRegex() - } -} diff --git a/src/es/mangatigre/src/eu/kanade/tachiyomi/extension/es/mangatigre/MangaTigreDto.kt b/src/es/mangatigre/src/eu/kanade/tachiyomi/extension/es/mangatigre/MangaTigreDto.kt deleted file mode 100644 index 7a82d9ce3..000000000 --- a/src/es/mangatigre/src/eu/kanade/tachiyomi/extension/es/mangatigre/MangaTigreDto.kt +++ /dev/null @@ -1,76 +0,0 @@ -package eu.kanade.tachiyomi.extension.es.mangatigre - -import eu.kanade.tachiyomi.source.model.SManga -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable -import kotlinx.serialization.json.JsonPrimitive - -@Serializable -data class PayloadManga( - val page: Int, - @SerialName("_token") val token: String, -) - -@Serializable -data class PayloadChapter( - @SerialName("_token") val token: String, -) - -@Serializable -data class PayloadSearch( - val query: String, - @SerialName("_token") val token: String, -) - -@Serializable -data class MangasDto( - @SerialName("current_page") val page: Int, - @SerialName("last_page") val totalPages: Int, - @SerialName("data") val mangas: List, -) - -@Serializable -data class MangasDataDto( - @SerialName("name") val title: String, - val slug: String, - @SerialName("image") val thumbnailFileName: String, -) - -@Serializable -data class ChapterDto( - val manga: ChapterMangaInfoDto, - val number: JsonPrimitive, // Can be Int or Float - val images: Map, -) - -@Serializable -data class ChapterMangaInfoDto( - val slug: String, -) - -@Serializable -data class ChapterImagesDto( - val name: String, - val format: String, -) - -@Serializable -data class SearchDto( - val result: List, -) - -@Serializable -data class SearchDataDto( - val id: Int, - @SerialName("name") val title: String, - val slug: String, - @SerialName("image")val thumbnailFileName: String, -) - -fun String.toStatus(): Int = when (this) { - "En Marcha" -> SManga.ONGOING - "Terminado" -> SManga.COMPLETED - "Detenido" -> SManga.ON_HIATUS - "Pausado" -> SManga.ON_HIATUS - else -> SManga.UNKNOWN -} diff --git a/src/es/mangatigre/src/eu/kanade/tachiyomi/extension/es/mangatigre/MangaTigreFilters.kt b/src/es/mangatigre/src/eu/kanade/tachiyomi/extension/es/mangatigre/MangaTigreFilters.kt deleted file mode 100644 index 6d6a12d90..000000000 --- a/src/es/mangatigre/src/eu/kanade/tachiyomi/extension/es/mangatigre/MangaTigreFilters.kt +++ /dev/null @@ -1,148 +0,0 @@ -package eu.kanade.tachiyomi.extension.es.mangatigre - -import eu.kanade.tachiyomi.source.model.Filter - -class Type(name: String, val id: String) : Filter.CheckBox(name) -class TypeFilter(values: List) : Filter.Group("Tipos", values) - -class Status(name: String, val id: String) : Filter.CheckBox(name) -class StatusFilter(values: List) : Filter.Group("Estado", values) - -class Demographic(name: String, val id: String) : Filter.CheckBox(name) -class DemographicFilter(values: List) : Filter.Group("Demografía", values) - -class Content(name: String, val id: String) : Filter.CheckBox(name) -class ContentFilter(values: List) : Filter.Group("Contenido", values) - -class Format(name: String, val id: String) : Filter.CheckBox(name) -class FormatFilter(values: List) : Filter.Group("Formato", values) - -class Genre(name: String, val id: String) : Filter.CheckBox(name) -class GenreFilter(values: List) : Filter.Group("Géneros", values) - -class Theme(name: String, val id: String) : Filter.CheckBox(name) -class ThemeFilter(values: List) : Filter.Group("Temas", values) - -open class UriPartFilter(displayName: String, val vals: Array>) : - Filter.Select(displayName, vals.map { it.first }.toTypedArray()) { - fun toUriPart() = vals[state].second -} - -class OrderFilter() : UriPartFilter( - "Ordenar por", - arrayOf( - Pair("Alfabético", "name"), - Pair("Vistas", "views"), - Pair("Fecha Estreno", "date"), - ), -) - -fun getFilterTypeList() = listOf( - Type("Manga", "1"), - Type("Manhwa", "2"), - Type("Manhua", "3"), -) - -fun getFilterStatusList() = listOf( - Status("En Marcha", "1"), - Status("Terminado", "2"), - Status("Detenido", "3"), - Status("Pausado", "4"), -) - -fun getFilterDemographicList() = listOf( - Demographic("Shonen", "1"), - Demographic("Seinen", "2"), - Demographic("Shojo", "3"), - Demographic("Josei", "4"), -) - -fun getFilterContentList() = listOf( - Content("Ecchi", "1"), - Content("Gore", "2"), - Content("Smut", "3"), - Content("Violencia Sexual", "4"), -) - -fun getFilterFormatList() = listOf( - Format("Adaptación", "14"), - Format("Antalogía", "9"), - Format("Color Completo", "18"), - Format("Coloreado Oficial", "19"), - Format("Coloreado Por Fan", "15"), - Format("Creado Por Usuario", "20"), - Format("Delincuencia", "16"), - Format("Doujinshi", "10"), - Format("Galardonado", "13"), - Format("One Shot", "11"), - Format("Tira Larga", "17"), - Format("Webcomic", "12"), - Format("YonKoma", "8"), -) - -fun getFilterGenreList() = listOf( - Genre("Acción", "49"), - Genre("Aventura", "50"), - Genre("Boys Love", "75"), - Genre("Chicas Mágicas", "73"), - Genre("Ciencia-Ficción", "64"), - Genre("Comedia", "51"), - Genre("Crimen", "52"), - Genre("Deporte", "65"), - Genre("Drama", "53"), - Genre("Fantasía", "54"), - Genre("Filosófico", "61"), - Genre("Girls Love", "76"), - Genre("Guerra", "74"), - Genre("Histórico", "55"), - Genre("Horror", "56"), - Genre("Isekai", "57"), - Genre("Mecha", "58"), - Genre("Médica", "59"), - Genre("Misterio", "60"), - Genre("Psicológico", "62"), - Genre("Recuentos De La Vida", "72"), - Genre("Romance", "63"), - Genre("Superhéroe", "66"), - Genre("Thriller", "67"), - Genre("Tragedia", "68"), - Genre("Wuxia", "69"), - Genre("Yaoi", "70"), - Genre("Yuri", "71"), -) - -fun getFilterThemeList() = listOf( - Theme("Animales", "52"), - Theme("Apocalíptico", "50"), - Theme("Artes Marciales", "60"), - Theme("Chicas Monstruo", "77"), - Theme("Cocinando", "53"), - Theme("Crossdressing", "79"), - Theme("Delincuencia", "78"), - Theme("Demonios", "54"), - Theme("Extranjeros", "51"), - Theme("Fantasma", "55"), - Theme("Género Bender", "81"), - Theme("Gyaru", "56"), - Theme("Harén", "57"), - Theme("Incesto", "58"), - Theme("Lolicon", "59"), - Theme("Mafia", "64"), - Theme("Magia", "65"), - Theme("Militar", "61"), - Theme("Monstruos", "62"), - Theme("Música", "63"), - Theme("Ninja", "66"), - Theme("Policía", "67"), - Theme("Realidad Virtual", "74"), - Theme("Reencarnación", "68"), - Theme("Samurái", "73"), - Theme("Shotacon", "71"), - Theme("Sobrenatural", "69"), - Theme("Superpoderes", "82"), - Theme("Supervivencia", "72"), - Theme("Vampiros", "75"), - Theme("Vida Escolar", "70"), - Theme("Videojuegos", "80"), - Theme("Zombis", "76"), -) diff --git a/src/vi/qmanga/AndroidManifest.xml b/src/vi/qmanga/AndroidManifest.xml deleted file mode 100644 index 8d2245f4a..000000000 --- a/src/vi/qmanga/AndroidManifest.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/src/vi/qmanga/build.gradle b/src/vi/qmanga/build.gradle deleted file mode 100644 index 88f3c29ed..000000000 --- a/src/vi/qmanga/build.gradle +++ /dev/null @@ -1,12 +0,0 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' - -ext { - extName = 'QManga' - pkgNameSuffix = 'vi.qmanga' - extClass = '.QManga' - extVersionCode = 1 - isNsfw = true -} - -apply from: "$rootDir/common.gradle" \ No newline at end of file diff --git a/src/vi/qmanga/res/mipmap-hdpi/ic_launcher.png b/src/vi/qmanga/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 6f62aa8eb..000000000 Binary files a/src/vi/qmanga/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/vi/qmanga/res/mipmap-mdpi/ic_launcher.png b/src/vi/qmanga/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 9f6f86fc6..000000000 Binary files a/src/vi/qmanga/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/vi/qmanga/res/mipmap-xhdpi/ic_launcher.png b/src/vi/qmanga/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 9f2fed409..000000000 Binary files a/src/vi/qmanga/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/vi/qmanga/res/mipmap-xxhdpi/ic_launcher.png b/src/vi/qmanga/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index d18fa1151..000000000 Binary files a/src/vi/qmanga/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/vi/qmanga/res/mipmap-xxxhdpi/ic_launcher.png b/src/vi/qmanga/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 05bcfed06..000000000 Binary files a/src/vi/qmanga/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/vi/qmanga/res/web_hi_res_512.png b/src/vi/qmanga/res/web_hi_res_512.png deleted file mode 100644 index 329c8279b..000000000 Binary files a/src/vi/qmanga/res/web_hi_res_512.png and /dev/null differ diff --git a/src/vi/qmanga/src/eu/kanade/tachiyomi/extension/vi/qmanga/QManga.kt b/src/vi/qmanga/src/eu/kanade/tachiyomi/extension/vi/qmanga/QManga.kt deleted file mode 100644 index ddc2219e1..000000000 --- a/src/vi/qmanga/src/eu/kanade/tachiyomi/extension/vi/qmanga/QManga.kt +++ /dev/null @@ -1,1064 +0,0 @@ -package eu.kanade.tachiyomi.extension.vi.qmanga - -import eu.kanade.tachiyomi.network.GET -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 okhttp3.Headers -import okhttp3.HttpUrl.Companion.toHttpUrl -import okhttp3.OkHttpClient -import okhttp3.Request -import org.jsoup.nodes.Document -import org.jsoup.nodes.Element -import rx.Observable -import java.text.SimpleDateFormat -import java.util.Locale -import java.util.TimeZone - -class QManga : ParsedHttpSource() { - - override val name: String = "QManga" - - override val baseUrl: String = "https://qmanga5.net" - - override val lang: String = "vi" - - override val supportsLatest: Boolean = true - - override val client: OkHttpClient = network.cloudflareClient - - override fun headersBuilder(): Headers.Builder = - super.headersBuilder().add("Referer", "$baseUrl/") - - private val dateFormat = SimpleDateFormat("dd-MM-yyyy", Locale.US).apply { - timeZone = TimeZone.getTimeZone("Asia/Ho_Chi_Minh") - } - - override fun popularMangaRequest(page: Int): Request = - GET("$baseUrl/de-nghi/pho-bien/xem-nhieu?page=$page", headers) - - override fun popularMangaSelector(): String = "div.content-tab li" - - override fun popularMangaFromElement(element: Element): SManga = SManga.create().apply { - val imageCommicTab = element.select(".image-commic-bxh, .image-commic-tab") - - setUrlWithoutDomain(imageCommicTab.select("a").attr("href")) - thumbnail_url = imageCommicTab.select("img").attr("abs:data-src") - - title = element.select(".title-commic-tab").text() - } - - override fun popularMangaNextPageSelector(): String = "li.pag-next:not(.disabled)" - - override fun latestUpdatesRequest(page: Int): Request = - GET("$baseUrl/de-nghi/pho-bien/moi-nhat?page=$page", headers) - - override fun latestUpdatesSelector(): String = popularMangaSelector() - - override fun latestUpdatesFromElement(element: Element): SManga = popularMangaFromElement(element) - - override fun latestUpdatesNextPageSelector(): String = popularMangaNextPageSelector() - - override fun fetchSearchManga( - page: Int, - query: String, - filters: FilterList, - ): Observable { - return when { - query.startsWith(PREFIX_ID_SEARCH) -> { - val id = query.removePrefix(PREFIX_ID_SEARCH).trim() - val url = "/$id.html" - fetchMangaDetails( - SManga.create().apply { - this.url = url - }, - ) - .map { - it.url = url - MangasPage(listOf(it), false) - } - } - else -> super.fetchSearchManga(page, query, filters) - } - } - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val url = baseUrl.toHttpUrl().newBuilder().apply { - if (query.isNotBlank()) { - addPathSegment("tim-kiem") - addQueryParameter("q", query) - addQueryParameter("page", page.toString()) - } else { - // the `comedy` part doesn't really matter, it just wants a thing here to load - // the filtering page - addPathSegments("danh-muc/comedy") - (if (filters.isEmpty()) getFilterList() else filters) - .filterIsInstance() - .forEach { - addQueryParameter(it.query, it.toUriPart()) - } - } - }.build().toString() - return GET(url, headers) - } - - override fun searchMangaSelector(): String = popularMangaSelector() - - override fun searchMangaFromElement(element: Element): SManga = popularMangaFromElement(element) - - override fun searchMangaNextPageSelector(): String = popularMangaNextPageSelector() - - override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply { - title = document.select(".title-commic-detail").text() - author = document.select(".writer li").joinToString { it.text() } - description = document.select(".desc-commic-detail").text() - genre = document.select(".categories-list-detail-commic li a").joinToString { it.text() } - thumbnail_url = document.select(".img-commic-detail img").attr("abs:data-src") - - val statusString = document.select(".status_commic p").text() - status = when (statusString) { - "Đang tiến hành" -> SManga.ONGOING - "Đã hoàn thành" -> SManga.COMPLETED - else -> SManga.UNKNOWN - } - } - - override fun chapterListSelector(): String = ".ul-list-chaper-detail-commic li" - - override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply { - setUrlWithoutDomain(element.select("a").attr("href")) - name = element.select("a h3").text() - - val dateUploadString = element.select("span").first()?.text() - if (!dateUploadString.isNullOrEmpty()) { - date_upload = runCatching { - dateFormat.parse(dateUploadString)?.time - }.getOrNull() ?: 0L - } - } - - override fun pageListParse(document: Document): List { - // as an anti-scraper measure, you need to type a given keyword and complete - // a reCAPTCHA to unlock some chapters. i'm not doing that. - val isLocked = document.select(".lock-screen").first() != null - if (isLocked) { - throw Exception("Vui lòng mở khoá chương truyện này trong WebView") - } - - return document.select("img.image-commic").mapIndexed { idx, it -> - Page(idx, imageUrl = it.attr("abs:src")) - } - } - - override fun imageUrlParse(document: Document): String = - throw UnsupportedOperationException("Not used") - - override fun getFilterList(): FilterList = FilterList( - Filter.Header("Không dùng được với tìm bằng tiêu đề"), - GenreFilter(), - ScanlatorFilter(), - AuthorFilter(), - StatusFilter(), - SortFilter(), - ) - - open class UriPartFilter( - name: String, - val query: String, - private val vals: Array>, - state: Int = 0, - ) : Filter.Select(name, vals.map { it.first }.toTypedArray(), state) { - fun toUriPart() = vals[state].second - } - - private class StatusFilter : UriPartFilter( - "Trạng thái", - "status", - arrayOf( - Pair("Tất cả", ""), - Pair("Đã hoàn thành", "1"), - Pair("Chưa hoàn thành", "2"), - ), - ) - - private class SortFilter : UriPartFilter( - "Sắp xếp", - "sort", - arrayOf( - Pair("Mới nhất", "moi-nhat"), - Pair("Đang hot", "dang-hot"), - Pair("Cũ nhất", "cu-nhat"), - ), - 1, - ) - - // console.log([...document.querySelectorAll("select[name=cate] option")].map(e => `Pair("${e.innerText}", "${e.value}")`).join(",\n")) - private class GenreFilter : UriPartFilter( - "Thể loại", - "cate", - arrayOf( - Pair("Tất cả", ""), - Pair("Comedy", "comedy"), - Pair("Historical", "historical"), - Pair("Manhua", "manhua"), - Pair("Mystery", "mystery"), - Pair("Romance", "romance"), - Pair("Shoujo", "shoujo"), - Pair("Truyện Màu", "truyen-mau"), - Pair("Fantasy", "fantasy"), - Pair("Supernatural", "supernatural"), - Pair("School Life", "school-life"), - Pair("Slice of life", "slice-of-life"), - Pair("Drama", "drama"), - Pair("Action", "action"), - Pair("Adventure", "adventure"), - Pair("Martial Arts", "martial-arts"), - Pair("One Shot", "one-shot"), - Pair("Sci-fi", "sci-fi"), - Pair("Shounen", "shounen"), - Pair("Ecchi", "ecchi"), - Pair("Horror", "horror"), - Pair("Adult", "adult"), - Pair("Shounen Ai", "shounen-ai"), - Pair("Webtoon", "webtoon"), - Pair("Harem", "harem"), - Pair("Yaoi", "yaoi"), - Pair("Truyện Nhật (Manga)", "truyen-nhat-manga"), - Pair("Doujinshi", "doujinshi"), - Pair("Yuri", "yuri"), - Pair("Smut", "smut"), - Pair("Chuyển sinh", "chuyen-sinh"), - Pair("Seinen", "seinen"), - Pair("Sports", "sports"), - Pair("manga", "manga"), - Pair("Manhwa", "manhwa"), - Pair("Truyền Việt", "truyen-viet"), - Pair("Mecha", "mecha"), - Pair("Comic", "comic"), - Pair("Soft Yuri", "soft-yuri"), - Pair("Trinh Thám", "trinh-tham"), - Pair("Xuyên Không", "xuyen-khong"), - Pair("Soft Yaoi", "soft-yaoi"), - Pair("Psychological", "psychological"), - Pair("NTR", "ntr"), - Pair("Mature", "mature"), - Pair("Tạp chí truyện tranh", "tap-chi-truyen-tranh"), - Pair("Đam Mỹ", "dam-my"), - Pair("Detective", "detective"), - Pair("Magic", "magic"), - Pair("Boy Love", "boy-love"), - Pair("Live action", "live-action"), - Pair("Truyện scan", "truyen-scan"), - Pair("18+", "18"), - Pair("Việt Nam", "viet-nam"), - Pair("Trọng Sinh", "trong-sinh"), - Pair("Huyền Huyễn", "huyen-huyen"), - Pair("Music", "music"), - Pair("Tu chân - tu tiên", "tu-chan-tu-tien"), - Pair("Game", "game"), - Pair("S&M", "sm"), - Pair("Hài hước", "hai-huoc"), - Pair("Không Che", "khong-che"), - Pair("Crime", "crime"), - Pair("Girl Love - Bách Hợp", "girl-love-bach-hop"), - Pair("Romance - Lãng Mạn", "romance-lang-man"), - Pair("Monsters", "monsters"), - Pair("Trùng Sinh", "trung-sinh"), - Pair("Phiêu Lưu", "phieu-luu"), - Pair("Bl manhua", "bl-manhua"), - Pair("Hành Động", "hanh-dong"), - Pair("hắc bang", "hac-bang"), - Pair("vampire", "vampire"), - Pair("phúc hắc công", "phuc-hac-cong"), - Pair("Hệ thống", "he-thong"), - Pair("tổng tài công", "tong-tai-cong"), - Pair("Hiện đại", "hien-dai"), - Pair("vườn trường", "vuon-truong"), - Pair("ABO", "abo"), - Pair("Showbiz", "showbiz"), - Pair("BL Manhwa", "bl-manhwa"), - Pair("Văn phòng", "van-phong"), - ), - ) - - // console.log([...document.querySelectorAll("select[name=writer] option")].map(e => `Pair("${e.innerText}", "${e.value}")`).join(",\n")) - private class AuthorFilter : UriPartFilter( - "Tác giả", - "writer", - arrayOf( - Pair("Tất cả", ""), - Pair("Đang Cập Nhật", "dang-cap-nhat"), - Pair("NetTruyen", "nettruyen"), - Pair("Đường Gia Tam Thiếu", "duong-gia-tam-thieu"), - Pair("Mộng tiên giới", "mong-tien-gioi"), - Pair("Sweet Comic", "sweet-comic"), - Pair("Trịnh Kiến Hòa", "trinh-kien-hoa"), - Pair("MH Channel", "mh-channel"), - Pair("Thiên Tằm Thổ Đậu", "thien-tam-tho-dau"), - Pair("Kamachi Kazuma", "kamachi-kazuma"), - Pair("Melody Happy Group", "melody-happy-group"), - Pair("Khôi Quỷ Các", "khoi-quy-cac"), - Pair("Đặng Chí Huy", "dang-chi-huy"), - Pair("Aikawa Saki", "aikawa-saki"), - Pair("Đang tiến hành", "dang-tien-hanh"), - Pair("Linh Miêu Nhóm", "linh-mieu-nhom"), - Pair("Hoàng Ngọc Lang", "hoang-ngoc-lang"), - Pair("Rumiko Takahashi", "rumiko-takahashi"), - Pair("Manhwa TV", "manhwa-tv"), - Pair("MIYAJIMA Reiji", "miyajima-reiji"), - Pair("Góc nhỏ của Mamoru", "goc-nho-cua-mamoru"), - Pair("CHƯA CẬP NHẬT", "chua-cap-nhat"), - Pair("Shiraishi Yuki", "shiraishi-yuki"), - Pair("Ôn Nhật Lương", "on-nhat-luong"), - Pair("Murata Shinya", "murata-shinya"), - Pair("Jeon Geuk Jin", "jeon-geuk-jin"), - Pair("Kotoyama", "kotoyama"), - Pair("Suzuki Nakaba", "suzuki-nakaba"), - Pair("One", "one"), - Pair("Fujiko F. Fujio", "fujiko-f-fujio"), - Pair("Hiroyuki", "hiroyuki"), - Pair("YAGAMI Rina", "yagami-rina"), - Pair("Chưỡng Duyệt", "chuong-duyet"), - Pair("INOUE Kenji", "inoue-kenji"), - Pair("Mã Vinh Thành", "ma-vinh-thanh"), - Pair("Bác Dịch Động Mạn", "bac-dich-dong-man"), - Pair("Nakamura Asumiko", "nakamura-asumiko"), - Pair("Hữu Lộc Văn Hoa", "huu-loc-van-hoa"), - Pair("Pageratta", "pageratta"), - Pair("Fushimi Tsukasa", "fushimi-tsukasa"), - Pair("Park Jin Hwan", "park-jin-hwan"), - Pair("Khưu Phúc Long", "khuu-phuc-long"), - Pair("Phỉ Nguyệt Chi Truyện", "phi-nguyet-chi-truyen"), - Pair("Azusa Kina", "azusa-kina"), - Pair("KITADA Ryouma", "kitada-ryouma"), - Pair("Mikoshiba Nana", "mikoshiba-nana"), - Pair("Moscareto", "moscareto"), - Pair("Tooyama Ema", "tooyama-ema"), - Pair("Shinkai Makoto", "shinkai-makoto"), - Pair("Mikawa Ghost", "mikawa-ghost"), - Pair("Mitsunaga Yasunori", "mitsunaga-yasunori"), - ), - ) - - // console.log([...document.querySelectorAll("select[name=translate] option")].map(e => `Pair("${e.innerText}", "${e.value}")`).join(",\n")) - private class ScanlatorFilter : UriPartFilter( - "Nhóm dịch", - "translate", - arrayOf( - Pair("Tất cả", ""), - Pair("Miu Miu", "miu-miu"), - Pair("Qmanga Team", "qmanga-team"), - Pair("Aoi Ame Group", "aoi-ame-group"), - Pair("Nhàn Rỗi Team", "nhàn-rõi-team"), - Pair("Beaz Team", "beaz-team"), - Pair("Delay Team", "delay-team"), - Pair("Trà Có Ga", "tra-co-ga"), - Pair("Âu Thiên Team", "au-thien-team"), - Pair("Rainbow Factory", "rainbow-factory"), - Pair("Kẹo Nướng Trong Mưa", "keo-nuong-trong-mua"), - Pair("Lết từ từ team", "let-tu-tu-team"), - Pair("Nhất Tiếu Chi Vương", "nhat-tieu-chi-vuong"), - Pair("404 Error Team", "404-error-team"), - Pair("Chill Blue Team", "chill-blue-team"), - Pair("Roads Untraveled", "roads-untraveled"), - Pair("Đen Xì", "den-xi"), - Pair("Hồi còn sống tụi tui dịch truyện này", "hoi-con-song-tui-tui-dich-truyen-nay"), - Pair("Phong Linh Cung - 风泠龚", "phong-linh-cung-风泠龚"), - Pair("Secret Bears", "secret-bears"), - Pair("KloudLand", "kloudland"), - Pair("chiếc lều màu hồng", "chiec-leu-mau-hong"), - Pair("Anastashia", "anastashia"), - Pair("Ankenna", "ankenna"), - Pair("Dammei BL", "dammei-bl"), - Pair("Vườn Cam Comic", "vuon-cam-comic"), - Pair("Xiao Cin", "xiao-cin"), - Pair("Feisty Forwarders", "feisty-forwarders"), - Pair("Góc nhỏ của Mưa", "goc-nho-cua-mua"), - Pair("Băng Di Team", "bang-di-team"), - Pair("Junii House", "junii-house"), - Pair("Augenstern Team", "augenstern-team"), - Pair("Player Team", "player-team"), - Pair("Fushi Translation Team", "fushi-translation-team"), - Pair("Bông Cúc Thần Chưởng", "bong-cuc-than-chuong"), - Pair("Cục Bột Nhỏ", "cuc-bot-nho"), - Pair("Michi Team", "michi-team"), - Pair("Cửa hàng hoa Phong Lữ", "cua-hang-hoa-phong-lu"), - Pair("Boss Translation BL", "boss-translation-bl"), - Pair("Bạch Nguyệt Comics", "bach-nguyet-comics"), - Pair("Mary Hạ Lục", "mary-ha-luc"), - Pair("Thiên Chu Chi Dạ", "thien-chu-chi-da"), - Pair("GOLD GRAPE", "gold-grape"), - Pair("Solenda Sabie", "solenda-sabie"), - Pair("Beautiful moment", "beautiful-moment"), - Pair("ㅤㅤㅤ", "ㅤㅤㅤ"), - Pair("Púp Pơ Team", "pup-po-team"), - Pair("DamLord", "damlord"), - Pair("Động Mlem Của Hà", "dong-mlem-cua-ha"), - Pair("MiniLights", "minilights"), - Pair("Tayanen Team", "tayanen-team"), - Pair("Fish&Chip Translation Team", "fishchip-translation-team"), - Pair("Trạm Dịch - BeoNa", "tram-dich-beona"), - Pair("Vì Tinh Tú Hình Củ Chuối", "vi-tinh-tu-hinh-cu-chuoi"), - Pair("Ổ Truyện Nhà Táo", "o-truyen-nha-tao-otnt"), - Pair("Daw World", "daw-world"), - Pair("Mi Tesoro", "mi-tesoro"), - Pair("Im Group", "im-group"), - Pair("Ttriteam", "ttriteam"), - Pair("Rina Team", "rina-team"), - Pair("1915 Station", "1915-station"), - Pair("Twinkling Stars Team", "twinkling-stars-team"), - Pair("Phù Thủy Du Hành Team", "phu-thuy-du-hanh-team"), - Pair("Mợt mỏi team", "mot-moi-team"), - Pair("Chúng tôi là XLNĐ hê hê", "chung-toi-la-xlnd-he-he"), - Pair("Siu Nhơn Vàng", "siu-nhon-vang"), - Pair("MiuTee team", "miutee-team"), - Pair("Cừu Pông Translation", "cuu-pong-translation"), - Pair("Truyện Nhà Cừu", "truyen-nha-cuu"), - Pair("Hố Tiền Sử", "ho-tien-su"), - Pair("Cục Bông únu", "cuc-bong-unu"), - Pair("Ăn cơm chó cùng Swoopy", "an-com-cho-cung-swoopy"), - Pair("Gấu Mèo Team", "gau-meo-team"), - Pair("Nhà Sủi Cảo", "nha-sui-cao"), - Pair("Thất Nguyệt Team", "that-nguyet-team"), - Pair("Gió Réo Rì Rào", "gio-reo-ri-rao"), - Pair("Team Dịch Truyện Chào Cậu", "team-dich-truyen-chao-cau"), - Pair("Lưu Huỳnh Màu Vàng", "luu-huynh-mau-vang"), - Pair("Yukino Team", "yukino-team"), - Pair("Chuột Đồng Team", "chuot-dong-team"), - Pair("TIÊU DAO Comics", "tieu-dao-comics"), - Pair("Ổ nhỏ của Amber và Tio", "ổ-nhỏ-của-amber-và-tio"), - Pair("Chuồng Gà Mini", "chuong-ga-mini"), - Pair("Tảo Comics", "tao-comics"), - Pair("Gemini", "gemini"), - Pair("Ổ truyện của cá heo nhỏ", "o-truyen-cua-ca-heo-nho"), - Pair("Bơ Đậu Phộng", "bo-dau-phong"), - Pair("Khủng Long Ngàn Thước", "khung-long-ngan-thuoc"), - Pair("Ổ Lười Nhà Cá", "o-luoi-nha-ca"), - Pair("Tắc Kè Team", "tac-ke-team"), - Pair("Green Flow Comic", "green-flow-comic"), - Pair("AmyR", "amyr"), - Pair("•《Ngôi Nhà Số 19》•", "ngoi-nha-so-19"), - Pair("Ổ Mèo Hoang", "o-meo-hoang"), - Pair("Lâu đài băng - Ice Castle", "lau-dai-bang-ice-castle"), - Pair("Sakura Translation Team", "sakura-translation-team"), - Pair("Hoàng Tử Ếch", "hoang-tu-ech"), - Pair("Kitsune Team", "kitsune-team"), - Pair("Truyện nhà Scrunchies", "truyen-nha-scrunchies"), - Pair("Lang Nhị", "lang-nhi"), - Pair("Truyện Của Lynnaa", "truyen-cua-lynnaa"), - Pair("BimBim Team", "bimbim-team"), - Pair("Ổ Truyện Của Meo Meo", "o-truyen-cua-meo-meo"), - Pair("𝑪𝒐̂́ 𝑵𝒉𝒂̂𝒏 𝑿𝒂 𝑳𝒂̣", "co-nhan-xa-la"), - Pair("I.M", "im"), - Pair("Thiên Sơ Các", "thien-so-các"), - Pair("Wait A Moment", "wait-a-moment"), - Pair("Marceiline Weeaboo", "marceiline-weeaboo"), - Pair("Ổ Truyện Dịch Của SunYi", "o-truyen-dich-cua-sunyi"), - Pair("Tẩm Cung Nhà Miêu", "tam-cung-nha-mieu"), - Pair("Only Chuối.", "only-chuoi"), - Pair("Goky Team", "goky-team"), - Pair("Wicked House Translation Team", "wicked-house-translation-team"), - Pair("Thanh Thời - 清时", "thanh-thoi-清时"), - Pair("Cuồng Manga", "cuong-manga"), - Pair("Team Mèo Lười", "team-meo-luoi"), - Pair("Chưa Có Tên Nên Mình Để Vậy Á", "chua-co-ten-nen-minh-de-vay-a"), - Pair("Đào Hoa Đàm Thủy - 桃花潭水", "dao-hoa-dam-thuy-桃花潭水"), - Pair("Angels And Demons", "angels-and-demons"), - Pair("Lazie chăm chỉ", "lazie-cham-chi"), - Pair("Fufujoshi Is We", "fufujoshi-is-we"), - Pair("SGG.v3", "sggv3"), - Pair("Kén Chọn team", "ken-chon-team"), - Pair("BoraBora", "borabora"), - Pair("Day Dreaming Cat Comic", "day-dreaming-cat-comic"), - Pair("Mộng Mer Team", "mong-mer-team"), - Pair("Stray Dogs", "stray-dogs"), - Pair("The Duckling Team", "the-duckling-team"), - Pair("Flight Sweet Team", "flight-sweet-team"), - Pair("Krazy Solar Team", "krazy-solar-team"), - Pair("RAPTOR Project Team", "raptor-project-team"), - Pair("Thỏ Mùa Đông", "tho-mua-dong"), - Pair("Toasted Bread Translation Group", "toasted-bread-translation-group"), - Pair("Hội_pay_lăk", "hoipaylak"), - Pair("Châu", "chau"), - Pair("Hội_Đêm_Pay_Lăk", "hoidempaylak"), - Pair("Trần thanh", "tran-thanh"), - Pair("nhuệ tinh tinh", "nhue-tinh-tinh"), - Pair("test1234567123", "test1234567123"), - Pair("Thích Ăn Bún Bò", "thich-an-bun-bo"), - Pair("Nhện Nhọ Team", "nhen-nho-team"), - Pair("Cú Đêm", "Cy"), - Pair("LGBTQ", "lgbtq"), - Pair("Moe team", "moe-team"), - Pair("Yellow Ribbon Translation", "yellow-ribbon-translation"), - Pair("t_3r5", "t3r5"), - Pair("Chan Zu team bông du", "chan-zu-team-bong-du"), - Pair("Cá Muối Hội", "ca-muoi-hoi"), - Pair("Dưa hấu", "dua-hau"), - Pair("Bát Nhã A", "bat-nha-a"), - Pair("Fufujjoshi Is Us-Fiu", "fufujjoshi-is-us-fiu"), - Pair("Only Me Translate", "only-me"), - Pair("企鹅-Doanh Trại Cánh Cụt", "doanh-trai-canh-cut"), - Pair("Test", "test"), - Pair("Cục Bông Nhỏ", "cuc-bong-nho"), - Pair("Thỏ Nhỏ là Hủ", "tho-nho-la-hu"), - Pair("Ghost Team", "ghost-team"), - Pair("Kem Tươi Comic", "kem-tuoi-comic"), - Pair("Vergissmeinnicht", "thang13vamuathu5"), - Pair("Vivender", "vivender"), - Pair("Sweet Girl Crime Gang", "sweet-girl-crime-gang"), - Pair("Lạc Thanh Hà", "lac-thanh-ha"), - Pair("Zhu Comics", "zhu-comics"), - Pair("Team lạnh lùng", "team-lanh-lung"), - Pair("bí mật", "bi-mat"), - Pair("Lon nước Ngọt Đéng Yêu", "lon-nuoc-ngot-deng-yeu"), - Pair("Yumi", "yumi"), - Pair("San Đíc Bự", "san-dic-bu"), - Pair("Fluffy Stuff Team", "fluffy-stuff-team"), - Pair("Merry team", "merry-team"), - Pair("Sunflower", "sunflower"), - Pair("Chocola Team", "chocola-team"), - Pair("Pudding Team", "pudding-team"), - Pair("Wabisabi Team", "wabisabi-team"), - Pair("Only Me 7", "only-me-7"), - Pair("hội FA", "hoi-fa"), - Pair("Nekotruotvan", "neko-truot-van"), - Pair("FuyuNguyen0117", "fuyunguyen0117"), - Pair("KGHkhangteam", "kghkhangteam"), - Pair("Meat Team", "meat-team"), - Pair("Luxubu Team", "luxubu-team"), - Pair("naxuanquynh.pro 123", "naxuanquynhpro-123"), - Pair("naxuanquynh.pro 231", "naxuanquynhpro-231"), - Pair("TRACOGA", "tracoga"), - Pair("Mary Elina", "mary-elina"), - Pair("Quả bơ nhỏ", "qua-bo-nho"), - Pair("cây ô nhỏ", "cay-o-nho"), - Pair("THUYLINH", "thuylinh"), - Pair("Ichigo Ichie", "ichigo-ichie"), - Pair("KR Team", "kr-team"), - Pair("Lạc Mỹ Giới", "Lac-my-gioi"), - Pair("Thiên Trường Địa Cửu", "thien-truong-dia-cuu"), - Pair("Trúc Tửu Quán", "truc-tuu-quan"), - Pair("Quầy Truyện Của Ariel", "quay-truyen-cua-ariel"), - Pair("Klee Translation", "klee-translation"), - Pair("Ổ truyện của Tico", "o-truyen-cua-tico"), - Pair("Phong Miên Team", "phong-mien-team"), - Pair("Kẹo Sữa Vị Dâu", "keo-sua-vi-dau"), - Pair("Mê doujinshi", "me-doujinshi"), - Pair("Octo Juse", "octo-juse"), - Pair("Vịt bê đê team", "vit-be-de-team"), - Pair("Ổ truyện của Lyy", "o-truyen-cua-lyy"), - Pair("Ngã Đích Thiên Không", "nga-dich-thien-khong"), - Pair("ruavang050810", "ruavang050810"), - Pair("Tuấn Cục Súc", "tuan-cuc-suc"), - Pair("Biệt Đội Cháo Khuya", "biet-doi-chao-khuya"), - Pair("Tiêu Nhạn Team", "tieu-nhan-team"), - Pair("BGN", "bgndidichyaoi"), - Pair("Ổ bánh Wibủ", "o-banh-wibu"), - Pair("sunmoon", "sunmoon"), - Pair("Mèo Quạo Quọ", "meo-quao-quo"), - Pair("block", "block"), - Pair("Ổ dịch của Jayh", "o-dich-cua-jayh"), - Pair("Mai Thanh Trúc", "mai-thanh-truc"), - Pair("TEQUILA", "tequila"), - Pair("B'rock Team", "brock-team"), - Pair("Christine", "christine"), - Pair("Kokomatcha", "kokomatcha"), - Pair("Embes Team", "embes-team"), - Pair("Melon Translation", "melon-translation"), - Pair("hydrangea Team", "hydrangea-team"), - Pair("New truyen", "new-truyen"), - Pair("Căn Nhà Nhỏ Của Hủ", "can-nha-nho-cua-hu"), - Pair("Solenda Sabie", "3"), - Pair("Đít Nứt Translation", "crusty-cryst"), - Pair("Xưởng Tàu Hủ Của ltbé", "xuong-tau-hu-cua-ltbe"), - Pair("Cá Mực Một Nắng", "ca-muc-mot-nang"), - Pair("HK.Notebook", "hknotebook"), - Pair("Mèo quạo", "meo-quao"), - Pair("Ổ nhỏ đu Buê Đuê", "Onhodubuedue"), - Pair("miniT", "minit"), - Pair("Enigma BL", "enigma-bl"), - Pair("blackcandy", "blackcandy"), - Pair("Đoàn Mai", "doan-mai"), - Pair("aiki mê đam", "aiki-me-dam"), - Pair("Matchass", "matchass"), - Pair("Căn Cứ Của Gấu Và Cánh Cụt", "can-cu-cua-gau-va-canh-cut"), - Pair("Dango999", "dango999"), - Pair("Khu vườn Blueberry", "khu-vuon-blueberry"), - Pair("Ổ Nhỏ Của Hana", "o-nho-cua-hana"), - Pair("Trần Đức Bo", "tran-duc-bo"), - Pair("MelonTranslation", "melontranslation"), - Pair("HỦ béo", "hu-beo"), - Pair("HOA ĐƠN SẮC", "hoa-don-sac"), - Pair("Ngôi Nhà Ấm Áp Của Sóc Nhỏ", "ngoi-nha-am-ap-cua-soc-nho"), - Pair("PaViTu", "pavitu"), - Pair("Bầy Sói Màu Hường", "bay-soi-mau-huong"), - Pair("Hitori Team", "hitori-team"), - Pair("Gà Trắng", "ga-trang"), - Pair("Hoài An", "hoai-an"), - Pair("Vỹ Nguyệt Team", "vy-nguyet-team"), - Pair("thuythuy", "thuythuy"), - Pair("Luxubu Translotor", "luxubu-translotor"), - Pair("Dịch Giả Cute", "dich-gia-cute"), - Pair("Hủ Auto Truất", "hu-auto-truat"), - Pair("Raccon Team", "raccon-team"), - Pair("shirumi-eifwef", "shirumi-eifwef"), - Pair("Dark Circles", "dark-circles"), - Pair("Con Cá thích đọc BL", "con-ca-thich-doc-bl"), - Pair("MiganTeam", "miganteam"), - Pair("Mạn Châu Sa Hoàng", "man-chau-sa-hoang-aloha"), - Pair("Tiểu Hạ", "tieu-ha"), - Pair("Mặt Trời Nhỏ", "mat-troi-nho"), - Pair("Kitty team", "kitty-team"), - Pair("Na Mi", "na-mi"), - Pair("n name", "n-name-hpo"), - Pair("BeBe Team", "bebe-team"), - Pair("Tổ Ấm Của Những Chú Thỏ Đen", "to-am-cua-nhung-chu-tho-den"), - Pair("Ổ truyện ăn tạp của Lười", "o-truyen-an-tap-cua-luoi"), - Pair("Thỏ đu biđia", "tho-du-bidia"), - Pair("z50170937", "z50170937"), - Pair("Broochie", "broochie"), - Pair("Trái bí xanh", "trai-bi-xanh"), - Pair("Bắy một cành hoa", "bay-mot-canh-hoa"), - Pair("Cocain", "cocain"), - Pair("Có Giọt Mưa Xuân", "co-giot-mua-xuan"), - Pair("Cherry Blossom translation team", "cherry-blossom-translation-team"), - Pair("Nemoishere", "nemoishere"), - Pair("Glor Homié", "glor-homie"), - Pair("TKT", "tkt"), - Pair("Youth Station Comics", "youth-station-comics"), - Pair("HDEC-Hạt Dẻ Cười", "hdec-hat-de-cuoi"), - Pair("Kiekie303", "kiekie303"), - Pair("Try House", "try-house"), - Pair("Moonlight romance", "moonlight-romance"), - Pair("Miniontrum", "miniontrum"), - Pair("Nghèo", "ngheo"), - Pair("Thuyền Sơ Quán", "thuyen-so-quan"), - Pair("Đảo đại dương", "dao-dai-duong"), - Pair("Cpnhatuirealroi", "cpnhatuirealroi"), - Pair("Fishy Kari Team", "fishy-kari-team"), - Pair("Đá Bào", "da-bao"), - Pair("Bar Kon Sou", "bar-kon-sou"), - Pair("Their Stories", "their-stories"), - Pair("tran thi my", "tran-thi-my"), - Pair("Sunny UwU", "sunny-uwu"), - Pair("LEO - Thích Ngủ Đông!", "leo-thích-ngủ-dong"), - Pair("Chiếc Dù Tím Nhỏ", "chiec-du-tim-nho"), - Pair("Hắc Nguyệt Team", "hac-nguyet-team"), - Pair("Hoa Đơn Sắc 23", "hoa-don-sac-23"), - Pair("Bàn này hai người ngồi", "ban-nay-hai-nguoi-ngoi"), - Pair("Neil", "neutralneil1412"), - Pair("Ô Nhà Cỏ", "o-nha-co"), - Pair("Chuyến tàu đêm số 2026", "chuyen-tau-dem-so-2026"), - Pair("House Try", "house-try"), - Pair("Minnnng", "minnnng"), - Pair("Black Roses", "black-roses"), - Pair("Black Roses team", "black-roses-team"), - Pair("Double", "double8"), - Pair("Zero Team", "zero-team"), - Pair("Hiraeth team", "hiraeth-team"), - Pair("Truyện nhà làm", "truyen-nha-lam"), - Pair("Trà Đào Và Hạt Chia", "tra-dao-va-hat-chia"), - Pair("Yuki", "yuki"), - Pair("Sky Hàn", "sky-han"), - Pair("heo con", "heo-con"), - Pair("testdes", "testdes"), - Pair("lê p", "le-p"), - Pair("Caly ana", "caly-ana"), - Pair("gue", "gue"), - Pair("Giga Team", "giga-team"), - Pair("Thuy.Thuyiuiu", "thuythuyiuiu"), - Pair("Kiến Mộc", "kien-moc"), - Pair("zoe.21", "zoe21"), - Pair("super bơ", "super-bo"), - Pair("2convitquay", "2convitquay"), - Pair("Hoa bỉ ngạn", "hoa-bi-ngan"), - Pair("6666", "6666"), - Pair("TL&TEAM", "tlteam"), - Pair("MojitoTeam", "mojitoteam"), - Pair("the new life chapter", "the-new-life-chapter"), - Pair("Black Cat", "black-cat"), - Pair("Kkkkkkk", "kkkkkkk"), - Pair("Brown Kangaroo", "brown-kangaroo"), - Pair("Đần đần", "dan-dan"), - Pair("Hương Đình Các", "huong-dinh-cac"), - Pair("LIGHT STAR", "Light-star"), - Pair("Anhize 602", "anhize-602"), - Pair("Nico", "nico"), - Pair("Rii", "Rii02"), - Pair("Ổ Truyện Của Ly", "o-truyen-cua-ly"), - Pair("Vườn nhà Chanh", "vuon-nha-chanh"), - Pair("Hiệu Sách Số 3011 - Doris Team", "hieu-sach-so-3011-doris-team"), - Pair("Thỏ BL Team", "tho-bl-team"), - Pair("Meow cuồng đam mẽo", "meow-cuong-dam-meo"), - Pair( - "công ty trách nhiệm hữu hạn một thành viên", - "cong-ty-trach-nhiem-huu-han-mot-thanh-vien", - ), - Pair("Leviathan Team", "leviathan-team"), - Pair("Hải âu xanh", "hai-au-xanh"), - Pair("Crazy Rabbits - Chuyên Đu BL", "crazy-rabbits-chuyen-du-bl"), - Pair("CCCC-MR", "cccc-mr"), - Pair("Bão - BL Translation", "bao-bl-translation"), - Pair("Eden Translation Group", "eden-translation-group"), - Pair("Tập đoàn Vô Danh", "tap-doan-vo-danh"), - Pair("Động Hồ Ly-Comics", "dong-ho-ly-comics"), - Pair("Snoopy Translation", "snoopy-translation"), - Pair("Sweetie~~", "sweetie"), - Pair("ice", "ice"), - Pair("MNT-Mỹ Nữ Team", "mnt-my-nu-team"), - Pair("Doris tiên sinh", "doris-tien-sinh"), - Pair("Mỹ Nữ Translation Comics", "my-nu-translation-comics"), - Pair( - "Takei Translator : Con sâu Takei mê ngủ", - "takei-translator-con-sau-takei-me-ngu", - ), - Pair("Hồ ly team", "ho-ly-team"), - Pair("Sở Thú Biên Hòa", "so-thu-bien-hoa"), - Pair("Dịch zui zui", "dich-zui-zui"), - Pair("Trường", "truong"), - Pair("LGBt", "lgbt"), - Pair("BanhGauNho", "banhgaunho"), - Pair("Bóng 7 màu", "bong-7-mau"), - Pair("Rainbow Team", "pagerainbow-team"), - Pair("Black Rabbit's House", "black-rabbits-house"), - Pair("Kylie_Nuna", "kylienuna"), - Pair("QTComiczz", "qtcomiczz"), - Pair("Khu mỏ của Ang", "khu-mo-cua-ang"), - Pair("test213", "test213"), - Pair("Polar bear", "polar-bear"), - Pair("Tiểu khoái Lạt", "tieu-khoai-lat"), - Pair("phanh", "phanh"), - Pair("Odesis Team", "odesis-team"), - Pair("Xám Nâu", "xam-nau"), - Pair("Sora", "sora"), - Pair("Cừu Con Ăn Cỏ", "cuuconanco"), - Pair("Ăn Lờ Team - 1", "an-lo-team-1"), - Pair("Hạ Tử Thiên", "ha-tu-thien"), - Pair("Sứa Biển Team", "sua-bien-team"), - Pair("NHÀ KÚP BẾ", "nha-kup-be"), - Pair("Tiệm Bánh Chuối", "tiem-banh-chuoi"), - Pair("Hoamgu", "hoamgu"), - Pair("Chiếc Lười Nghiện BL - CLNBL", "chiec-luoi-nghien-bl-clnbl"), - Pair("Cú Đêm", "cú-dem"), - Pair("Fighting Cats", "fighting-cats"), - Pair("Eunie", "eunie"), - Pair("Bột Năng", "bot-nang"), - Pair("Ổ Nhà Gấu", "o-nha-gau"), - Pair("li12345678", "li12345678"), - Pair("hoàng hôn", "hoang-hon"), - Pair("Mon ham chơi", "mon-ham-choi"), - Pair("Ngọc Haruchiyo", "ngoc-haruchiyo"), - Pair("Vấn Nguyệt Quán", "van-nguyet-quan"), - Pair("Mạn Thiên Tinh", "man-thien-tinh"), - Pair("Tiểu Ngọc team", "tieu-ngoc-team"), - Pair("Simp cấp S+", "simp-cap-s"), - Pair("Vỏ Quýt Nhỏ - 小陈皮", "vo-quyt-nho-小陈皮"), - Pair("MasterShell82", "mastershell82"), - Pair("Neko Team", "neko-team"), - Pair("Cừu Đen", "cuu-den"), - Pair("Tiệm Hoa Cúc Nhỏ", "iconic-group"), - Pair("Wonderland", "wonderland"), - Pair("Jerry", "jerryhll"), - Pair("Hội Người Chăm Chỉ", "hoi-nguoi-cham-chi"), - Pair("Nhà", "QuangTrinh"), - Pair("Menila Cô Đơn", "menila-co-don"), - Pair("ReD Frog Team", "red-frog-team"), - Pair("San Đíc Bự 2", "san-dic-bu-2"), - Pair("All", "Irene"), - Pair("mary", "mary"), - Pair("Lucifer", "lucifer"), - Pair("Ếch Trên Trời Translation Team", "ech-tren-troi-translation-team"), - Pair("Nguyệt", "nguyet"), - Pair("Tu QueQuo", "tu-quequo"), - Pair("ALL", "all"), - Pair("Bestwishes", "bestwishes"), - Pair("Daanie", "daanie"), - Pair("Nhóc Re ngốc", "nhoc-re-ngoc"), - Pair("Summer Translation Team", "summer-translation-team"), - Pair("Bé mực nhỏ", "be-muc-nho"), - Pair("Mih", "mih"), - Pair("Galaxie Team", "galaxie-team"), - Pair("Kudo", "Shinichi"), - Pair("Swalent", "swalent"), - Pair("Thuusu", "thuusu"), - Pair("Hanagaki Alzi", "hanagaki-alzi"), - Pair("Tràn Bảo Thiên", "tran-bao-thien"), - Pair("Duc Do", "duc-do"), - Pair("Ow Daddy_", "ow-daddy"), - Pair("lậu", "lau"), - Pair("AMITY - Những Chiếc Cừu Giang Hồ", "amity-nhung-chiec-cuu-giang-ho"), - Pair("Thiên Trúc Team", "thien-truc-team"), - Pair("Donchin Lười Biếng", "donchin-luoi-bieng"), - Pair("Hana Yori", "hana-yori"), - Pair("Team gấu ở nhờ", "team-gau-o-nho"), - Pair("Blisthebest", "blisthebest"), - Pair("Vịt Đội Mũ Đỏ", "vit-doi-mu-do"), - Pair("Dream Bamboo team", "dream-bamboo-team"), - Pair("Ngôi Nhà Bong Bóng số 2002", "ngoi-nha-bong-bong-so-2002"), - Pair("Trà Ô Long", "tra-o-long"), - Pair("BLUEMOON", "bluemoon"), - Pair("Kimme", "kimme"), - Pair("Yaoi", "yaoi"), - Pair("Hang nhỏ của gấu", "hang-nho-cua-gau"), - Pair("Chuối Team", "chuoi-team"), - Pair("Lâu Đài Tình Ái Team", "lau-dai-tinh-ai-team"), - Pair("Ánh Trăng Translation Group", "anh-trang-translation-group"), - Pair("Pou", "pou"), - Pair("Ánh Trăng Translation", "anh-trang-translation"), - Pair("Lovely.Mb", "lovelymb"), - Pair("Dreams", "dreams"), - Pair("louis ㅎㅎ", "louis-ㅎㅎ"), - Pair("vườn cà chua", "vuon-ca-chua"), - Pair("Vananhthichtien", "vananhthichtien"), - Pair("Vananhthichtienlam", "vananhthichtienlam"), - Pair("Bí mật nhỏ vườn hướng dương", "bi-mat-nho-vuon-huong-duong"), - Pair("Nova", "nova"), - Pair("Dí Deadline Team", "di-deadline-team"), - Pair("Cá Ngừ Thập Cẩm", "ca-ngu-thap-cam"), - Pair("Làm vui nên không có tên đâu", "lam-vui-nen-khong-co-ten-dau"), - Pair("Sao cũng được", "sao-cung-duoc"), - Pair("Vườn Dịt Dàng", "vuon-vit-vang"), - Pair("Tháng 12 của tôi", "thang-12-cua-toi"), - Pair("Laelia", "laelia"), - Pair("ổ thỏ nhỏ team/thỏ nhỏ là hủ", "o-tho-nho-teamtho-nho-la-hu"), - Pair("Một Thành Viên", "mot-thanh-vien"), - Pair("Vergiss1409", "vergiss1409"), - Pair("Strawberry mousse team", "strawberry-mousse-team"), - Pair("Hạ Ma Lục", "ha-ma-luc"), - Pair("Elen ăn chay", "elen-an-chay"), - Pair("Hoamgu21", "hoamgu21"), - Pair("Dreickass team", "Dreickassteam"), - Pair("Xám nâu", "xam-nauu"), - Pair("Petrichor Team", "petrichor-team"), - Pair("Khoai lang nướng/ KLN", "khoai-lang-nuong-kln"), - Pair("Bourbon với thành phần chính là ngô", "bourbon"), - Pair("Không có", "khong-co"), - Pair("Bầu trời xanh trong", "bau-troi-xanh-trong"), - Pair("Không Ngược Đời Không Nể", "khong-nguoc-doi-khong-ne"), - Pair("Hoa thảo đường san hô", "hoa-thao-duong-san-ho"), - Pair("Yellow Duckk", "yellow-duckk"), - Pair("Homage Team", "homage-team"), - Pair("BambooForestLM - Rừng Trúc Nhỏ", "bambooforestlm-rung-truc-nho"), - Pair("cherry109577599", "cherry109577599"), - Pair("D&A-Team", "da-team"), - Pair("Trương Dạ Thần", "truong-da-than"), - Pair("Lamour Translate Team", "lamour-translate-team"), - Pair("MyA", "mya"), - Pair("Cái Mung Biết Đi", "cai-mung-biet-di"), - Pair("Voi Hồng Mê Truyện", "voi-hong-me-truyen"), - Pair("Cầu Vồng Team", "cau-vong-team"), - Pair("IL Team", "IL-Team"), - Pair("minhdaoquangminh", "minhdaoquangminh"), - Pair("MẶT NẠ ẨN", "mat-na-an"), - Pair( - "UN EXUTOIRE - Truyện tranh BL siu cấp ngọt ngào", - "un-exutoire-truyen-tranh-bl-siu-cap-ngot-ngao", - ), - Pair("chunnyyi", "chunnyyi"), - Pair("Ieyama Akari : Con heo lười biếng", "ieyama-akari-con-heo-luoi-bieng"), - Pair("CMJ - Color Mien MS-June Team", "cmj-color-mien-ms-june-team"), - Pair("Chốn Anh Đào", "chon-anh-dao"), - Pair("Alone", "alone"), - Pair("Gạch óng", "gach-ong"), - Pair("Sugar Plum", "sugar-plum"), - Pair("Chiếc Nấm Dậy Từ 4h Sáng", "chiec-nam-day-tu-4h-sang"), - Pair("Mận Vải Team", "man-vai-team"), - Pair("Bắp Cải", "bap-cai"), - Pair("boylove", "boylove"), - Pair("hoa, lá và cỏ~", "hoa-la-va-co"), - Pair("bé rồng", "be-rong"), - Pair("Mr Ewan", "mr-ewan"), - Pair("DL2110", "dl2110"), - Pair("LĐTA- Lâu Đài Tình Ái", "ldta-lau-dai-tinh-ai"), - Pair("Novalunosis Team", "novalunosis-team"), - Pair("Đứa con của qwỷ", "dua-con-cua-qwy"), - Pair("Nhà của na", "nha-cua-na"), - Pair("Chan chan team", "chan-chan-team"), - Pair("Nơi đu BL", "noi-du-bl"), - Pair("Sữa Chuối Sicula", "sua-chuoi-sicula"), - Pair("Team nhà cừu", "team-nha-cuu"), - Pair("Solo Forever", "solo-forever"), - Pair("DEUXX", "deuxx"), - Pair("DHHS", "dhhs-truyen"), - Pair("CÁ TRONG AO", "ca-trong-ao"), - Pair("Paprika", "paprika"), - Pair("Dream's Hope", "dreams-hope"), - Pair("Name", "name"), - Pair("hổ con team", "ho-con-team"), - Pair("Thư đam mê truyện tranh", "thu-dam-me-truyen-tranh"), - Pair("ốc sên bé nhỏ", "oc-sen-be-nho"), - Pair("Thiên Bình Xanh", "thien-binh-xanh"), - Pair("BUYA TEAM", "buya-team"), - Pair("đời ỉa nên dịch truyện một mình", "doi-ia-nen-dich-truyen-mot-minh"), - Pair("ko có", "ko-co"), - Pair("Chiên su", "chien-su"), - Pair("Shion Cafeteria", "shion-cafeteria"), - Pair("Kumi Kumi Eats Apple", "kumi-kumi-eats-apple"), - Pair("Kazuma", "kazuma"), - Pair("NhómĐuBeĐeXuyênVũTrụ", "nhomdubedexuyenvutru"), - Pair("Team gấu con", "team-gau-con"), - Pair("xu cà na", "xu-ca-na"), - Pair("Oshima", "oshima"), - Pair("一屋赞客 Gia đình cầu vồng", "一屋赞客-gia-dinh-cau-vong"), - Pair("Hoa cúc subteam", "hoa-cuc-subteam"), - Pair("Ngủ trong hòm", "ngu-trong-hom"), - Pair("My Sweetheart", "my-sweetheart"), - Pair("TM.Team", "tmteam"), - Pair("Nhà Của Nhím", "nha-cua-nhim"), - Pair("Lạc Võng Không Buồn", "lac-vong-khong-buon"), - Pair("Là tui đây", "itsjustme"), - Pair("Nông Trại Team", "nong-trai-team"), - Pair("Viktor", "Viktor"), - Pair("Tình yêu thương tích", "tinh-yeu-thuong-tich"), - Pair("Wonderwall Translation Team", "wonderwall-translation-team"), - Pair("Cepharin Translation Team", "cepharin-translation-team"), - Pair("Anh", "anh"), - Pair("Hắc Pháp Sư", "hac-phap-su"), - Pair("dichgiacodon", "dichgiacodon"), - Pair("Omeletto Teamwork", "omeletto-teamwork-2"), - Pair("Cá nóc", "ca-noc"), - Pair("Orebite", "orebite"), - Pair("Tĩnh Xứ An Thân", "tinh-xu-an-than"), - Pair("Melinoe BL", "melinoe-bl"), - Pair("Souja Team", "souja-team"), - Pair("Lowe Mopodog", "lowe-mopodog"), - Pair("Thiên Lâm Dương", "thien-lam-duong"), - Pair("Dược Yểu", "duoc-yeu-0807-0708"), - Pair("Tiểu Lam Translator", "Tieu_lam_Translator"), - Pair("sugar team", "sugar-team"), - Pair("Benilasco comics", "benilasco-comics"), - Pair("Lynner", "lynner"), - Pair("Mê manga", "me-manga"), - Pair("N Team", "n-team"), - Pair("Youth Train Team", "youth-train-team"), - Pair("Min Garuko:)", "min-garuko"), - Pair("Tharn", "tharn"), - Pair("PlayerTeam", "playerteam"), - Pair("Doris", "doris"), - Pair("Dưa Leo Cúc", "dua-leo-cuc"), - Pair("Ổ Mèo Hoang 1108", "o-meo-hoang-1108"), - Pair("Ổ sìn Boylove", "o-sin-boylove"), - Pair("Tổ Chức Áo Đen", "to-chuc-ao-den"), - Pair("Tấm Vé Khứ Hồi", "tam-ve-khu-hoi"), - Pair("Cá Chà Bặc Team", "ca-cha-bac-team"), - Pair("ĐU BÊ ĐÊ LÀ ĐỘNG LỰC HỌC CỦA TỚ", "du-be-de-la-dong-luc-hoc-cua-to"), - Pair("XJunD Team", "xjund-team"), - Pair("Alazyone", "alazyone"), - Pair("KuroshitoBL", "kuroshitobl"), - Pair("Awesome Knights Team", "awesome-knights-team"), - Pair("Cacty Cat", "cacty-cat"), - Pair("Nhà Của Mộc", "nha-cua-moc"), - Pair("Ổ Truyện See Tình", "o-truyen-see-tinh"), - Pair("Dream Bamboo team", "dream-bamboo-team1"), - Pair("Lylyi Dã Lang", "lylyi-da-lang"), - Pair("Gương Kia Ngự Ở Trên Giường", "guong-kia-ngu-o-tren-giuong"), - Pair("Manhwa With Kry Min", "manhwa-with-kry-min"), - Pair("Lôi vũ", "loi-vu"), - Pair("Mr. Midnight", "mr-midnight"), - Pair("Sân bay Hai Tám", "airport28"), - Pair("LườiNênDịch", "luoinendich"), - Pair("Koo7mau", "koo7mau"), - Pair("Dịch Tiểu Thuyết & Truyện Tranh", "dich-tieu-thuyet-truyen-tranh"), - Pair("Eric Team", "eric-team"), - Pair("Sunie Team", "sunie-team"), - Pair("Zunzuizeteam", "zunzuizeteam"), - Pair("Cat Vanizi", "cat-vanizi"), - Pair("MINELOVEBL", "minelovebl"), - Pair("Glowing D Translation", "glowing-d-translation"), - Pair("Kumi Kumi Eat Apple", "kumi-kumi-eat-apple"), - Pair("Dreaming Land", "dreaming-land"), - Pair("Truyện Nhà Mêy", "truyen-nha-mey"), - Pair("Thánh Địa Của Hủ", "thanh-dia-cua-hu"), - Pair("Le méchant t'aime", "le-mechant-taime"), - Pair("XJunD t eam", "xjund-t-eam"), - Pair("Con gà thích đu BL", "con-ga-thich-du-bl"), - Pair("Forsythia Team", "forsythia-team"), - Pair("Hoàng thiên", "hoang-thien"), - Pair("Peach cucumber", "peach-cucumber"), - Pair("Himiko Comics", "himiko-comics"), - Pair("daylaju", "daylaju"), - Pair("Team Củ Quýt", "team-cu-quyt"), - Pair("Mê Truyện", "me-truyen"), - Pair("Dreaming Land", "age"), - Pair("Tiểu Quán Bạch Dạ", "tieu-quan-bach-da"), - Pair("LuRabi", "lurabi"), - Pair("Ổ Truyện Của Mèo Lười", "o-truyen-cua-meo-luoi"), - Pair("Ô Dã Team", "o-da-team"), - Pair("No mercy team", "no-mercy-team"), - Pair("Team Lười", "team-luoi"), - Pair("Quả Vải Team", "Quả_vải_team"), - Pair("Eyu thánh thiện", "eyu-thanh-thien"), - Pair("Mấy chú gấu trúc", "may-chu-gau-truc"), - Pair("Hell's Gate", "hells-gate"), - Pair("20s Team", "20s-team"), - Pair("Sweetie Team", "sweetie-team"), - Pair("Luna's Team", "lunas-team"), - Pair("Xoài Mọng Nước", "xoai-mong-nuoc"), - Pair("Arena Of Valor V-trans Fanpage", "arena-of-valor-v-trans-fanpage"), - Pair("Oce Sunny 1507", "oce-sunny-1507"), - Pair("CNKT", "cnkt"), - Pair("White Rabbit", "White-Rabbit"), - Pair("Nora Translation Team", "nora-translation-team"), - Pair("Cat Vanizii", "cat-vanizii"), - Pair("Góc của Mật Đào", "goc-cua-mat-dao"), - Pair("Lovely Grillove&Boylove Team", "lovely-grilloveboylove-team"), - Pair("Silver Snake", "silver_snake"), - Pair( - "zanh siu đẹp trai 12 cá tính và thích đu bê đê", - "zanh-siu-dep-trai-12-ca-tinh-va-thich-du-be-de", - ), - Pair("Động Tà Răm", "dong-ta-ram"), - Pair("Chiếc Kẹo Đường Đáng Eo", "chiec-keo-duong-dang-eo"), - Pair("Xịp Xịp Team", "xip-xip-team"), - Pair("PAB Honey Translation Team", "pab-honey-translation-team"), - Pair("Boo Boo", "boo-boo"), - Pair("Trà Đào Mật Ong", "tra-dao-mat-ong"), - Pair("Manga2G", "manga2g"), - Pair("Ổ của một đứa rãnh rỗi", "o-cua-mot-dua-ranh-roi"), - Pair("Tủ Truyện Nhỏ Của JC", "tu-truyen-nho-cua-jc"), - Pair("Mí Casa traditinal team", "mi-casa-traditinal-team"), - Pair("Mebede", "mebede"), - Pair("Vì Đồng Tiền Mà Bán Mạng", "vi-dong-tien-ma-ban-mang"), - Pair("Bóng bảy màu", "bong-bay-mau"), - Pair("Dear No One", "dear-no-one"), - Pair("Tiêu Trần Lự", "tieu-tran-lu"), - Pair("LLC", "llc"), - Pair("Tình iu có màu j", "tinh-iu-co-mau-j"), - Pair("Ăn mày comics", "an-may-comics"), - Pair("Mèo nhỏ xinh xinh", "meo-nho-xinh-xinh"), - Pair("Tiệm truyện nhà Mía", "tiem-truyen-nha-mia"), - Pair("Con Ắc Wủy Tà Găm =))", "con-ac-wuy-ta-gam"), - Pair("Sweetie Team . Ver 2", "sweetie-team-ver-2"), - Pair("NELLCOMIC", "NELLCOMIC"), - Pair("Pocky Berry", "pocky-berry"), - Pair("I Purple U", "i-purple-u"), - Pair("Ủa?", "ua"), - Pair("Noiry team", "noiry-team"), - Pair("Michael aka Hoàng", "michael-aka-hoang"), - Pair("Nghèo Nàn Team", "ngheo-nan-team"), - Pair("Nhà Của Nhím Nhỏ", "nha-cua-nhim-nho"), - Pair("Con ká tập dịch bê đê", "conkatapdichb3d3_"), - Pair("Meow", "meow"), - Pair("BuBuChaCha", "bubuchacha"), - Pair("Fiore d'erba", "fiore-derba"), - Pair("BuBuChaCha Team", "bubuchacha-team"), - Pair("Death Team", "death-team"), - Pair("Claire Lucinda", "clairelucinda"), - Pair("Black Moon", "black-moon"), - Pair("Claire Lucinda", "claire-lucinda"), - Pair("Banana Đảm Đang", "banana-dam-dang"), - Pair("BER", "ber"), - Pair("Duck team", "duck-team"), - Pair("Nivemeo", "nivemeo"), - Pair("Chi Chi Chành Chành", "chi-chi-chanh-chanh"), - ), - ) - - companion object { - const val PREFIX_ID_SEARCH = "id:" - } -} diff --git a/src/vi/qmanga/src/eu/kanade/tachiyomi/extension/vi/qmanga/QMangaUrlActivity.kt b/src/vi/qmanga/src/eu/kanade/tachiyomi/extension/vi/qmanga/QMangaUrlActivity.kt deleted file mode 100644 index e3c6aad80..000000000 --- a/src/vi/qmanga/src/eu/kanade/tachiyomi/extension/vi/qmanga/QMangaUrlActivity.kt +++ /dev/null @@ -1,33 +0,0 @@ -package eu.kanade.tachiyomi.extension.vi.qmanga - -import android.app.Activity -import android.content.ActivityNotFoundException -import android.content.Intent -import android.os.Bundle -import android.util.Log -import kotlin.system.exitProcess - -class QMangaUrlActivity : Activity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - val pathSegments = intent?.data?.pathSegments - if (pathSegments != null && pathSegments.size > 0 && pathSegments[0].endsWith(".html")) { - val id = pathSegments[0].removeSuffix(".html") - try { - startActivity( - Intent().apply { - action = "eu.kanade.tachiyomi.SEARCH" - putExtra("query", "${QManga.PREFIX_ID_SEARCH}$id") - putExtra("filter", packageName) - }, - ) - } catch (e: ActivityNotFoundException) { - Log.e("QMangaUrlActivity", e.toString()) - } - } else { - Log.e("QMangaUrlActivity", "Could not parse URI from intent $intent") - } - finish() - exitProcess(0) - } -}