From 873a88cbbb350906b090795d68f9780df6022e3c Mon Sep 17 00:00:00 2001 From: beerpsi <92439990+beerpiss@users.noreply.github.com> Date: Mon, 5 Feb 2024 13:41:09 +0700 Subject: [PATCH] Add scanvf.org (#985) * Add scanvf * move stuff * fr.scanvf already exists (under mmrcms) * insert ending newline --- src/fr/scanvforg/AndroidManifest.xml | 22 ++ src/fr/scanvforg/build.gradle | 7 + .../scanvforg/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4389 bytes .../scanvforg/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2258 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6503 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 12648 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 20162 bytes .../extension/fr/scanvforg/ScanVF.kt | 231 ++++++++++++++++++ .../fr/scanvforg/ScanVFUrlActivity.kt | 40 +++ 9 files changed, 300 insertions(+) create mode 100644 src/fr/scanvforg/AndroidManifest.xml create mode 100644 src/fr/scanvforg/build.gradle create mode 100644 src/fr/scanvforg/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/fr/scanvforg/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/fr/scanvforg/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/fr/scanvforg/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/fr/scanvforg/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/fr/scanvforg/src/eu/kanade/tachiyomi/extension/fr/scanvforg/ScanVF.kt create mode 100644 src/fr/scanvforg/src/eu/kanade/tachiyomi/extension/fr/scanvforg/ScanVFUrlActivity.kt diff --git a/src/fr/scanvforg/AndroidManifest.xml b/src/fr/scanvforg/AndroidManifest.xml new file mode 100644 index 000000000..96bcc3495 --- /dev/null +++ b/src/fr/scanvforg/AndroidManifest.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + diff --git a/src/fr/scanvforg/build.gradle b/src/fr/scanvforg/build.gradle new file mode 100644 index 000000000..c619764b1 --- /dev/null +++ b/src/fr/scanvforg/build.gradle @@ -0,0 +1,7 @@ +ext { + extName = "scanvf.org" + extClass = ".ScanVF" + extVersionCode = 1 +} + +apply from: "$rootDir/common.gradle" diff --git a/src/fr/scanvforg/res/mipmap-hdpi/ic_launcher.png b/src/fr/scanvforg/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..a264f402c5a3114ec6571159fc861a2513b73e56 GIT binary patch literal 4389 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 literal 0 HcmV?d00001 diff --git a/src/fr/scanvforg/res/mipmap-mdpi/ic_launcher.png b/src/fr/scanvforg/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..71914a9f7de47015775cfb55eb535b621ca4c939 GIT binary patch literal 2258 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 N002ovPDHLkV1k>-axMS> literal 0 HcmV?d00001 diff --git a/src/fr/scanvforg/res/mipmap-xxhdpi/ic_launcher.png b/src/fr/scanvforg/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..a991fbc37863edac198b951c0a2623c9e2220e7b GIT binary patch literal 12648 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 BD6Ieh literal 0 HcmV?d00001 diff --git a/src/fr/scanvforg/src/eu/kanade/tachiyomi/extension/fr/scanvforg/ScanVF.kt b/src/fr/scanvforg/src/eu/kanade/tachiyomi/extension/fr/scanvforg/ScanVF.kt new file mode 100644 index 000000000..0f3431b08 --- /dev/null +++ b/src/fr/scanvforg/src/eu/kanade/tachiyomi/extension/fr/scanvforg/ScanVF.kt @@ -0,0 +1,231 @@ +package eu.kanade.tachiyomi.extension.fr.scanvforg + +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.asObservableSuccess +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 kotlinx.serialization.json.Json +import kotlinx.serialization.json.jsonPrimitive +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.Request +import okhttp3.Response +import org.jsoup.Jsoup +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import rx.Observable +import uy.kohesive.injekt.injectLazy +import java.text.SimpleDateFormat +import java.util.Locale + +class ScanVF : ParsedHttpSource() { + + override val name = "scanvf.org" + + override val baseUrl = "https://scanvf.org" + + override val lang = "fr" + + override val supportsLatest = true + + override val client = network.cloudflareClient + + private val json: Json by injectLazy() + + private val dateFormat by lazy { + SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()) + } + + override fun headersBuilder() = super.headersBuilder() + .add("Referer", "$baseUrl/") + + override fun popularMangaRequest(page: Int) = GET("$baseUrl/manga?q=p&page=$page", headers) + + override fun popularMangaSelector() = "div.series" + + override fun popularMangaFromElement(element: Element) = SManga.create().apply { + val anchor = element.selectFirst("a.link-series")!! + + setUrlWithoutDomain(anchor.attr("href")) + title = anchor.text() + thumbnail_url = element.selectFirst("div.series-img-wrapper img")?.absUrl("data-src") + } + + override fun popularMangaNextPageSelector() = "ul.pagination a.page-link[rel=next]" + + override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/manga?q=u&page=$page", headers) + + override fun latestUpdatesSelector() = popularMangaSelector() + + override fun latestUpdatesFromElement(element: Element) = popularMangaFromElement(element) + + override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector() + + override fun fetchSearchManga( + page: Int, + query: String, + filters: FilterList, + ): Observable { + return if (query.startsWith(PREFIX_SLUG_SEARCH)) { + val slug = query.removePrefix(PREFIX_SLUG_SEARCH) + val url = "/manga/$slug" + val manga = SManga.create().apply { + this.url = url + } + + client.newCall(mangaDetailsRequest(manga)) + .asObservableSuccess() + .map { + MangasPage( + listOf( + mangaDetailsParse(it).apply { + this.url = url + }, + ), + false, + ) + } + } else { + super.fetchSearchManga(page, query, filters) + } + } + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val url = baseUrl.toHttpUrl().newBuilder().apply { + addPathSegment("search") + addQueryParameter("q", query) + }.build() + + return GET(url, headers) + } + + override fun searchMangaParse(response: Response): MangasPage { + val document = Jsoup.parseBodyFragment( + json.parseToJsonElement(response.body.string()).jsonPrimitive.content, + baseUrl, + ) + + val manga = document.select(searchMangaSelector()).map { + searchMangaFromElement(it) + } + + return MangasPage(manga, false) + } + + override fun searchMangaSelector() = popularMangaSelector() + + override fun searchMangaFromElement(element: Element) = popularMangaFromElement(element) + + override fun searchMangaNextPageSelector() = null + + override fun mangaDetailsParse(document: Document) = SManga.create().apply { + title = document.selectFirst("div.card h1")!!.text().removeSuffix(" Scan") + author = document.select("div.card-series-detail div:contains(Auteur) div.badge").joinToString { it.text() } + genre = document.select("div.card-series-detail div:contains(Categories) div.badge").joinToString { it.text() } + description = document.select("main div.card div:has(h5:contains(Résumé)) p").text() + thumbnail_url = document.selectFirst("div.series-picture-lg img")?.absUrl("src") + } + + override fun chapterListSelector() = "div.chapters-list div.col-chapter" + + override fun chapterFromElement(element: Element) = SChapter.create().apply { + val h5 = element.selectFirst("h5")!! + + setUrlWithoutDomain(element.selectFirst("a")!!.attr("href")) + name = h5.ownText() + date_upload = try { + dateFormat.parse(h5.selectFirst("div")!!.text())!!.time + } catch (e: Exception) { + 0L + } + } + + override fun pageListParse(document: Document): List { + // This should be the URL we got from chapterListParse, i.e. /scan/:id + // However, if there's a page number stuck onto it, we remove it first, + // just in case. + val url = document.location().removeSuffix("/1") + val pageCount = findPageCount(url) + + return (1..pageCount).map { + Page(it, "$url/$it") + } + } + + override fun imageUrlParse(document: Document): String = + document.selectFirst("div.book-page img")!!.absUrl("src") + + // Disable redirects, since an out of range page request redirects us back + // to the manga details page. + private val pageListClient = client.newBuilder() + .followRedirects(false) + .followSslRedirects(false) + .build() + + private fun findPageCount(url: String): Int { + val path = url.toHttpUrl().encodedPath + + // Since there's nothing to tell us about the page count (or I'm blind), + // we resort to good old binary search. + // + // The website redirects us back to the manga details page if we have + // gone too far. + // + // We can't be sure of the maximum number of pages this source has + // (sometimes stuff is uploaded in volumes) so before we begin we need + // to find the upper bound by doubling up until we get a redirect. + var high = 24 + + while (true) { + val (code, location) = pageListClient.newCall(GET("$url/$high", headers)).execute() + .use { + it.code to it.headers["location"] + } + + if (code == 301 || code == 302) { + // For some reason, on the last page, the website redirects to the same URL + // with a ?bypass=1 query parameter added. + if (location!!.startsWith(path)) { + return high + } + + break + } + + high *= 2 + } + + // Now we begin the actual binary search. + var low = 1 + var pageCount: Int + + while (true) { + pageCount = low + (high - low) / 2 + + val (code, location) = pageListClient.newCall(GET("$url/$pageCount", headers)).execute() + .use { + it.code to it.headers["location"] + } + + if (code == 301 || code == 302) { + // For some reason, on the last page, the website redirects to the same URL + // with a ?bypass=1 query parameter added. + if (location!!.startsWith(path)) { + return pageCount + } + + high = pageCount - 1 + continue + } + + low = pageCount + 1 + } + } + + companion object { + internal const val PREFIX_SLUG_SEARCH = "slug:" + } +} diff --git a/src/fr/scanvforg/src/eu/kanade/tachiyomi/extension/fr/scanvforg/ScanVFUrlActivity.kt b/src/fr/scanvforg/src/eu/kanade/tachiyomi/extension/fr/scanvforg/ScanVFUrlActivity.kt new file mode 100644 index 000000000..101b65e12 --- /dev/null +++ b/src/fr/scanvforg/src/eu/kanade/tachiyomi/extension/fr/scanvforg/ScanVFUrlActivity.kt @@ -0,0 +1,40 @@ +package eu.kanade.tachiyomi.extension.fr.scanvforg + +import android.app.Activity +import android.content.ActivityNotFoundException +import android.content.Intent +import android.os.Bundle +import android.util.Log +import kotlin.system.exitProcess + +/** + * Springboard that accepts https://scanvf.org/manga/ intents + * and redirects them to the main Tachiyomi process. + */ +class ScanVFUrlActivity : Activity() { + private val tag = javaClass.simpleName + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val pathSegments = intent?.data?.pathSegments + if (pathSegments != null && pathSegments.size > 1) { + val id = pathSegments[1] + val mainIntent = Intent().apply { + action = "eu.kanade.tachiyomi.SEARCH" + putExtra("query", "${ScanVF.PREFIX_SLUG_SEARCH}$id") + putExtra("filter", packageName) + } + + try { + startActivity(mainIntent) + } catch (e: ActivityNotFoundException) { + Log.e(tag, "Could not start activity", e) + } + } else { + Log.e(tag, "could not parse uri from intent $intent") + } + + finish() + exitProcess(0) + } +}