From 672cdad0942d1e31d92340835361d6d55c05ef93 Mon Sep 17 00:00:00 2001 From: ObserverOfTime Date: Mon, 12 Oct 2020 15:51:09 +0300 Subject: [PATCH] Add hentai2read URL intent (#4591) Add hentai2read URL intent --- src/en/hentai2read/AndroidManifest.xml | 18 +++++++++ src/en/hentai2read/build.gradle | 2 +- .../extension/en/hentai2read/Hentai2Read.kt | 17 +++++--- .../en/hentai2read/Hentai2ReadActivity.kt | 39 +++++++++++++++++++ 4 files changed, 69 insertions(+), 7 deletions(-) create mode 100644 src/en/hentai2read/AndroidManifest.xml create mode 100644 src/en/hentai2read/src/eu/kanade/tachiyomi/extension/en/hentai2read/Hentai2ReadActivity.kt diff --git a/src/en/hentai2read/AndroidManifest.xml b/src/en/hentai2read/AndroidManifest.xml new file mode 100644 index 000000000..a59956fa2 --- /dev/null +++ b/src/en/hentai2read/AndroidManifest.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + diff --git a/src/en/hentai2read/build.gradle b/src/en/hentai2read/build.gradle index 6488df7e9..4ecd8baa8 100644 --- a/src/en/hentai2read/build.gradle +++ b/src/en/hentai2read/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'Hentai2Read' pkgNameSuffix = 'en.hentai2read' extClass = '.Hentai2Read' - extVersionCode = 9 + extVersionCode = 10 libVersion = '1.2' containsNsfw = true } diff --git a/src/en/hentai2read/src/eu/kanade/tachiyomi/extension/en/hentai2read/Hentai2Read.kt b/src/en/hentai2read/src/eu/kanade/tachiyomi/extension/en/hentai2read/Hentai2Read.kt index 7f5553bdf..671ed5c2d 100644 --- a/src/en/hentai2read/src/eu/kanade/tachiyomi/extension/en/hentai2read/Hentai2Read.kt +++ b/src/en/hentai2read/src/eu/kanade/tachiyomi/extension/en/hentai2read/Hentai2Read.kt @@ -39,6 +39,8 @@ class Hentai2Read : ParsedHttpSource() { companion object { const val imageBaseUrl = "https://static.hentaicdn.com/hentai" + const val PREFIX_ID_SEARCH = "id:" + val pagesUrlPattern by lazy { Pattern.compile("""'images' : \[\"(.*?)[,]?\"\]""") } @@ -77,12 +79,15 @@ class Hentai2Read : ParsedHttpSource() { override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector() override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable { - val search = requestSearch(page, query, filters) - return client.newCall(search.first) - .asObservableSuccess() - .map { response -> - parseSearch(response, page, search.second) - } + return if (query.startsWith(PREFIX_ID_SEARCH)) { + val id = query.removePrefix(PREFIX_ID_SEARCH) + client.newCall(GET("$baseUrl/$id/", headers)).asObservableSuccess() + .map { MangasPage(listOf(mangaDetailsParse(it).apply { url = "/$id/" }), false) } + } else { + val search = requestSearch(page, query, filters) + client.newCall(search.first).asObservableSuccess() + .map { parseSearch(it, page, search.second) } + } } private fun requestSearch(page: Int, query: String, filters: FilterList): Pair { diff --git a/src/en/hentai2read/src/eu/kanade/tachiyomi/extension/en/hentai2read/Hentai2ReadActivity.kt b/src/en/hentai2read/src/eu/kanade/tachiyomi/extension/en/hentai2read/Hentai2ReadActivity.kt new file mode 100644 index 000000000..9a51ed8fe --- /dev/null +++ b/src/en/hentai2read/src/eu/kanade/tachiyomi/extension/en/hentai2read/Hentai2ReadActivity.kt @@ -0,0 +1,39 @@ +package eu.kanade.tachiyomi.extension.en.hentai2read + +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://hentai2read.com/xxxx intents + * and redirects them to the main Tachiyomi process. + */ +class Hentai2ReadActivity : Activity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val pathSegments = intent?.data?.pathSegments + if (pathSegments != null) { + // TODO: filter standard paths + val id = pathSegments[0] + val mainIntent = Intent().apply { + action = "eu.kanade.tachiyomi.SEARCH" + putExtra("query", "${Hentai2Read.PREFIX_ID_SEARCH}$id") + putExtra("filter", packageName) + } + + try { + startActivity(mainIntent) + } catch (e: ActivityNotFoundException) { + Log.e("Hentai2ReadActivity", e.toString()) + } + } else { + Log.e("Hentai2ReadActivity", "Could not parse URI from intent $intent") + } + + finish() + exitProcess(0) + } +}