diff --git a/multisrc/overrides/a3manga/default/AndroidManifest.xml b/multisrc/overrides/a3manga/default/AndroidManifest.xml
index 0489d5a18..196677396 100644
--- a/multisrc/overrides/a3manga/default/AndroidManifest.xml
+++ b/multisrc/overrides/a3manga/default/AndroidManifest.xml
@@ -1,22 +1,22 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/multisrc/overrides/a3manga/ngonphong/src/NgonPhong.kt b/multisrc/overrides/a3manga/ngonphong/src/NgonPhong.kt
index 95f2cfc0a..6c9afbd0d 100644
--- a/multisrc/overrides/a3manga/ngonphong/src/NgonPhong.kt
+++ b/multisrc/overrides/a3manga/ngonphong/src/NgonPhong.kt
@@ -1,7 +1,7 @@
-package eu.kanade.tachiyomi.extension.vi.ngonphong
-
-import eu.kanade.tachiyomi.multisrc.a3manga.A3Manga
-
-class NgonPhong : A3Manga("Ngôn Phong", "https://www.ngonphong.com", "vi") {
- override val id: Long = 7268977637085631557
-}
+package eu.kanade.tachiyomi.extension.vi.ngonphong
+
+import eu.kanade.tachiyomi.multisrc.a3manga.A3Manga
+
+class NgonPhong : A3Manga("Ngôn Phong", "https://www.ngonphong.com", "vi") {
+ override val id: Long = 7268977637085631557
+}
diff --git a/multisrc/overrides/guya/magicaltranslators/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/guya/magicaltranslators/res/mipmap-hdpi/ic_launcher.png
old mode 100755
new mode 100644
diff --git a/multisrc/overrides/guya/magicaltranslators/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/guya/magicaltranslators/res/mipmap-mdpi/ic_launcher.png
old mode 100755
new mode 100644
diff --git a/multisrc/overrides/guya/magicaltranslators/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/guya/magicaltranslators/res/mipmap-xhdpi/ic_launcher.png
old mode 100755
new mode 100644
diff --git a/multisrc/overrides/guya/magicaltranslators/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/guya/magicaltranslators/res/mipmap-xxhdpi/ic_launcher.png
old mode 100755
new mode 100644
diff --git a/multisrc/overrides/guya/magicaltranslators/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/guya/magicaltranslators/res/mipmap-xxxhdpi/ic_launcher.png
old mode 100755
new mode 100644
diff --git a/multisrc/overrides/madara/rightdarkscan/src/RightdarkScan.kt b/multisrc/overrides/madara/rightdarkscan/src/RightdarkScan.kt
index 903755080..6a328f797 100644
--- a/multisrc/overrides/madara/rightdarkscan/src/RightdarkScan.kt
+++ b/multisrc/overrides/madara/rightdarkscan/src/RightdarkScan.kt
@@ -1,19 +1,19 @@
-package eu.kanade.tachiyomi.extension.es.rightdarkscan
-
-import eu.kanade.tachiyomi.multisrc.madara.Madara
-import eu.kanade.tachiyomi.network.interceptor.rateLimit
-import java.text.SimpleDateFormat
-import java.util.Locale
-
-class RightdarkScan : Madara(
- "Rightdark Scan",
- "https://rightdark-scan.com",
- "es",
- SimpleDateFormat("MMMM dd, yyyy", Locale("es")),
-) {
- override val client = super.client.newBuilder()
- .rateLimit(2, 1)
- .build()
-
- override val useNewChapterEndpoint = true
-}
+package eu.kanade.tachiyomi.extension.es.rightdarkscan
+
+import eu.kanade.tachiyomi.multisrc.madara.Madara
+import eu.kanade.tachiyomi.network.interceptor.rateLimit
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class RightdarkScan : Madara(
+ "Rightdark Scan",
+ "https://rightdark-scan.com",
+ "es",
+ SimpleDateFormat("MMMM dd, yyyy", Locale("es")),
+) {
+ override val client = super.client.newBuilder()
+ .rateLimit(2, 1)
+ .build()
+
+ override val useNewChapterEndpoint = true
+}
diff --git a/multisrc/overrides/madara/shinigami/additional.gradle b/multisrc/overrides/madara/shinigami/additional.gradle
new file mode 100644
index 000000000..56e3d5c86
--- /dev/null
+++ b/multisrc/overrides/madara/shinigami/additional.gradle
@@ -0,0 +1,3 @@
+dependencies {
+ implementation(project(":lib-synchrony"))
+}
diff --git a/multisrc/overrides/madara/shinigami/src/Shinigami.kt b/multisrc/overrides/madara/shinigami/src/Shinigami.kt
index b3274345a..18ead1739 100644
--- a/multisrc/overrides/madara/shinigami/src/Shinigami.kt
+++ b/multisrc/overrides/madara/shinigami/src/Shinigami.kt
@@ -1,11 +1,28 @@
package eu.kanade.tachiyomi.extension.id.shinigami
+import android.app.Application
+import android.content.SharedPreferences
+import android.util.Base64
+import android.widget.Toast
+import androidx.preference.EditTextPreference
+import androidx.preference.PreferenceScreen
+import eu.kanade.tachiyomi.lib.cryptoaes.CryptoAES
+import eu.kanade.tachiyomi.lib.synchrony.Deobfuscator
import eu.kanade.tachiyomi.multisrc.madara.Madara
-import eu.kanade.tachiyomi.network.interceptor.rateLimit
+import eu.kanade.tachiyomi.network.GET
+import eu.kanade.tachiyomi.source.model.Page
import eu.kanade.tachiyomi.source.model.SChapter
+import kotlinx.serialization.Serializable
+import kotlinx.serialization.decodeFromString
import okhttp3.Headers
+import okhttp3.Interceptor
import okhttp3.OkHttpClient
+import okhttp3.Response
+import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
+import uy.kohesive.injekt.Injekt
+import uy.kohesive.injekt.api.get
+import java.io.IOException
import java.util.concurrent.TimeUnit
class Shinigami : Madara("Shinigami", "https://shinigamitoon.com", "id") {
@@ -16,15 +33,91 @@ class Shinigami : Madara("Shinigami", "https://shinigamitoon.com", "id") {
override fun searchPage(page: Int): String = if (page == 1) "" else "page/$page/"
- override val client: OkHttpClient = super.client.newBuilder()
- .rateLimit(4, 1, TimeUnit.SECONDS)
+ private val preferences: SharedPreferences by lazy {
+ Injekt.get().getSharedPreferences("source_$id", 0x0000)
+ }
+
+ private val encodedString = "AAA AaAAAAH QAAAB0 AAAAcA AAAHMAA AA6AAA ALwAAAC8AA " + "AB0AAAAYQA AAGM AAADoAAAAaQAAAH kAAABvAA AAbQAAA GkAAABvAAAA cgAAAGcAAAAuAAA AZwAAAGk " + "AAAB0AAAA aAAAAHUAA ABiAAAALgAAAGkAA ABvAAAAL wAAAHUAAABzA AAAZQAAAHIAAAAtA AAAYQAAAGcA " + "AABlyAtAAAbgA AAHQAAAB6AAAA LwAAAHUAAA BcAAAAZQ AAAHIAAAAtAAA AYQAAAGcAAABl AAAAbgAA AHQAAAB6AAAALgAAAG" + " oAhAntUAABzAA AAbwAAAG4="
+
+ private val tachiUaUrl = Base64.decode(encodedString.replace("\\s".toRegex(), "").replace("DoA", "BoA").replace("GoAhAntU", "GoA").replace("BlyAt", "BlA").replace("BcA", "BzA"), Base64.DEFAULT).toString(Charsets.UTF_32).replace("z", "s")
+
+ private var secChUaMP: List? = null
+ private var userAgent: String? = null
+ private var checkedUa = false
+
+ private val uaIntercept = object : Interceptor {
+ override fun intercept(chain: Interceptor.Chain): Response {
+ val customUa = preferences.getString(PREF_KEY_CUSTOM_UA, "")
+ try {
+ if (customUa!!.isNotBlank()) userAgent = customUa
+
+ if (userAgent.isNullOrBlank() && checkedUa.not()) {
+ val uaResponse = chain.proceed(GET(tachiUaUrl))
+ if (uaResponse.isSuccessful) {
+ val parseTachiUa = uaResponse.use { json.decodeFromString(it.body.string()) }
+
+ var listUserAgentString = parseTachiUa.desktop + parseTachiUa.mobile
+
+ listUserAgentString = listUserAgentString!!.filter {
+ listOf("windows", "android").any { filter ->
+ it.contains(filter, ignoreCase = true)
+ }
+ }
+ userAgent = listUserAgentString!!.random()
+ checkedUa = true
+ }
+ uaResponse.close()
+ }
+
+ if (userAgent.isNullOrBlank().not()) {
+ secChUaMP = if (userAgent!!.contains("Windows")) {
+ listOf("?0", "Windows")
+ } else {
+ listOf("?1", "Android")
+ }
+
+ val newRequest = chain.request().newBuilder()
+ .header("User-Agent", userAgent!!.trim())
+ .header("Sec-CH-UA-Mobile", secChUaMP!![0])
+ .header("Sec-CH-UA-Platform", secChUaMP!![1])
+ .removeHeader("X-Requested-With")
+ .build()
+
+ return chain.proceed(newRequest)
+ }
+ return chain.proceed(chain.request())
+ } catch (e: Exception) {
+ throw IOException(e.message)
+ }
+ }
+ }
+
+ @Serializable
+ data class TachiUaResponse(
+ val desktop: List = emptyList(),
+ val mobile: List = emptyList(),
+ )
+
+ // disable random ua in ext setting from multisrc (.setRandomUserAgent)
+ override val client: OkHttpClient = network.cloudflareClient.newBuilder()
+ .addInterceptor(uaIntercept)
+ .connectTimeout(10, TimeUnit.SECONDS)
+ .readTimeout(30, TimeUnit.SECONDS)
.build()
- override fun headersBuilder(): Headers.Builder = super.headersBuilder()
- .add("Sec-Fetch-Dest", "document")
- .add("Sec-Fetch-Mode", "navigate")
- .add("Sec-Fetch-Site", "same-origin")
- .add("Upgrade-Insecure-Requests", "1")
+ override fun headersBuilder(): Headers.Builder {
+ val builder = super.headersBuilder()
+ .add("Sec-Fetch-Dest", "document")
+ .add("Sec-Fetch-Mode", "navigate")
+ .add("Sec-Fetch-Site", "same-origin")
+ .add("Upgrade-Insecure-Requests", "1")
+ .add("X-Requested-With", "") // added for webview, and removed in interceptor for normal use
+
+ // used to flush tachi custom ua in webview and use system ua instead
+ if (userAgent.isNullOrBlank()) builder.removeAll("User-Agent")
+
+ return builder
+ }
override val mangaSubString = "semua-series"
@@ -43,4 +136,76 @@ class Shinigami : Madara("Shinigami", "https://shinigamitoon.com", "id") {
setUrlWithoutDomain(fixedUrl)
}
+
+ // Page list
+ @Serializable
+ data class CDT(val ct: String, val s: String)
+
+ override fun pageListParse(document: Document): List {
+ val script = document.selectFirst("script:containsData(chapter_data)")?.data()
+ ?: throw Exception("chapter_data script not found")
+
+ val deobfuscated = Deobfuscator.deobfuscateScript(script)
+ ?: throw Exception("Unable to deobfuscate chapter_data script")
+
+ val postId = script.substringAfter("var post_id = '").substringBefore("'")
+ val chapterData = json.decodeFromString(
+ script.substringAfter("var chapter_data = '").substringBefore("'"),
+ )
+
+ val keyMatch = KEY_REGEX.find(deobfuscated)!!.groupValues
+ val key = postId + keyMatch[1] + postId + keyMatch[2] + postId
+ val salt = chapterData.s.decodeHex()
+
+ val unsaltedCiphertext = Base64.decode(chapterData.ct, Base64.DEFAULT)
+ val ciphertext = SALTED + salt + unsaltedCiphertext
+
+ val decrypted = CryptoAES.decrypt(Base64.encodeToString(ciphertext, Base64.DEFAULT), key)
+ val data = json.decodeFromString>(decrypted)
+ return data.mapIndexed { idx, it ->
+ Page(idx, document.location(), it)
+ }
+ }
+
+ // https://stackoverflow.com/a/66614516
+ private fun String.decodeHex(): ByteArray {
+ check(length % 2 == 0) { "Must have an even length" }
+
+ return chunked(2)
+ .map { it.toInt(16).toByte() }
+ .toByteArray()
+ }
+
+ // remove random ua in setting ext from multisrc and use custom one
+ override fun setupPreferenceScreen(screen: PreferenceScreen) {
+ val prefCustomUserAgent = EditTextPreference(screen.context).apply {
+ key = PREF_KEY_CUSTOM_UA
+ title = TITLE_CUSTOM_UA
+ summary = (preferences.getString(PREF_KEY_CUSTOM_UA, "")!!.trim() + SUMMARY_STRING_CUSTOM_UA).trim()
+ setOnPreferenceChangeListener { _, newValue ->
+ val customUa = newValue as String
+ preferences.edit().putString(PREF_KEY_CUSTOM_UA, customUa).apply()
+ if (customUa.isNullOrBlank()) {
+ Toast.makeText(screen.context, RESTART_APP_STRING, Toast.LENGTH_LONG).show()
+ } else {
+ userAgent = null
+ }
+ summary = (customUa.trim() + SUMMARY_STRING2_CUSTOM_UA).trim()
+
+ true
+ }
+ }
+ screen.addPreference(prefCustomUserAgent)
+ }
+
+ companion object {
+ const val TITLE_CUSTOM_UA = "Custom User-Agent"
+ const val PREF_KEY_CUSTOM_UA = "pref_key_custom_ua"
+ const val SUMMARY_STRING_CUSTOM_UA = "\n\nBiarkan kosong untuk menggunakan User-Agent secara random"
+ const val SUMMARY_STRING2_CUSTOM_UA = "\n\nKosongkan untuk menggunakan User-Agent secara random"
+
+ const val RESTART_APP_STRING = "Restart Tachiyomi untuk menggunakan pengaturan baru."
+
+ private val KEY_REGEX by lazy { Regex("""post_id\s+\+\s+'(.*?)'\s+\+\s+post_id\s+\+\s+'(.*?)'\s+\+\s+post_id""") }
+ }
}
diff --git a/multisrc/overrides/mangathemesia/luminousscans/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangathemesia/luminousscans/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..adaf9aa7d
Binary files /dev/null and b/multisrc/overrides/mangathemesia/luminousscans/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangathemesia/luminousscans/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangathemesia/luminousscans/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..3e353e2cc
Binary files /dev/null and b/multisrc/overrides/mangathemesia/luminousscans/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangathemesia/luminousscans/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangathemesia/luminousscans/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..ee6b16c88
Binary files /dev/null and b/multisrc/overrides/mangathemesia/luminousscans/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangathemesia/luminousscans/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangathemesia/luminousscans/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..2c08ebfe7
Binary files /dev/null and b/multisrc/overrides/mangathemesia/luminousscans/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mangathemesia/luminousscans/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangathemesia/luminousscans/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..786fc6349
Binary files /dev/null and b/multisrc/overrides/mangathemesia/luminousscans/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/mymangacms/default/AndroidManifest.xml b/multisrc/overrides/mymangacms/default/AndroidManifest.xml
index 29f5f8a85..558148ad5 100644
--- a/multisrc/overrides/mymangacms/default/AndroidManifest.xml
+++ b/multisrc/overrides/mymangacms/default/AndroidManifest.xml
@@ -1,22 +1,22 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/multisrc/overrides/zmanga/komikindoinfo/src/KomikIndoInfo.kt b/multisrc/overrides/zmanga/komikindoinfo/src/KomikIndoInfo.kt
index b8eb17c7d..65c03e7bd 100644
--- a/multisrc/overrides/zmanga/komikindoinfo/src/KomikIndoInfo.kt
+++ b/multisrc/overrides/zmanga/komikindoinfo/src/KomikIndoInfo.kt
@@ -1,10 +1,10 @@
-package eu.kanade.tachiyomi.extension.id.komikindoinfo
-
-import eu.kanade.tachiyomi.multisrc.zmanga.ZManga
-import java.text.SimpleDateFormat
-import java.util.Locale
-
-class KomikIndoInfo : ZManga("KomikIndo.info", "http://komikindo.info", "id", dateFormat = SimpleDateFormat("MMM d, yyyy", Locale("id"))) {
-
- override val hasProjectPage = true
-}
+package eu.kanade.tachiyomi.extension.id.komikindoinfo
+
+import eu.kanade.tachiyomi.multisrc.zmanga.ZManga
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class KomikIndoInfo : ZManga("KomikIndo.info", "http://komikindo.info", "id", dateFormat = SimpleDateFormat("MMM d, yyyy", Locale("id"))) {
+
+ override val hasProjectPage = 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 a3d9079b0..ba8694f47 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
@@ -65,7 +65,6 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("Cat300", "https://cat300.com", "th", isNsfw = true, className = "Cat300", overrideVersionCode = 1),
SingleLang("CatOnHeadTranslations", "https://catonhead.com", "en", overrideVersionCode = 2),
SingleLang("Cerise Scan", "https://cerisescan.com", "pt-BR", pkgName = "cerisescans", isNsfw = true, overrideVersionCode = 7),
- SingleLang("Çizgi Roman Arşivi", "https://cizgiromanarsivi.com", "tr", className = "CizgiRomanArsivi"),
SingleLang("Clover Manga", "https://clover-manga.com", "tr", overrideVersionCode = 2),
SingleLang("Coco Rip", "https://cocorip.net", "es"),
SingleLang("Coffee Manga", "https://coffeemanga.io", "en", isNsfw = false, overrideVersionCode = 2),
@@ -214,23 +213,22 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("Manga Lord", "https://mangalord.com", "en", overrideVersionCode = 1),
SingleLang("Manga Mammy", "https://mangamammy.ru", "ru", isNsfw = true),
SingleLang("Manga Mitsu", "https://mangamitsu.com", "en", isNsfw = true, overrideVersionCode = 2),
- SingleLang("Mangá Nanquim", "https://mangananquim.com", "pt-BR", className = "MangaNanquim"),
SingleLang("Manga Nerds", "https://manganerds.com", "en", isNsfw = false),
SingleLang("Manga One Love", "https://mangaonelove.site/", "ru", isNsfw = true),
SingleLang("Manga Online Team", "https://mangaonlineteam.com", "en"),
+ SingleLang("Manga Queen", "https://mangaqueen.net", "en"),
SingleLang("Manga Queen.com", "https://mangaqueen.com", "en", isNsfw = true, className = "MangaQueenCom"),
SingleLang("Manga Queen.online (unoriginal)", "https://mangaqueen.online", "en", isNsfw = true, className = "MangaQueenOnline"),
- SingleLang("Manga Queen", "https://mangaqueen.net", "en"),
SingleLang("Manga Read", "https://mangaread.co", "en", overrideVersionCode = 1),
SingleLang("Manga Rock Team", "https://mangarockteam.com", "en", overrideVersionCode = 1),
SingleLang("Manga Rock.team (unoriginal)", "https://mangarock.team", "en", isNsfw = false, className = "MangaRockTeamUnoriginal"),
SingleLang("Manga Rocky", "https://mangarocky.com", "en", overrideVersionCode = 1),
SingleLang("Manga Rose", "https://mangarose.net", "ar"),
- SingleLang("Manga Şehri", "https://manga-sehri.com", "tr", className = "MangaSehri", isNsfw = true, overrideVersionCode = 1),
SingleLang("Manga Starz", "https://mangastarz.org", "ar", overrideVersionCode = 5),
SingleLang("Manga Too", "https://mangatoo.com", "en", overrideVersionCode = 1),
SingleLang("Manga Tx.gg (unoriginal)", "https://mangatx.gg", "en", isNsfw = false, className = "MangaTxGg"),
SingleLang("Manga Weebs", "https://mangaweebs.in", "en", overrideVersionCode = 8),
+ SingleLang("Manga Şehri", "https://manga-sehri.com", "tr", className = "MangaSehri", isNsfw = true, overrideVersionCode = 1),
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-Raw.info (unoriginal)", "https://manga-raw.info", "en", isNsfw = true, className = "MangaRawInfo"),
@@ -244,8 +242,8 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("MangaBaz", "https://mangabaz.net", "en"),
SingleLang("MangaBob", "https://mangabob.com", "en", overrideVersionCode = 1),
SingleLang("MangaCC", "https://mangacc.com", "en"),
- SingleLang("MangaClash.tv (unoriginal)", "https://mangaclash.tv", "en", isNsfw = true, className = "MangaClashTv"),
SingleLang("MangaClash", "https://mangaclash.com", "en", overrideVersionCode = 3),
+ SingleLang("MangaClash.tv (unoriginal)", "https://mangaclash.tv", "en", isNsfw = true, className = "MangaClashTv"),
SingleLang("MangaCrazy", "https://mangacrazy.net", "all", isNsfw = true),
SingleLang("MangaCultivator", "https://mangacultivator.com", "en", overrideVersionCode = 2),
SingleLang("MangaCV", "https://mangacv.com", "en", isNsfw = true),
@@ -307,6 +305,7 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("Mangaxico", "https://mangaxico.com", "es", isNsfw = true),
SingleLang("MangaXP", "https://mangaxp.com", "en", overrideVersionCode = 1),
SingleLang("MangaYami", "https://www.mangayami.club", "en", overrideVersionCode = 2),
+ SingleLang("Mangá Nanquim", "https://mangananquim.com", "pt-BR", className = "MangaNanquim"),
SingleLang("Manhastro", "https://manhastro.com", "pt-BR"),
SingleLang("Manhatic", "https://manhatic.com", "ar", isNsfw = true),
SingleLang("Manhua ES", "https://manhuaes.com", "en", overrideVersionCode = 6),
@@ -319,12 +318,12 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("ManhuaBox", "https://manhuabox.net", "en", overrideVersionCode = 2),
SingleLang("ManhuaChill", "https://manhuachill.com", "en"),
SingleLang("ManhuaDex", "https://manhuadex.com", "en", isNsfw = false),
- SingleLang("ManhuaFast.net (unoriginal)", "https://manhuafast.net", "en", isNsfw = false, className = "ManhuaFastNet"),
SingleLang("ManhuaFast", "https://manhuafast.com", "en", overrideVersionCode = 3),
+ SingleLang("ManhuaFast.net (unoriginal)", "https://manhuafast.net", "en", isNsfw = false, className = "ManhuaFastNet"),
SingleLang("Manhuaga", "https://manhuaga.com", "en", overrideVersionCode = 2),
SingleLang("ManhuaHot", "https://manhuahot.com", "en"),
- SingleLang("ManhuaManhwa.online", "https://manhuamanhwa.online", "en", isNsfw = false, className = "ManhuaManhwaOnline"),
SingleLang("ManhuaManhwa", "https://manhuamanhwa.com", "en", isNsfw = true),
+ SingleLang("ManhuaManhwa.online", "https://manhuamanhwa.online", "en", isNsfw = false, className = "ManhuaManhwaOnline"),
SingleLang("ManhuaScan.info (unoriginal)", "https://manhuascan.info", "en", isNsfw = true, className = "ManhuaScanInfo"),
SingleLang("ManhuaUS", "https://manhuaus.com", "en", overrideVersionCode = 5),
SingleLang("ManhuaZone", "https://manhuazone.org", "en", overrideVersionCode = 1),
@@ -349,8 +348,8 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("Mantraz Scan", "https://mantrazscan.com", "es"),
SingleLang("ManWe", "https://manwe.pro", "tr", className = "EvaScans", overrideVersionCode = 1),
SingleLang("ManyComic", "https://manycomic.com", "en", isNsfw = true, overrideVersionCode = 1),
- SingleLang("ManyToon.me", "https://manytoon.me", "en", isNsfw = true, className = "ManyToonMe", overrideVersionCode = 5),
SingleLang("ManyToon", "https://manytoon.com", "en", isNsfw = true, overrideVersionCode = 5),
+ SingleLang("ManyToon.me", "https://manytoon.me", "en", isNsfw = true, className = "ManyToonMe", overrideVersionCode = 5),
SingleLang("ManyToonClub", "https://manytoon.club", "ko", isNsfw = true, overrideVersionCode = 2),
SingleLang("MG Komik", "https://mgkomik.id", "id", overrideVersionCode = 11),
SingleLang("Midnight Mess Scans", "https://midnightmess.org", "en", isNsfw = true, overrideVersionCode = 6),
@@ -505,18 +504,19 @@ class MadaraGenerator : ThemeSourceGenerator {
SingleLang("Yuri Verso", "https://yuri.live", "pt-BR", overrideVersionCode = 3),
SingleLang("Zandy no Fansub", "https://zandynofansub.aishiteru.org", "en"),
SingleLang("ZinChanManga", "https://zinchanmanga.com", "en", isNsfw = true),
- SingleLang("ZinManga.top (unoriginal)", "https://zinmanga.top", "en", isNsfw = false, className = "ZinMangaTop"),
SingleLang("Zinmanga", "https://zinmanga.com", "en", overrideVersionCode = 1),
+ SingleLang("ZinManga.top (unoriginal)", "https://zinmanga.top", "en", isNsfw = false, className = "ZinMangaTop"),
SingleLang("Zinmanhwa", "https://zinmanhwa.com", "en"),
SingleLang("ZuttoManga", "https://zuttomanga.com", "en", overrideVersionCode = 1),
+ SingleLang("Çizgi Roman Arşivi", "https://cizgiromanarsivi.com", "tr", className = "CizgiRomanArsivi"),
SingleLang("شبكة كونان العربية", "https://manga.detectiveconanar.com", "ar", className = "DetectiveConanAr", overrideVersionCode = 2),
SingleLang("عرب تونز", "https://arabtoons.net", "ar", isNsfw = true, className = "ArabToons"),
+ SingleLang("فالكون مانجا", "https://falconmanga.com", "ar", className = "FalconManga"),
+ SingleLang("كوميك العرب", "https://comicarab.com", "ar", isNsfw = true, className = "ComicArab"),
SingleLang("مانجا العاشق", "https://3asq.org", "ar", className = "Manga3asq", overrideVersionCode = 2),
SingleLang("مانجا ليك", "https://manga-lek.net", "ar", className = "Mangalek", overrideVersionCode = 4),
SingleLang("مانجا ليكس", "https://mangaleks.com", "ar", className = "MangaLeks"),
SingleLang("مانجا لينك", "https://mangalink.io", "ar", className = "MangaLinkio", overrideVersionCode = 3),
- SingleLang("كوميك العرب", "https://comicarab.com", "ar", isNsfw = true, className = "ComicArab"),
- SingleLang("فالكون مانجا", "https://falconmanga.com", "ar", className = "FalconManga"),
SingleLang("巴卡漫画", "https://bakamh.com", "zh", isNsfw = true, className = "Bakamh"),
)
diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesiaGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesiaGenerator.kt
index 6fa285173..66410e56c 100644
--- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesiaGenerator.kt
+++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangathemesia/MangaThemesiaGenerator.kt
@@ -68,8 +68,8 @@ class MangaThemesiaGenerator : ThemeSourceGenerator {
SingleLang("KomikIndo.co", "https://komikindo.co", "id", className = "KomikindoCo", overrideVersionCode = 3),
SingleLang("KomikMama", "https://komikmama.co", "id", overrideVersionCode = 1),
SingleLang("KomikManhwa", "https://komikmanhwa.me", "id", isNsfw = true),
- SingleLang("Komiktap", "https://komiktap.me", "id", isNsfw = true),
SingleLang("Komiksan", "https://komiksan.link", "id", overrideVersionCode = 2),
+ SingleLang("Komiktap", "https://komiktap.me", "id", isNsfw = true),
SingleLang("Komiku.com", "https://komiku.com", "id", className = "KomikuCom"),
SingleLang("Kuma Scans (Kuma Translation)", "https://kumascans.com", "en", className = "KumaScans", overrideVersionCode = 1),
SingleLang("KumaPoi", "https://kumapoi.info", "id", isNsfw = true, overrideVersionCode = 3),
@@ -86,7 +86,6 @@ class MangaThemesiaGenerator : ThemeSourceGenerator {
SingleLang("Mangacim", "https://www.mangacim.com", "tr", overrideVersionCode = 1),
SingleLang("MangaKita", "https://mangakita.id", "id", overrideVersionCode = 2),
SingleLang("Mangakyo", "https://mangakyo.org", "id", overrideVersionCode = 3),
- SingleLang("Mangás Chan", "https://mangaschan.net", "pt-BR", className = "MangasChan", overrideVersionCode = 1),
SingleLang("MangaShiina", "https://mangashiina.com", "es"),
SingleLang("MangaShiro", "https://mangashiro.me", "id"),
SingleLang("Mangasusu", "https://mangasusuku.xyz", "id", isNsfw = true, overrideVersionCode = 3),
@@ -94,6 +93,7 @@ class MangaThemesiaGenerator : ThemeSourceGenerator {
SingleLang("MangaTale", "https://mangatale.co", "id", overrideVersionCode = 1),
SingleLang("MangaWT", "https://mangawt.com", "tr", overrideVersionCode = 5),
SingleLang("Mangayaro", "https://www.mangayaro.id", "id", overrideVersionCode = 1),
+ SingleLang("Mangás Chan", "https://mangaschan.net", "pt-BR", className = "MangasChan", overrideVersionCode = 1),
SingleLang("Mangás Online", "https://mangasonline.cc", "pt-BR", className = "MangasOnline"),
SingleLang("Manhwa Freak", "https://manhwa-freak.com", "en", overrideVersionCode = 3),
SingleLang("Manhwa Lover", "https://manhwalover.com", "en", isNsfw = true, overrideVersionCode = 1),
diff --git a/src/all/batoto/src/eu/kanade/tachiyomi/extension/all/batoto/BatoTo.kt b/src/all/batoto/src/eu/kanade/tachiyomi/extension/all/batoto/BatoTo.kt
index db3f05876..40a55756c 100644
--- a/src/all/batoto/src/eu/kanade/tachiyomi/extension/all/batoto/BatoTo.kt
+++ b/src/all/batoto/src/eu/kanade/tachiyomi/extension/all/batoto/BatoTo.kt
@@ -456,7 +456,7 @@ open class BatoTo(
}
override fun pageListParse(document: Document): List {
- val script = document.selectFirst("script:containsData(imgHttpLis):containsData(batoWord):containsData(batoPass)")?.html()
+ val script = document.selectFirst("script:containsData(imgHttps):containsData(batoWord):containsData(batoPass)")?.html()
?: throw RuntimeException("Couldn't find script with image data.")
val imgHttpsString = script.substringAfter("const imgHttps =").substringBefore(";").trim()
diff --git a/src/all/vinnieVeritas/build.gradle b/src/all/vinnieVeritas/build.gradle
old mode 100755
new mode 100644
diff --git a/src/all/vinnieVeritas/res/mipmap-hdpi/ic_launcher.png b/src/all/vinnieVeritas/res/mipmap-hdpi/ic_launcher.png
old mode 100755
new mode 100644
diff --git a/src/all/vinnieVeritas/res/mipmap-mdpi/ic_launcher.png b/src/all/vinnieVeritas/res/mipmap-mdpi/ic_launcher.png
old mode 100755
new mode 100644
diff --git a/src/all/vinnieVeritas/res/mipmap-xhdpi/ic_launcher.png b/src/all/vinnieVeritas/res/mipmap-xhdpi/ic_launcher.png
old mode 100755
new mode 100644
diff --git a/src/all/vinnieVeritas/res/mipmap-xxhdpi/ic_launcher.png b/src/all/vinnieVeritas/res/mipmap-xxhdpi/ic_launcher.png
old mode 100755
new mode 100644
diff --git a/src/all/vinnieVeritas/res/mipmap-xxxhdpi/ic_launcher.png b/src/all/vinnieVeritas/res/mipmap-xxxhdpi/ic_launcher.png
old mode 100755
new mode 100644
diff --git a/src/all/vinnieVeritas/src/eu/kanade/tachiyomi/extension/all/vinnieVeritas/vinnieVeritas.kt b/src/all/vinnieVeritas/src/eu/kanade/tachiyomi/extension/all/vinnieVeritas/vinnieVeritas.kt
old mode 100755
new mode 100644
diff --git a/src/all/vinnieVeritas/src/eu/kanade/tachiyomi/extension/all/vinnieVeritas/vinnieVeritasFactory.kt b/src/all/vinnieVeritas/src/eu/kanade/tachiyomi/extension/all/vinnieVeritas/vinnieVeritasFactory.kt
old mode 100755
new mode 100644
index eec5e5d0d..90ebe8a14
--- a/src/all/vinnieVeritas/src/eu/kanade/tachiyomi/extension/all/vinnieVeritas/vinnieVeritasFactory.kt
+++ b/src/all/vinnieVeritas/src/eu/kanade/tachiyomi/extension/all/vinnieVeritas/vinnieVeritasFactory.kt
@@ -1,13 +1,13 @@
-package eu.kanade.tachiyomi.extension.all.vinnieVeritas
-
-import eu.kanade.tachiyomi.source.Source
-import eu.kanade.tachiyomi.source.SourceFactory
-
-class vinnieVeritasFactory : SourceFactory {
-
- override fun createSources(): List