diff --git a/multisrc/overrides/readerfront/default/AndroidManifest.xml b/multisrc/overrides/readerfront/default/AndroidManifest.xml new file mode 100644 index 000000000..1fce661c8 --- /dev/null +++ b/multisrc/overrides/readerfront/default/AndroidManifest.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/readerfront/ReaderFront.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/readerfront/ReaderFront.kt index 0154281a8..b5093c6c9 100644 --- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/readerfront/ReaderFront.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/readerfront/ReaderFront.kt @@ -113,10 +113,21 @@ abstract class ReaderFront( override fun fetchSearchManga(page: Int, query: String, filters: FilterList) = client.newCall(popularMangaRequest(page)).asObservableSuccess().map { res -> popularMangaParse(res).let { mp -> - mp.copy(mp.mangas.filter { it.title.contains(query, true) }) + when { + query.isBlank() -> mp + !query.startsWith(STUB_QUERY) -> mp.filter { + it.title.contains(query, true) + } + else -> mp.filter { + it.url == query.substringAfter(STUB_QUERY) + } + } } }!! + private inline fun MangasPage.filter(predicate: (SManga) -> Boolean) = + copy(mangas.filter(predicate)) + private inline fun Response.parse(name: String) = json.parseToJsonElement(body!!.string()).jsonObject.run { if (containsKey("errors")) { diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/readerfront/ReaderFrontActivity.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/readerfront/ReaderFrontActivity.kt new file mode 100644 index 000000000..3d2b683f9 --- /dev/null +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/readerfront/ReaderFrontActivity.kt @@ -0,0 +1,35 @@ +package eu.kanade.tachiyomi.multisrc.readerfront + +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 `{baseUrl}/work/{lang}/{stub}` + * intents and redirects them to the main Tachiyomi process. + */ +class ReaderFrontActivity : Activity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val segments = intent?.data?.pathSegments + if (segments != null && segments.size > 2) { + val activity = Intent().apply { + action = "eu.kanade.tachiyomi.SEARCH" + putExtra("query", STUB_QUERY + segments[2]) + putExtra("filter", packageName) + } + try { + startActivity(activity) + } catch (ex: ActivityNotFoundException) { + Log.e("ReaderFrontActivity", ex.message, ex) + } + } else { + Log.e("ReaderFrontActivity", "Failed to parse URI from intent: $intent") + } + finish() + exitProcess(0) + } +} diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/readerfront/ReaderFrontGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/readerfront/ReaderFrontGenerator.kt index a8230c0a3..5256c4530 100644 --- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/readerfront/ReaderFrontGenerator.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/readerfront/ReaderFrontGenerator.kt @@ -9,7 +9,7 @@ class ReaderFrontGenerator : ThemeSourceGenerator { override val themeClass = "ReaderFront" - override val baseVersionCode = 3 + override val baseVersionCode = 4 override val sources = listOf( MultiLang("Ravens Scans", "https://ravens-scans.com", listOf("es", "en"), true), diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/readerfront/ReaderFrontQueries.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/readerfront/ReaderFrontQueries.kt index 16a59761e..cdaae7b92 100644 --- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/readerfront/ReaderFrontQueries.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/readerfront/ReaderFrontQueries.kt @@ -3,6 +3,8 @@ package eu.kanade.tachiyomi.multisrc.readerfront private fun String.encodeUri() = android.net.Uri.encode(trimMargin())!! +internal const val STUB_QUERY = "stub:" + fun works(lang: Int, sort: String, order: String, page: Int, limit: Int) = """{ |works( | orderBy: "$order"