From 8444b4c008bbb70f6e42d2f214897ea69170042f Mon Sep 17 00:00:00 2001
From: arkon <eugcheung94@gmail.com>
Date: Wed, 17 Jun 2020 23:00:30 -0400
Subject: [PATCH] NHentai: handle ID searches

---
 src/all/nhentai/build.gradle                  |  2 +-
 .../extension/all/nhentai/NHentai.kt          | 26 ++++++++++++++-----
 2 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/src/all/nhentai/build.gradle b/src/all/nhentai/build.gradle
index f80ecc4fe..df27a7181 100644
--- a/src/all/nhentai/build.gradle
+++ b/src/all/nhentai/build.gradle
@@ -5,7 +5,7 @@ ext {
     appName = 'Tachiyomi: NHentai'
     pkgNameSuffix = 'all.nhentai'
     extClass = '.NHFactory'
-    extVersionCode = 23
+    extVersionCode = 24
     libVersion = '1.2'
 }
 
diff --git a/src/all/nhentai/src/eu/kanade/tachiyomi/extension/all/nhentai/NHentai.kt b/src/all/nhentai/src/eu/kanade/tachiyomi/extension/all/nhentai/NHentai.kt
index 0a96c2587..0e5aff7d1 100644
--- a/src/all/nhentai/src/eu/kanade/tachiyomi/extension/all/nhentai/NHentai.kt
+++ b/src/all/nhentai/src/eu/kanade/tachiyomi/extension/all/nhentai/NHentai.kt
@@ -128,16 +128,28 @@ open class NHentai(
     override fun popularMangaNextPageSelector() = latestUpdatesNextPageSelector()
 
     override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable<MangasPage> {
-        return if (query.startsWith(PREFIX_ID_SEARCH)) {
-            val id = query.removePrefix(PREFIX_ID_SEARCH)
-            client.newCall(searchMangaByIdRequest(id))
-                .asObservableSuccess()
-                .map { response -> searchMangaByIdParse(response, id) }
-        } else {
-            return super.fetchSearchManga(page, query, filters)
+        return when {
+            query.startsWith(PREFIX_ID_SEARCH) -> {
+                val id = query.removePrefix(PREFIX_ID_SEARCH)
+                client.newCall(searchMangaByIdRequest(id))
+                    .asObservableSuccess()
+                    .map { response -> searchMangaByIdParse(response, id) }
+            }
+            query.isQueryIdNumbers() -> {
+                client.newCall(searchMangaByIdRequest(query))
+                    .asObservableSuccess()
+                    .map { response -> searchMangaByIdParse(response, query) }
+            }
+            else -> super.fetchSearchManga(page, query, filters)
         }
     }
 
+    // The website redirects for any number <= 400000
+    private fun String.isQueryIdNumbers(): Boolean {
+        val int = this.toIntOrNull() ?: return false
+        return int <= 400000
+    }
+
     override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
         val filters = if (filters.isEmpty()) getFilterList() else filters