Remove Reaper, Astra, Vortexfree (#8795)
* Delete reaperscans * Delete astrascans * Delete vortexscansfree
@ -1,10 +0,0 @@
|
|||||||
ext {
|
|
||||||
extName = 'Astra Scans'
|
|
||||||
extClass = '.AstraScans'
|
|
||||||
themePkg = 'mangathemesia'
|
|
||||||
baseUrl = 'https://astrascans.org'
|
|
||||||
overrideVersionCode = 0
|
|
||||||
isNsfw = false
|
|
||||||
}
|
|
||||||
|
|
||||||
apply from: "$rootDir/common.gradle"
|
|
Before Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 8.2 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 23 KiB |
@ -1,15 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.extension.en.astrascans
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia
|
|
||||||
import eu.kanade.tachiyomi.network.interceptor.rateLimit
|
|
||||||
|
|
||||||
class AstraScans : MangaThemesia(
|
|
||||||
"Astra Scans",
|
|
||||||
"https://astrascans.org",
|
|
||||||
"en",
|
|
||||||
"/series",
|
|
||||||
) {
|
|
||||||
override val client = super.client.newBuilder()
|
|
||||||
.rateLimit(3)
|
|
||||||
.build()
|
|
||||||
}
|
|
@ -1,10 +0,0 @@
|
|||||||
ext {
|
|
||||||
extName = 'Reaper Scans'
|
|
||||||
extClass = '.ReaperScans'
|
|
||||||
themePkg = 'heancms'
|
|
||||||
baseUrl = 'https://reaperscans.com'
|
|
||||||
overrideVersionCode = 29
|
|
||||||
isNsfw = false
|
|
||||||
}
|
|
||||||
|
|
||||||
apply from: "$rootDir/common.gradle"
|
|
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 5.6 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 14 KiB |
@ -1,83 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.extension.en.reaperscans
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.multisrc.heancms.HeanCms
|
|
||||||
import eu.kanade.tachiyomi.multisrc.heancms.SortProperty
|
|
||||||
import eu.kanade.tachiyomi.network.GET
|
|
||||||
import eu.kanade.tachiyomi.network.interceptor.rateLimit
|
|
||||||
import eu.kanade.tachiyomi.source.model.Page
|
|
||||||
import eu.kanade.tachiyomi.source.model.SManga
|
|
||||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
|
||||||
import okhttp3.Request
|
|
||||||
import okhttp3.Response
|
|
||||||
import java.text.SimpleDateFormat
|
|
||||||
import java.util.Locale
|
|
||||||
import java.util.TimeZone
|
|
||||||
|
|
||||||
class ReaperScans : HeanCms("Reaper Scans", "https://reaperscans.com", "en") {
|
|
||||||
|
|
||||||
override val versionId = 3
|
|
||||||
|
|
||||||
override val client = super.client.newBuilder()
|
|
||||||
.rateLimit(1)
|
|
||||||
.build()
|
|
||||||
|
|
||||||
override val useNewChapterEndpoint = true
|
|
||||||
override val useNewQueryEndpoint = true
|
|
||||||
override val enableLogin = true
|
|
||||||
override val dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US).apply { this.timeZone = TimeZone.getTimeZone("UTC") }
|
|
||||||
override val cdnUrl = "https://media.reaperscans.com/file/4SRBHm"
|
|
||||||
|
|
||||||
override fun latestUpdatesRequest(page: Int): Request {
|
|
||||||
val url = "$apiUrl/query".toHttpUrl().newBuilder()
|
|
||||||
.addQueryParameter("query_string", "")
|
|
||||||
.addQueryParameter(if (useNewQueryEndpoint) "status" else "series_status", "All")
|
|
||||||
.addQueryParameter("order", "desc")
|
|
||||||
.addQueryParameter("orderBy", "updated_at")
|
|
||||||
.addQueryParameter("series_type", "Comic")
|
|
||||||
.addQueryParameter("page", page.toString())
|
|
||||||
.addQueryParameter("perPage", "12")
|
|
||||||
.addQueryParameter("tags_ids", "[]")
|
|
||||||
.addQueryParameter("adult", "true")
|
|
||||||
|
|
||||||
return GET(url.build(), headers)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun chapterListRequest(manga: SManga): Request = GET(
|
|
||||||
"$apiUrl/chapters/".toHttpUrl().newBuilder().apply {
|
|
||||||
val mangaUrl = (baseUrl + manga.url).toHttpUrl()
|
|
||||||
addPathSegment(mangaUrl.fragment!!)
|
|
||||||
addQueryParameter("page", "1")
|
|
||||||
addQueryParameter("perPage", "1000")
|
|
||||||
fragment(mangaUrl.pathSegments.last())
|
|
||||||
// not needed. just added to be authentic
|
|
||||||
addQueryParameter("query", "")
|
|
||||||
addQueryParameter("order", "desc")
|
|
||||||
}.build(),
|
|
||||||
headers,
|
|
||||||
)
|
|
||||||
|
|
||||||
override fun pageListParse(response: Response): List<Page> {
|
|
||||||
val result = response.parseAs<ReaperPagePayloadDto>()
|
|
||||||
|
|
||||||
if (result.isPaywalled() && result.chapter.chapterData == null) {
|
|
||||||
throw Exception(intl["paid_chapter_error"])
|
|
||||||
}
|
|
||||||
|
|
||||||
return if (useNewChapterEndpoint) {
|
|
||||||
result.chapter.chapterData?.images().orEmpty().mapIndexed { i, img ->
|
|
||||||
Page(i, imageUrl = img.toAbsoluteUrl())
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
result.data.orEmpty().mapIndexed { i, img ->
|
|
||||||
Page(i, imageUrl = img.toAbsoluteUrl())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getSortProperties(): List<SortProperty> = listOf(
|
|
||||||
SortProperty(intl["sort_by_title"], "title"),
|
|
||||||
SortProperty(intl["sort_by_views"], "total_views"),
|
|
||||||
SortProperty(intl["sort_by_latest"], "updated_at"),
|
|
||||||
SortProperty(intl["sort_by_created_at"], "created_at"),
|
|
||||||
)
|
|
||||||
}
|
|
@ -1,39 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.extension.en.reaperscans
|
|
||||||
|
|
||||||
import kotlinx.serialization.SerialName
|
|
||||||
import kotlinx.serialization.Serializable
|
|
||||||
|
|
||||||
@Serializable
|
|
||||||
class ReaperPagePayloadDto(
|
|
||||||
val chapter: ReaperPageDto,
|
|
||||||
private val paywall: Boolean = false,
|
|
||||||
val data: List<String>? = emptyList(),
|
|
||||||
) {
|
|
||||||
fun isPaywalled() = paywall
|
|
||||||
}
|
|
||||||
|
|
||||||
@Serializable
|
|
||||||
class ReaperPageDto(
|
|
||||||
@SerialName("chapter_data") val chapterData: ReaperPageDataDto?,
|
|
||||||
)
|
|
||||||
|
|
||||||
@Serializable
|
|
||||||
class ReaperPageDataDto(
|
|
||||||
private val images: List<String>? = emptyList(),
|
|
||||||
private val files: List<ReaperPageFileDto>? = emptyList(),
|
|
||||||
) {
|
|
||||||
fun images(): List<String> {
|
|
||||||
return if (images.isNullOrEmpty()) {
|
|
||||||
files?.map {
|
|
||||||
it.url
|
|
||||||
}.orEmpty()
|
|
||||||
} else {
|
|
||||||
images
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Serializable
|
|
||||||
class ReaperPageFileDto(
|
|
||||||
val url: String,
|
|
||||||
)
|
|
@ -1,10 +0,0 @@
|
|||||||
ext {
|
|
||||||
extName = 'Vortex Scans Free (unoriginal)'
|
|
||||||
extClass = '.VortexScansFree'
|
|
||||||
themePkg = 'mangathemesia'
|
|
||||||
baseUrl = 'https://vortexscansfree.com'
|
|
||||||
overrideVersionCode = 0
|
|
||||||
isNsfw = false
|
|
||||||
}
|
|
||||||
|
|
||||||
apply from: "$rootDir/common.gradle"
|
|
Before Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 6.9 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 19 KiB |
@ -1,9 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.extension.en.vortexscansfree
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia
|
|
||||||
|
|
||||||
class VortexScansFree : MangaThemesia(
|
|
||||||
"Vortex Scans Free (unoriginal)",
|
|
||||||
"https://vortexscansfree.com",
|
|
||||||
"en",
|
|
||||||
)
|
|