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