From 80ae2879fd4a10a67270c71df5131520fb81b432 Mon Sep 17 00:00:00 2001
From: bapeey <90949336+bapeey@users.noreply.github.com>
Date: Fri, 10 Nov 2023 08:28:51 -0500
Subject: [PATCH] LectorManga: Fix images not loading (#18911)

* Fix ssl

* Only in img1.japanreader
---
 src/es/lectormanga/build.gradle               |  2 +-
 .../extension/es/lectormanga/LectorManga.kt   | 56 ++++++++++++++++++-
 2 files changed, 56 insertions(+), 2 deletions(-)

diff --git a/src/es/lectormanga/build.gradle b/src/es/lectormanga/build.gradle
index 889eb2d08..18ac05c77 100755
--- a/src/es/lectormanga/build.gradle
+++ b/src/es/lectormanga/build.gradle
@@ -5,7 +5,7 @@ ext {
     extName = 'LectorManga'
     pkgNameSuffix = 'es.lectormanga'
     extClass = '.LectorManga'
-    extVersionCode = 29
+    extVersionCode = 30
     isNsfw = true
 }
 
diff --git a/src/es/lectormanga/src/eu/kanade/tachiyomi/extension/es/lectormanga/LectorManga.kt b/src/es/lectormanga/src/eu/kanade/tachiyomi/extension/es/lectormanga/LectorManga.kt
index 4f478e151..3ce846e82 100755
--- a/src/es/lectormanga/src/eu/kanade/tachiyomi/extension/es/lectormanga/LectorManga.kt
+++ b/src/es/lectormanga/src/eu/kanade/tachiyomi/extension/es/lectormanga/LectorManga.kt
@@ -2,6 +2,11 @@ package eu.kanade.tachiyomi.extension.es.lectormanga
 
 import android.app.Application
 import android.content.SharedPreferences
+import android.os.Handler
+import android.os.Looper
+import android.view.View
+import android.webkit.WebView
+import android.webkit.WebViewClient
 import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.network.POST
 import eu.kanade.tachiyomi.network.asObservableSuccess
@@ -28,6 +33,7 @@ import uy.kohesive.injekt.Injekt
 import uy.kohesive.injekt.api.get
 import java.text.SimpleDateFormat
 import java.util.Locale
+import java.util.concurrent.CountDownLatch
 
 class LectorManga : ConfigurableSource, ParsedHttpSource() {
 
@@ -44,12 +50,17 @@ class LectorManga : ConfigurableSource, ParsedHttpSource() {
             .add("Referer", "$baseUrl/")
     }
 
-    private val imageCDNUrls = arrayOf("https://img1.followmanga.com", "https://img1.biggestchef.com", "https://img1.indalchef.com", "https://img1.recipesandcook.com")
+    private val imageCDNUrls = arrayOf(
+        "https://img1.followmanga.com", "https://img1.biggestchef.com",
+        "https://img1.indalchef.com", "https://img1.recipesandcook.com",
+        "https://img1.cyclingte.com", "https://img1.japanreader.com",
+    )
 
     private val preferences: SharedPreferences by lazy {
         Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
     }
 
+    private var loadWebView = true
     override val client: OkHttpClient = network.client.newBuilder()
         .rateLimitHost(
             baseUrl.toHttpUrlOrNull()!!,
@@ -76,6 +87,49 @@ class LectorManga : ConfigurableSource, ParsedHttpSource() {
             preferences.getString(IMAGE_CDN_RATELIMIT_PREF, IMAGE_CDN_RATELIMIT_PREF_DEFAULT_VALUE)!!.toInt(),
             60,
         )
+        .rateLimitHost(
+            imageCDNUrls[4].toHttpUrlOrNull()!!,
+            preferences.getString(IMAGE_CDN_RATELIMIT_PREF, IMAGE_CDN_RATELIMIT_PREF_DEFAULT_VALUE)!!.toInt(),
+            60,
+        )
+        .rateLimitHost(
+            imageCDNUrls[5].toHttpUrlOrNull()!!,
+            preferences.getString(IMAGE_CDN_RATELIMIT_PREF, IMAGE_CDN_RATELIMIT_PREF_DEFAULT_VALUE)!!.toInt(),
+            60,
+        )
+        .addInterceptor { chain ->
+            val request = chain.request()
+            val url = request.url.toString()
+            if (url.startsWith("https://img1.japanreader.com") && loadWebView) {
+                val handler = Handler(Looper.getMainLooper())
+                val latch = CountDownLatch(1)
+                var webView: WebView? = null
+                handler.post {
+                    val webview = WebView(Injekt.get<Application>())
+                    webView = webview
+                    webview.settings.domStorageEnabled = true
+                    webview.setLayerType(View.LAYER_TYPE_SOFTWARE, null)
+                    webview.settings.useWideViewPort = false
+                    webview.settings.loadWithOverviewMode = false
+
+                    webview.webViewClient = object : WebViewClient() {
+                        override fun onPageFinished(view: WebView?, url: String?) {
+                            latch.countDown()
+                        }
+                    }
+
+                    val headers = mutableMapOf<String, String>()
+                    headers["Referer"] = baseUrl
+
+                    webview.loadUrl(url, headers)
+                }
+
+                latch.await()
+                loadWebView = false
+                handler.post { webView?.destroy() }
+            }
+            chain.proceed(request)
+        }
         .build()
 
     override fun popularMangaRequest(page: Int) = GET("$baseUrl/library?order_item=likes_count&order_dir=desc&type=&filter_by=title&page=$page", headers)