From d73a90d970e17bb9cf91b0d0742b4375f242cba6 Mon Sep 17 00:00:00 2001 From: Chopper <156493704+choppeh@users.noreply.github.com> Date: Sun, 8 Jun 2025 23:12:30 -0300 Subject: [PATCH] WeebCentral: add support for deeplink (#9129) * Add support for deeplink * Bump version * Refactoring * Add suggested changes * Remove empty search --- src/en/weebcentral/AndroidManifest.xml | 22 ++++++++++ src/en/weebcentral/build.gradle | 2 +- .../extension/en/weebcentral/WeebCentral.kt | 17 ++++++++ .../en/weebcentral/WeebCentralUrlActivity.kt | 42 +++++++++++++++++++ 4 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 src/en/weebcentral/AndroidManifest.xml create mode 100644 src/en/weebcentral/src/eu/kanade/tachiyomi/extension/en/weebcentral/WeebCentralUrlActivity.kt diff --git a/src/en/weebcentral/AndroidManifest.xml b/src/en/weebcentral/AndroidManifest.xml new file mode 100644 index 000000000..d36478be7 --- /dev/null +++ b/src/en/weebcentral/AndroidManifest.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + diff --git a/src/en/weebcentral/build.gradle b/src/en/weebcentral/build.gradle index 146cb6954..810b5eb03 100644 --- a/src/en/weebcentral/build.gradle +++ b/src/en/weebcentral/build.gradle @@ -1,7 +1,7 @@ ext { extName = 'Weeb Central' extClass = '.WeebCentral' - extVersionCode = 14 + extVersionCode = 15 isNsfw = true } diff --git a/src/en/weebcentral/src/eu/kanade/tachiyomi/extension/en/weebcentral/WeebCentral.kt b/src/en/weebcentral/src/eu/kanade/tachiyomi/extension/en/weebcentral/WeebCentral.kt index 871b6a1bb..121fe95e9 100644 --- a/src/en/weebcentral/src/eu/kanade/tachiyomi/extension/en/weebcentral/WeebCentral.kt +++ b/src/en/weebcentral/src/eu/kanade/tachiyomi/extension/en/weebcentral/WeebCentral.kt @@ -1,8 +1,10 @@ package eu.kanade.tachiyomi.extension.en.weebcentral import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.asObservableSuccess import eu.kanade.tachiyomi.network.interceptor.rateLimit 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 @@ -12,6 +14,7 @@ import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import okhttp3.Request import org.jsoup.nodes.Document import org.jsoup.nodes.Element +import rx.Observable import java.text.ParseException import java.text.SimpleDateFormat import java.util.Locale @@ -66,6 +69,17 @@ class WeebCentral : ParsedHttpSource() { override fun latestUpdatesNextPageSelector(): String = searchMangaNextPageSelector() // =============================== Search =============================== + + override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable { + val pathSegment = query.takeIf { it.startsWith(URL_SEARCH_PREFIX) } + ?.removePrefix(URL_SEARCH_PREFIX) + ?: return super.fetchSearchManga(page, query, filters) + + return client.newCall(mangaDetailsRequest(SManga.create().apply { url = "/series/$pathSegment" })) + .asObservableSuccess() + .map { MangasPage(listOf(mangaDetailsParse(it).apply { initialized = true }), false) } + } + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { val filterList = filters.ifEmpty { getFilterList() } val url = "$baseUrl/search/data".toHttpUrl().newBuilder().apply { @@ -131,6 +145,8 @@ class WeebCentral : ParsedHttpSource() { } description = descBuilder.toString() + + setUrlWithoutDomain(document.location()) } private fun Element?.parseStatus(): Int = when (this?.text()?.lowercase()) { @@ -231,5 +247,6 @@ class WeebCentral : ParsedHttpSource() { companion object { const val FETCH_LIMIT = 24 + const val URL_SEARCH_PREFIX = "id:" } } diff --git a/src/en/weebcentral/src/eu/kanade/tachiyomi/extension/en/weebcentral/WeebCentralUrlActivity.kt b/src/en/weebcentral/src/eu/kanade/tachiyomi/extension/en/weebcentral/WeebCentralUrlActivity.kt new file mode 100644 index 000000000..725c08070 --- /dev/null +++ b/src/en/weebcentral/src/eu/kanade/tachiyomi/extension/en/weebcentral/WeebCentralUrlActivity.kt @@ -0,0 +1,42 @@ +package eu.kanade.tachiyomi.extension.en.weebcentral + +import android.app.Activity +import android.content.ActivityNotFoundException +import android.content.Intent +import android.os.Bundle +import android.util.Log +import kotlin.system.exitProcess + +class WeebCentralUrlActivity : Activity() { + + private val tag = javaClass.simpleName + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val pathSegments = intent?.data?.pathSegments + + if (pathSegments != null && pathSegments.size >= 3) { + val mainIntent = Intent().apply { + action = "eu.kanade.tachiyomi.SEARCH" + putExtra("query", getEntry(pathSegments)) + putExtra("filter", packageName) + } + try { + startActivity(mainIntent) + } catch (e: ActivityNotFoundException) { + Log.e(tag, e.toString()) + } + } else { + Log.e(tag, "could not parse uri from intent $intent") + } + + finish() + exitProcess(0) + } + + private fun getEntry(pathSegments: MutableList): String? { + val id = pathSegments[1] + val slug = pathSegments[2] + return "${WeebCentral.URL_SEARCH_PREFIX}$id/$slug" + } +}