From b6f6b46a4f6378e586dd4a1242b607e6f645c5ad Mon Sep 17 00:00:00 2001 From: CriosChan <36739192+CriosChan@users.noreply.github.com> Date: Tue, 21 Oct 2025 08:35:54 +0200 Subject: [PATCH] Luscious: fix 403 error + Open URL in app (closes #10924) (#11119) * Luscious: fix 403 error + Open URL in app (closes #10924) * Luscious: Preserve app provided useragent --- src/all/luscious/AndroidManifest.xml | 27 +++++++++++++ src/all/luscious/build.gradle | 2 +- .../extension/all/luscious/Luscious.kt | 12 ++++++ .../all/luscious/LusciousUrlActivity.kt | 38 +++++++++++++++++++ 4 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 src/all/luscious/AndroidManifest.xml create mode 100644 src/all/luscious/src/eu/kanade/tachiyomi/extension/all/luscious/LusciousUrlActivity.kt diff --git a/src/all/luscious/AndroidManifest.xml b/src/all/luscious/AndroidManifest.xml new file mode 100644 index 000000000..d31525ee7 --- /dev/null +++ b/src/all/luscious/AndroidManifest.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + diff --git a/src/all/luscious/build.gradle b/src/all/luscious/build.gradle index c4c3a792c..e271ffb0f 100644 --- a/src/all/luscious/build.gradle +++ b/src/all/luscious/build.gradle @@ -1,7 +1,7 @@ ext { extName = 'Luscious' extClass = '.LusciousFactory' - extVersionCode = 22 + extVersionCode = 23 isNsfw = true } diff --git a/src/all/luscious/src/eu/kanade/tachiyomi/extension/all/luscious/Luscious.kt b/src/all/luscious/src/eu/kanade/tachiyomi/extension/all/luscious/Luscious.kt index 1cbb43e01..8ed2202e5 100644 --- a/src/all/luscious/src/eu/kanade/tachiyomi/extension/all/luscious/Luscious.kt +++ b/src/all/luscious/src/eu/kanade/tachiyomi/extension/all/luscious/Luscious.kt @@ -29,6 +29,7 @@ import kotlinx.serialization.json.long import kotlinx.serialization.json.put import kotlinx.serialization.json.putJsonArray import kotlinx.serialization.json.putJsonObject +import okhttp3.Headers import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.Interceptor import okhttp3.MediaType.Companion.toMediaType @@ -55,6 +56,11 @@ abstract class Luscious( private val json: Json by injectLazy() + override fun headersBuilder(): Headers.Builder { + return super.headersBuilder() + .add("Referer", "$baseUrl/") + } + override val client: OkHttpClient get() = network.cloudflareClient.newBuilder() .addNetworkInterceptor(rewriteOctetStream) @@ -487,6 +493,12 @@ abstract class Luscious( client.newCall(buildAlbumInfoRequest(id)) .asObservableSuccess() .map { MangasPage(listOf(detailsParse(it)), false) } + } else if (query.startsWith("ALBUM:")) { + val album = query.substringAfterLast("ALBUM:") + val id = album.split("_").last() + client.newCall(buildAlbumInfoRequest(id)) + .asObservableSuccess() + .map { MangasPage(listOf(detailsParse(it)), false) } } else { super.fetchSearchManga(page, query, filters) } diff --git a/src/all/luscious/src/eu/kanade/tachiyomi/extension/all/luscious/LusciousUrlActivity.kt b/src/all/luscious/src/eu/kanade/tachiyomi/extension/all/luscious/LusciousUrlActivity.kt new file mode 100644 index 000000000..8def2614a --- /dev/null +++ b/src/all/luscious/src/eu/kanade/tachiyomi/extension/all/luscious/LusciousUrlActivity.kt @@ -0,0 +1,38 @@ +package eu.kanade.tachiyomi.extension.all.luscious + +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://www.luscious.net/albums/xxxxxx intents and redirects them to + * the main Tachiyomi process. + */ +class LusciousUrlActivity : Activity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val pathSegments = intent?.data?.pathSegments + if (pathSegments != null && pathSegments.size > 1) { + val album = pathSegments[1] + val mainIntent = Intent().apply { + action = "eu.kanade.tachiyomi.SEARCH" + putExtra("query", "ALBUM:$album") + putExtra("filter", packageName) + } + + try { + startActivity(mainIntent) + } catch (e: ActivityNotFoundException) { + Log.e("LusciousUrlActivity", e.toString()) + } + } else { + Log.e("LusciousUrlActivity", "could not parse uri from intent $intent") + } + + finish() + exitProcess(0) + } +}