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"
+ }
+}