removing Quantum Toon, NIGHT SCANS (#10602)

This commit is contained in:
Luqman 2025-09-19 13:53:13 +07:00 committed by Draff
parent 95e79f8690
commit 344b380d65
Signed by: Draff
GPG Key ID: E8A89F3211677653
15 changed files with 0 additions and 194 deletions

View File

@ -1,10 +0,0 @@
ext {
extName = 'NIGHT SCANS'
extClass = '.NightScans'
themePkg = 'mangathemesia'
baseUrl = 'https://nightsup.net'
overrideVersionCode = 12
isNsfw = true
}
apply from: "$rootDir/common.gradle"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

View File

@ -1,38 +0,0 @@
package eu.kanade.tachiyomi.extension.en.nightscans
import androidx.preference.PreferenceScreen
import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesiaAlt
import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesiaPaidChapterHelper
import eu.kanade.tachiyomi.network.interceptor.rateLimit
import eu.kanade.tachiyomi.source.model.Page
import okhttp3.OkHttpClient
import org.jsoup.nodes.Document
import java.util.concurrent.TimeUnit
class NightScans : MangaThemesiaAlt("NIGHT SCANS", "https://nightsup.net", "en", "/series") {
override val listUrl = "/manga/list-mode"
override val slugRegex = Regex("""^(\d+(st)?-)""")
override val client: OkHttpClient = super.client.newBuilder()
.rateLimit(20, 4, TimeUnit.SECONDS)
.build()
private val paidChapterHelper = MangaThemesiaPaidChapterHelper()
override fun setupPreferenceScreen(screen: PreferenceScreen) {
super.setupPreferenceScreen(screen)
paidChapterHelper.addHidePaidChaptersPreferenceToScreen(screen, intl)
}
override fun chapterListSelector(): String {
return paidChapterHelper.getChapterListSelectorBasedOnHidePaidChaptersPref(
super.chapterListSelector(),
preferences,
)
}
override fun pageListParse(document: Document): List<Page> {
return super.pageListParse(document).distinctBy { it.imageUrl }
}
}

View File

@ -1,10 +0,0 @@
ext {
extName = 'Quantum Toon'
extClass = '.QuantumScans'
themePkg = 'iken'
baseUrl = 'https://quantumtoon.com'
overrideVersionCode = 29
isNsfw = false
}
apply from: "$rootDir/common.gradle"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

View File

@ -1,9 +0,0 @@
package eu.kanade.tachiyomi.extension.en.quantumscans
import kotlinx.serialization.Serializable
@Serializable
class GenreDto(val id: Int, val name: String)
@Serializable
class PageDto(val url: String, val order: Int)

View File

@ -1,127 +0,0 @@
package eu.kanade.tachiyomi.extension.en.quantumscans
import eu.kanade.tachiyomi.multisrc.iken.GenreFilter
import eu.kanade.tachiyomi.multisrc.iken.Iken
import eu.kanade.tachiyomi.multisrc.iken.SelectFilter
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.interceptor.rateLimit
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 keiyoushi.utils.parseAs
import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.Request
import okhttp3.Response
import rx.Observable
import java.util.concurrent.TimeUnit
// Moved from HeanCms to Iken
class QuantumScans : Iken(
"Quantum Toon",
"en",
"https://quantumtoon.com",
"https://vapi.quantumtoon.com",
) {
override val versionId = 4
override val client = super.client.newBuilder()
.rateLimit(3, 1, TimeUnit.SECONDS)
.build()
override fun popularMangaRequest(page: Int): Request {
val url = "$apiUrl/api/query".toHttpUrl().newBuilder().apply {
addQueryParameter("page", page.toString())
addQueryParameter("perPage", "18")
addQueryParameter("orderBy", "totalViews")
}.build()
return GET(url, headers)
}
override fun popularMangaParse(response: Response): MangasPage {
return searchMangaParse(response)
}
override fun latestUpdatesRequest(page: Int): Request {
val url = "$apiUrl/api/query".toHttpUrl().newBuilder().apply { // 'query' instead of 'posts'
addQueryParameter("page", page.toString())
addQueryParameter("perPage", "18")
addQueryParameter("orderBy", "updatedAt")
}.build()
return GET(url, headers)
}
override fun pageListRequest(chapter: SChapter): Request {
return GET(baseUrl + chapter.url, headersBuilder().add("rsc", "1").build())
}
override fun pageListParse(response: Response): List<Page> {
return response.body.string().lines()
.mapNotNull { line ->
val jsonStartIndex = line.indexOf('{').takeIf { it != -1 } ?: return@mapNotNull null
val jsonString = line.substring(jsonStartIndex)
try {
jsonString.parseAs<PageDto>().takeIf { it.url.isNotEmpty() }
} catch (e: Exception) {
null
}
}
.sortedBy { it.order }
.mapIndexed { i, p -> Page(i, imageUrl = p.url) }
}
private var genresList: List<Pair<String, String>> = emptyList()
private var fetchGenresAttempts = 0
private fun fetchGenres() {
try {
val response = client.newCall(GET("$apiUrl/api/genres", headers)).execute()
genresList = response.parseAs<List<GenreDto>>()
.map { Pair(it.name, it.id.toString()) }
} catch (e: Throwable) {} finally {
fetchGenresAttempts++
}
}
override fun getFilterList(): FilterList {
if (genresList.isEmpty() && fetchGenresAttempts < 3) {
Observable.fromCallable { fetchGenres() }
.subscribeOn(rx.schedulers.Schedulers.io())
.subscribe()
}
val filters = mutableListOf<Filter<*>>(
SortFilter(),
StatusFilter(),
)
if (genresList.isNotEmpty()) {
filters.add(GenreFilter(genresList))
} else {
filters.add(Filter.Header("Press 'Reset' to attempt to load genres"))
}
return FilterList(filters)
}
private class SortFilter : SelectFilter(
"Sort",
"orderBy",
listOf(
Pair("Popularity", "totalViews"),
Pair("Latest", "updatedAt"),
),
)
private class StatusFilter : SelectFilter(
"Status",
"seriesStatus",
listOf(
Pair("All", ""),
Pair("Ongoing", "ONGOING"),
Pair("Hiatus", "HIATUS"),
Pair("Completed", "COMPLETED"),
Pair("Dropped", "DROPPED"),
),
)
}