Compare commits
51 Commits
9ead0e0218
...
4856f0b89e
Author | SHA1 | Date |
---|---|---|
Claudemirovsky | 4856f0b89e | |
Claudemirovsky | 742027746e | |
stevenyomi | dd3b5b0140 | |
beerpsi | 84453ebf50 | |
stevenyomi | 46990a4d9f | |
stevenyomi | 956656cc3e | |
Eshlender | 169f83b594 | |
Fermín Cirella | 7e2fa5de61 | |
Claudemirovsky | 8f7c88a723 | |
bapeey | 246fe574e7 | |
Eshlender | 0b214c2d89 | |
Eshlender | 90f361e243 | |
stevenyomi | 3ce0383555 | |
Mike | dd60a193e7 | |
mohamedotaku | cc9a0d2b41 | |
Secozzi | 0b7dd2f6bc | |
stevenyomi | 2023438856 | |
stevenyomi | 579a574769 | |
beerpsi | 0053823dcf | |
Secozzi | 3c0f484afc | |
Mike | d8b551bbc9 | |
Mike | 38322fcb0c | |
Luqman | bbeb1622ca | |
beerpsi | 891f335741 | |
mohamedotaku | 8c93344f17 | |
mohamedotaku | 6911eb1c68 | |
stevenyomi | 0926e29994 | |
Secozzi | 617c3bf990 | |
mohamedotaku | 3e8dc4d05c | |
stevenyomi | 92a44a6f6f | |
stevenyomi | 4b309832d3 | |
Luqman | 879efc332f | |
AwkwardPeak7 | 27c632af46 | |
xingyuan li | 1ffe983a73 | |
Mike | 775560e1f3 | |
AwkwardPeak7 | 0737e27057 | |
Secozzi | a18a5e527c | |
beerpsi | a200ab1081 | |
Mike | 0ca16707e2 | |
Luqman | c851f7d7ee | |
Luqman | 3a9c9daefc | |
Mike | 406dfe4d57 | |
stevenyomi | ea75ef8070 | |
Mike | 0b0c05fa3d | |
mohamedotaku | 9984f5e836 | |
stevenyomi | cd14304c95 | |
beerpsi | 5d47cb7ec6 | |
Secozzi | 220a70b423 | |
Sofie | 5f8099de05 | |
gan-of-culture | 4b5a4eee30 | |
Secozzi | ebf1e8b06a |
|
@ -6,6 +6,8 @@ apply plugin: 'org.jmailen.kotlinter'
|
|||
assert !ext.has("pkgNameSuffix")
|
||||
assert !ext.has("libVersion")
|
||||
|
||||
assert extName.chars().max().asInt < 0x180 : "Extension name should be romanized"
|
||||
|
||||
android {
|
||||
compileSdk AndroidConfig.compileSdk
|
||||
|
||||
|
|
|
@ -34,7 +34,9 @@ fun SharedPreferences.getPrefCustomUA(): String? {
|
|||
fun addRandomUAPreferenceToScreen(
|
||||
screen: PreferenceScreen,
|
||||
) {
|
||||
ListPreference(screen.context).apply {
|
||||
val context = screen.context
|
||||
|
||||
ListPreference(context).apply {
|
||||
key = PREF_KEY_RANDOM_UA
|
||||
title = TITLE_RANDOM_UA
|
||||
entries = RANDOM_UA_ENTRIES
|
||||
|
@ -43,28 +45,28 @@ fun addRandomUAPreferenceToScreen(
|
|||
setDefaultValue("off")
|
||||
}.also(screen::addPreference)
|
||||
|
||||
EditTextPreference(screen.context).apply {
|
||||
EditTextPreference(context).apply {
|
||||
key = PREF_KEY_CUSTOM_UA
|
||||
title = TITLE_CUSTOM_UA
|
||||
summary = CUSTOM_UA_SUMMARY
|
||||
setOnPreferenceChangeListener { _, newValue ->
|
||||
try {
|
||||
Headers.Builder().add("User-Agent", newValue as String).build()
|
||||
Headers.headersOf("User-Agent", newValue as String)
|
||||
true
|
||||
} catch (e: IllegalArgumentException) {
|
||||
Toast.makeText(screen.context, "User Agent invalid:${e.message}", Toast.LENGTH_LONG).show()
|
||||
Toast.makeText(context, "Invalid user agent string: ${e.message}", Toast.LENGTH_LONG).show()
|
||||
false
|
||||
}
|
||||
}
|
||||
}.also(screen::addPreference)
|
||||
}
|
||||
|
||||
const val TITLE_RANDOM_UA = "Random User-Agent (Requires Restart)"
|
||||
const val TITLE_RANDOM_UA = "Random user agent string (requires restart)"
|
||||
const val PREF_KEY_RANDOM_UA = "pref_key_random_ua_"
|
||||
val RANDOM_UA_ENTRIES = arrayOf("OFF", "Desktop", "Mobile")
|
||||
val RANDOM_UA_VALUES = arrayOf("off", "desktop", "mobile")
|
||||
|
||||
const val TITLE_CUSTOM_UA = "Custom User-Agent (Requires Restart)"
|
||||
const val TITLE_CUSTOM_UA = "Custom user agent string (requires restart)"
|
||||
const val PREF_KEY_CUSTOM_UA = "pref_key_custom_ua_"
|
||||
const val CUSTOM_UA_SUMMARY = "Leave blank to use application default user-agent (IGNORED if Random User-Agent is enabled)"
|
||||
const val CUSTOM_UA_SUMMARY = "Leave blank to use the default user agent string (ignored if random user agent string is enabled)"
|
||||
|
||||
|
|
|
@ -1,68 +0,0 @@
|
|||
package eu.kanade.tachiyomi.extension.en.manhwaxxl
|
||||
|
||||
import eu.kanade.tachiyomi.multisrc.bakamanga.BakaManga
|
||||
|
||||
class ManhwaXXL : BakaManga(
|
||||
"Manhwa XXL",
|
||||
"https://manhwaxxl.com",
|
||||
"en",
|
||||
) {
|
||||
override fun getGenreList() = arrayOf(
|
||||
Pair("All", ""),
|
||||
Pair("Action", "action"),
|
||||
Pair("Adaptation", "adaptation"),
|
||||
Pair("Adult", "adult"),
|
||||
Pair("Adventure", "adventure"),
|
||||
Pair("BL", "bl"),
|
||||
Pair("Comedy", "comedy"),
|
||||
Pair("Cooking", "cooking"),
|
||||
Pair("Demons", "demons"),
|
||||
Pair("Drama", "drama"),
|
||||
Pair("Ecchi", "ecchi"),
|
||||
Pair("Fantasy", "fantasy"),
|
||||
Pair("Full color", "full-color"),
|
||||
Pair("Game", "game"),
|
||||
Pair("Gender Bender", "gender-bender"),
|
||||
Pair("GL", "gl"),
|
||||
Pair("Harem", "harem"),
|
||||
Pair("Historical", "historical"),
|
||||
Pair("Horror", "horror"),
|
||||
Pair("Isekai", "isekai"),
|
||||
Pair("Josei", "josei"),
|
||||
Pair("Live action", "live-action"),
|
||||
Pair("Love & Romance", "love-romance"),
|
||||
Pair("Magic", "magic"),
|
||||
Pair("Manga", "manga"),
|
||||
Pair("Manhua", "manhua"),
|
||||
Pair("Manhwa", "manhwa"),
|
||||
Pair("Martial Arts", "martial-arts"),
|
||||
Pair("Mature", "mature"),
|
||||
Pair("Mecha", "mecha"),
|
||||
Pair("Mystery", "mystery"),
|
||||
Pair("Omegaverse", "omegaverse"),
|
||||
Pair("Psychological", "psychological"),
|
||||
Pair("Raw", "raw"),
|
||||
Pair("Reincarnation", "reincarnation"),
|
||||
Pair("Romance", "romance"),
|
||||
Pair("RPG", "rpg"),
|
||||
Pair("School Life", "school-life"),
|
||||
Pair("Sci-fi", "sci-fi"),
|
||||
Pair("Seinen", "seinen"),
|
||||
Pair("Shoujo", "shoujo"),
|
||||
Pair("Shoujo Ai", "shoujo-ai"),
|
||||
Pair("Shounen", "shounen"),
|
||||
Pair("Slice of Life", "slice-of-life"),
|
||||
Pair("Smut", "smut"),
|
||||
Pair("Sports", "sports"),
|
||||
Pair("Supernatural", "supernatural"),
|
||||
Pair("Thriller", "thriller"),
|
||||
Pair("Tragedy", "tragedy"),
|
||||
Pair("Vampire", "vampire"),
|
||||
Pair("Vanilla", "vanilla"),
|
||||
Pair("Webtoon", "webtoon"),
|
||||
Pair("Webtoons", "webtoons"),
|
||||
Pair("Yaoi", "yaoi"),
|
||||
Pair("Yuri", "yuri"),
|
||||
Pair("Zombie", "zombie"),
|
||||
)
|
||||
}
|
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 5.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 6.3 KiB |
After Width: | Height: | Size: 9.1 KiB |
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 9.1 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
|
@ -0,0 +1,7 @@
|
|||
package eu.kanade.tachiyomi.extension.id.neumanga
|
||||
|
||||
import eu.kanade.tachiyomi.multisrc.colorlibanime.ColorlibAnime
|
||||
|
||||
class Neumanga : ColorlibAnime("Neumanga", "https://neumanga.xyz", "id") {
|
||||
override val versionId = 2
|
||||
}
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 8.7 KiB |
|
@ -1,165 +0,0 @@
|
|||
package eu.kanade.tachiyomi.extension.es.yugenmangas
|
||||
|
||||
import android.app.Application
|
||||
import android.content.SharedPreferences
|
||||
import eu.kanade.tachiyomi.multisrc.heancms.Genre
|
||||
import eu.kanade.tachiyomi.multisrc.heancms.HeanCms
|
||||
import eu.kanade.tachiyomi.network.interceptor.rateLimitHost
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.ProtocolException
|
||||
import okhttp3.Response
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import java.io.IOException
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.TimeZone
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
class YugenMangas :
|
||||
HeanCms(
|
||||
"YugenMangas",
|
||||
"https://yugenmangas.net",
|
||||
"es",
|
||||
"https://api.yugenmangas.net",
|
||||
) {
|
||||
|
||||
// Site changed from Madara to HeanCms.
|
||||
override val versionId = 2
|
||||
|
||||
override val baseUrl by lazy { getPrefBaseUrl() }
|
||||
|
||||
private val preferences by lazy {
|
||||
Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
|
||||
}
|
||||
|
||||
private var lastDomain = ""
|
||||
|
||||
private fun domainChangeIntercept(chain: Interceptor.Chain): Response {
|
||||
val request = chain.request()
|
||||
|
||||
if (!request.url.host.startsWith("yugenmangas")) {
|
||||
return chain.proceed(request)
|
||||
}
|
||||
|
||||
if (lastDomain.isNotEmpty()) {
|
||||
val newUrl = request.url.newBuilder()
|
||||
.host(preferences.baseUrlHost)
|
||||
.build()
|
||||
|
||||
return chain.proceed(
|
||||
request.newBuilder()
|
||||
.url(newUrl)
|
||||
.build(),
|
||||
)
|
||||
}
|
||||
|
||||
val response = try {
|
||||
chain.proceed(request)
|
||||
} catch (e: ProtocolException) {
|
||||
if (e.message?.contains("Too many follow-up requests") == true) {
|
||||
throw IOException("No se pudo obtener la nueva URL del sitio")
|
||||
} else {
|
||||
throw e
|
||||
}
|
||||
}
|
||||
|
||||
if (request.url.host == response.request.url.host) return response
|
||||
|
||||
response.close()
|
||||
|
||||
preferences.baseUrlHost = response.request.url.host
|
||||
|
||||
lastDomain = request.url.host
|
||||
|
||||
val newUrl = request.url.newBuilder()
|
||||
.host(response.request.url.host)
|
||||
.build()
|
||||
|
||||
return chain.proceed(
|
||||
request.newBuilder()
|
||||
.url(newUrl)
|
||||
.build(),
|
||||
)
|
||||
}
|
||||
|
||||
override val slugStrategy = SlugStrategy.ID
|
||||
override val useNewQueryEndpoint = true
|
||||
|
||||
override val client = super.client.newBuilder()
|
||||
.connectTimeout(60, TimeUnit.SECONDS)
|
||||
.readTimeout(90, TimeUnit.SECONDS)
|
||||
.rateLimitHost(apiUrl.toHttpUrl(), 2, 3)
|
||||
.addInterceptor(::domainChangeIntercept)
|
||||
.build()
|
||||
|
||||
override val coverPath: String = ""
|
||||
|
||||
override val dateFormat: SimpleDateFormat = super.dateFormat.apply {
|
||||
timeZone = TimeZone.getTimeZone("UTC")
|
||||
}
|
||||
|
||||
override fun getGenreList(): List<Genre> = listOf(
|
||||
Genre("+18", 1),
|
||||
Genre("Acción", 36),
|
||||
Genre("Adulto", 38),
|
||||
Genre("Apocalíptico", 3),
|
||||
Genre("Artes marciales (1)", 16),
|
||||
Genre("Artes marciales (2)", 37),
|
||||
Genre("Aventura", 2),
|
||||
Genre("Boys Love", 4),
|
||||
Genre("Ciencia ficción", 39),
|
||||
Genre("Comedia", 5),
|
||||
Genre("Demonios", 6),
|
||||
Genre("Deporte", 26),
|
||||
Genre("Drama", 7),
|
||||
Genre("Ecchi", 8),
|
||||
Genre("Familia", 9),
|
||||
Genre("Fantasía", 10),
|
||||
Genre("Girls Love", 11),
|
||||
Genre("Gore", 12),
|
||||
Genre("Harem", 13),
|
||||
Genre("Harem inverso", 14),
|
||||
Genre("Histórico", 48),
|
||||
Genre("Horror", 41),
|
||||
Genre("Isekai", 40),
|
||||
Genre("Josei", 15),
|
||||
Genre("Maduro", 42),
|
||||
Genre("Magia", 17),
|
||||
Genre("MangoScan", 35),
|
||||
Genre("Mecha", 18),
|
||||
Genre("Militar", 19),
|
||||
Genre("Misterio", 20),
|
||||
Genre("Psicológico", 21),
|
||||
Genre("Realidad virtual", 46),
|
||||
Genre("Recuentos de la vida", 25),
|
||||
Genre("Reencarnación", 22),
|
||||
Genre("Regresion", 23),
|
||||
Genre("Romance", 24),
|
||||
Genre("Seinen", 27),
|
||||
Genre("Shonen", 28),
|
||||
Genre("Shoujo", 29),
|
||||
Genre("Sistema", 45),
|
||||
Genre("Smut", 30),
|
||||
Genre("Supernatural", 31),
|
||||
Genre("Supervivencia", 32),
|
||||
Genre("Tragedia", 33),
|
||||
Genre("Transmigración", 34),
|
||||
Genre("Vida Escolar", 47),
|
||||
Genre("Yaoi", 43),
|
||||
Genre("Yuri", 44),
|
||||
)
|
||||
|
||||
companion object {
|
||||
private const val defaultBaseUrlHost = "yugenmangas.net"
|
||||
private const val BASE_URL_PREF = "prefOverrideBaseUrl"
|
||||
}
|
||||
|
||||
private var SharedPreferences.baseUrlHost
|
||||
get() = getString(BASE_URL_PREF, defaultBaseUrlHost) ?: defaultBaseUrlHost
|
||||
set(newHost) {
|
||||
edit().putString(BASE_URL_PREF, newHost).commit()
|
||||
}
|
||||
|
||||
private fun getPrefBaseUrl(): String = preferences.baseUrlHost.let { "https://$it" }
|
||||
}
|
Before Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 8.3 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 16 KiB |
|
@ -1,9 +0,0 @@
|
|||
package eu.kanade.tachiyomi.extension.en.archerscans
|
||||
|
||||
import eu.kanade.tachiyomi.multisrc.madara.Madara
|
||||
|
||||
class ArcheRScans : Madara("ArcheR Scans", "https://www.archerscans.com", "en") {
|
||||
override val useNewChapterEndpoint = false
|
||||
|
||||
override fun searchPage(page: Int): String = if (page == 1) "" else "page/$page/"
|
||||
}
|
Before Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 7.1 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 21 KiB |
|
@ -1,17 +0,0 @@
|
|||
package eu.kanade.tachiyomi.extension.en.astrallibrary
|
||||
|
||||
import eu.kanade.tachiyomi.multisrc.madara.Madara
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import okhttp3.Request
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Locale
|
||||
|
||||
class AstralLibrary : Madara("Astral Library", "https://www.astrallibrary.net", "en", SimpleDateFormat("d MMM", Locale.US)) {
|
||||
override fun popularMangaRequest(page: Int): Request {
|
||||
return GET("$baseUrl/manga-tag/manga/?m_orderby=views&page=$page", headers)
|
||||
}
|
||||
|
||||
override fun latestUpdatesRequest(page: Int): Request {
|
||||
return GET("$baseUrl/manga-tag/manga/?m_orderby=latest&page=$page", headers)
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 7.8 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 9.0 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 6.9 KiB |
Before Width: | Height: | Size: 9.2 KiB |
|
@ -1,9 +0,0 @@
|
|||
package eu.kanade.tachiyomi.extension.fr.bluesolo
|
||||
|
||||
import eu.kanade.tachiyomi.multisrc.madara.Madara
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Locale
|
||||
|
||||
class BlueSolo : Madara("Blue Solo", "https://www1.bluesolo.org", "fr", dateFormat = SimpleDateFormat("d MMMM yyyy", Locale.FRENCH)) {
|
||||
override val mangaDetailsSelectorStatus = "div.summary-heading:contains(Statut) + .summary-content"
|
||||
}
|
Before Width: | Height: | Size: 5.9 KiB |
Before Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 8.9 KiB |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 25 KiB |
|
@ -1,64 +0,0 @@
|
|||
package eu.kanade.tachiyomi.extension.en.coffeemangatop
|
||||
|
||||
import eu.kanade.tachiyomi.multisrc.madara.Madara
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.source.model.Page
|
||||
import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
import org.jsoup.nodes.Document
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Locale
|
||||
|
||||
class CoffeeMangaTop : Madara(
|
||||
"CoffeeManga.top (unoriginal)",
|
||||
"https://coffeemanga.top",
|
||||
"en",
|
||||
dateFormat = SimpleDateFormat("MMM dd, HH:mm", Locale.ENGLISH),
|
||||
) {
|
||||
override val useNewChapterEndpoint = false
|
||||
|
||||
override fun searchPage(page: Int): String = "search?page=$page"
|
||||
|
||||
override fun popularMangaRequest(page: Int): Request =
|
||||
GET("$baseUrl/popular-manga?page=$page", headers)
|
||||
|
||||
override fun latestUpdatesRequest(page: Int): Request =
|
||||
GET("$baseUrl/latest-manga?page=$page", headers)
|
||||
|
||||
// Copied from IsekaiScan.top (unoriginal)
|
||||
override fun chapterListParse(response: Response): List<SChapter> {
|
||||
val document = response.asJsoup()
|
||||
val chaptersWrapper = document.select("div[id^=manga-chapters-holder]")
|
||||
|
||||
var chapterElements = document.select(chapterListSelector())
|
||||
|
||||
if (chapterElements.isEmpty() && !chaptersWrapper.isNullOrEmpty()) {
|
||||
val mangaId = chaptersWrapper.attr("data-id")
|
||||
val xhrHeaders = headersBuilder()
|
||||
.add("X-Requested-With", "XMLHttpRequest")
|
||||
.build()
|
||||
val xhrRequest = GET("$baseUrl/ajax-list-chapter?mangaID=$mangaId", xhrHeaders)
|
||||
val xhrResponse = client.newCall(xhrRequest).execute()
|
||||
|
||||
chapterElements = xhrResponse.asJsoup().select(chapterListSelector())
|
||||
xhrResponse.close()
|
||||
}
|
||||
|
||||
countViews(document)
|
||||
return chapterElements.map(::chapterFromElement)
|
||||
}
|
||||
|
||||
// Copied from IsekaiScan.top (unoriginal)
|
||||
override fun pageListParse(document: Document): List<Page> {
|
||||
val stringArray = document.select("p#arraydata").text().split(",").toTypedArray()
|
||||
return stringArray.mapIndexed { index, url ->
|
||||
Page(
|
||||
index,
|
||||
document.location(),
|
||||
url,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 8.2 KiB |
Before Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 41 KiB |
|
@ -1,14 +0,0 @@
|
|||
package eu.kanade.tachiyomi.extension.es.dokkomanga
|
||||
|
||||
import eu.kanade.tachiyomi.multisrc.madara.Madara
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Locale
|
||||
|
||||
class DokkoManga : Madara(
|
||||
"DokkoManga",
|
||||
"https://dokkomanga.com",
|
||||
"es",
|
||||
SimpleDateFormat("MMMMM dd, yyyy", Locale("es")),
|
||||
) {
|
||||
override val useNewChapterEndpoint = true
|
||||
}
|
Before Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 5.4 KiB |
Before Width: | Height: | Size: 7.1 KiB |
|
@ -1,7 +0,0 @@
|
|||
package eu.kanade.tachiyomi.extension.en.dreammanga
|
||||
|
||||
import eu.kanade.tachiyomi.multisrc.madara.Madara
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Locale
|
||||
|
||||
class DreamManga : Madara("Dream Manga", "https://www.swarmmanga.com", "en", SimpleDateFormat("dd/MM/yyyy", Locale.US))
|
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 7.3 KiB |
Before Width: | Height: | Size: 11 KiB |
|
@ -1,22 +0,0 @@
|
|||
package eu.kanade.tachiyomi.extension.ar.falconmanga
|
||||
|
||||
import eu.kanade.tachiyomi.multisrc.madara.Madara
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Locale
|
||||
|
||||
class FalconManga : Madara(
|
||||
"فالكون مانجا",
|
||||
"https://falconmanga.com",
|
||||
"ar",
|
||||
dateFormat = SimpleDateFormat("dd MMMM، yyyy", Locale("ar")),
|
||||
) {
|
||||
override val useNewChapterEndpoint = true
|
||||
|
||||
override fun searchPage(page: Int): String {
|
||||
return if (page > 1) {
|
||||
"page/$page/"
|
||||
} else {
|
||||
""
|
||||
}
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 6.3 KiB |
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 9.4 KiB |
Before Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 31 KiB |
|
@ -1,20 +0,0 @@
|
|||
package eu.kanade.tachiyomi.extension.pt.finalscans
|
||||
|
||||
import eu.kanade.tachiyomi.multisrc.madara.Madara
|
||||
import eu.kanade.tachiyomi.network.interceptor.rateLimit
|
||||
import okhttp3.OkHttpClient
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Locale
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
class FinalScans : Madara(
|
||||
"Final Scans",
|
||||
"https://finalscans.com",
|
||||
"pt-BR",
|
||||
SimpleDateFormat("MMMMM dd, yyyy", Locale("pt", "BR")),
|
||||
) {
|
||||
|
||||
override val client: OkHttpClient = super.client.newBuilder()
|
||||
.rateLimit(1, 2, TimeUnit.SECONDS)
|
||||
.build()
|
||||
}
|
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 8.0 KiB |
Before Width: | Height: | Size: 12 KiB |
|
@ -1,9 +0,0 @@
|
|||
package eu.kanade.tachiyomi.extension.en.firstkissmangablog
|
||||
|
||||
import eu.kanade.tachiyomi.multisrc.madara.Madara
|
||||
|
||||
class FirstKissMangaBlog : Madara("1stKissManga.blog", "https://1stkissmanga.blog", "en") {
|
||||
override val useNewChapterEndpoint = false
|
||||
|
||||
override fun searchPage(page: Int): String = if (page == 1) "" else "page/$page/"
|
||||
}
|
Before Width: | Height: | Size: 4.3 KiB |