From 82842fd186d65987b75d79981920fe72055d1290 Mon Sep 17 00:00:00 2001
From: bapeey <90949336+bapeey@users.noreply.github.com>
Date: Mon, 5 Feb 2024 21:47:52 -0500
Subject: [PATCH] LectorTMO: Fix preferences (#1040)

Fix preferences
---
 .../tachiyomi/multisrc/lectortmo/LectorTmo.kt | 173 ++++++++----------
 .../multisrc/lectortmo/LectorTmoGenerator.kt  |   2 +-
 2 files changed, 76 insertions(+), 99 deletions(-)

diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/lectortmo/LectorTmo.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/lectortmo/LectorTmo.kt
index 5329cad94..52b7578f0 100644
--- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/lectortmo/LectorTmo.kt
+++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/lectortmo/LectorTmo.kt
@@ -3,6 +3,9 @@ package eu.kanade.tachiyomi.multisrc.lectortmo
 import android.annotation.SuppressLint
 import android.app.Application
 import android.content.SharedPreferences
+import androidx.preference.CheckBoxPreference
+import androidx.preference.ListPreference
+import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.network.GET
 import eu.kanade.tachiyomi.network.POST
 import eu.kanade.tachiyomi.network.asObservableSuccess
@@ -39,7 +42,7 @@ abstract class LectorTmo(
     override val name: String,
     override val baseUrl: String,
     override val lang: String,
-) : ConfigurableSource, ParsedHttpSource() {
+) : ParsedHttpSource(), ConfigurableSource {
 
     private val preferences: SharedPreferences by lazy {
         Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
@@ -85,35 +88,39 @@ abstract class LectorTmo(
         return this
     }
 
-    private val ignoreSslClient = network.client.newBuilder()
-        .ignoreAllSSLErrors()
-        .followRedirects(false)
-        .rateLimit(
-            preferences.getString(IMAGE_CDN_RATELIMIT_PREF, IMAGE_CDN_RATELIMIT_PREF_DEFAULT_VALUE)!!.toInt(),
-            60,
-        )
-        .build()
+    private val ignoreSslClient: OkHttpClient by lazy {
+        network.client.newBuilder()
+            .ignoreAllSSLErrors()
+            .followRedirects(false)
+            .rateLimit(
+                preferences.getString(IMAGE_CDN_RATELIMIT_PREF, IMAGE_CDN_RATELIMIT_PREF_DEFAULT_VALUE)!!.toInt(),
+                60,
+            )
+            .build()
+    }
 
-    override val client: OkHttpClient = network.client.newBuilder()
-        .addInterceptor { chain ->
-            val request = chain.request()
-            val url = request.url
-            if (url.host.contains("japanreader.com")) {
-                return@addInterceptor ignoreSslClient.newCall(request).execute()
+    override val client: OkHttpClient by lazy {
+        network.client.newBuilder()
+            .addInterceptor { chain ->
+                val request = chain.request()
+                val url = request.url
+                if (url.host.contains("japanreader.com")) {
+                    return@addInterceptor ignoreSslClient.newCall(request).execute()
+                }
+                chain.proceed(request)
             }
-            chain.proceed(request)
-        }
-        .rateLimitHost(
-            baseUrl.toHttpUrl(),
-            preferences.getString(WEB_RATELIMIT_PREF, WEB_RATELIMIT_PREF_DEFAULT_VALUE)!!.toInt(),
-            60,
-        )
-        .rateLimitImageCDNs(
-            imageCDNUrls,
-            preferences.getString(IMAGE_CDN_RATELIMIT_PREF, IMAGE_CDN_RATELIMIT_PREF_DEFAULT_VALUE)!!.toInt(),
-            60,
-        )
-        .build()
+            .rateLimitHost(
+                baseUrl.toHttpUrl(),
+                preferences.getString(WEB_RATELIMIT_PREF, WEB_RATELIMIT_PREF_DEFAULT_VALUE)!!.toInt(),
+                60,
+            )
+            .rateLimitImageCDNs(
+                imageCDNUrls,
+                preferences.getString(IMAGE_CDN_RATELIMIT_PREF, IMAGE_CDN_RATELIMIT_PREF_DEFAULT_VALUE)!!.toInt(),
+                60,
+            )
+            .build()
+    }
 
     // Marks erotic content as false and excludes: Ecchi(6), GirlsLove(17), BoysLove(18), Harem(19), Trap(94) genders
     private fun getSFWUrlPart(): String = if (getSFWModePref()) "&exclude_genders%5B%5D=6&exclude_genders%5B%5D=17&exclude_genders%5B%5D=18&exclude_genders%5B%5D=19&exclude_genders%5B%5D=94&erotic=false" else ""
@@ -401,76 +408,6 @@ abstract class LectorTmo(
 
     override fun imageUrlParse(document: Document) = throw UnsupportedOperationException()
 
-    override fun setupPreferenceScreen(screen: androidx.preference.PreferenceScreen) {
-        val sfwModePref = androidx.preference.CheckBoxPreference(screen.context).apply {
-            key = SFW_MODE_PREF
-            title = SFW_MODE_PREF_TITLE
-            summary = SFW_MODE_PREF_SUMMARY
-            setDefaultValue(SFW_MODE_PREF_DEFAULT_VALUE)
-
-            setOnPreferenceChangeListener { _, newValue ->
-                val checkValue = newValue as Boolean
-                preferences.edit().putBoolean(SFW_MODE_PREF, checkValue).commit()
-            }
-        }
-
-        val scanlatorPref = androidx.preference.CheckBoxPreference(screen.context).apply {
-            key = SCANLATOR_PREF
-            title = SCANLATOR_PREF_TITLE
-            summary = SCANLATOR_PREF_SUMMARY
-            setDefaultValue(SCANLATOR_PREF_DEFAULT_VALUE)
-
-            setOnPreferenceChangeListener { _, newValue ->
-                val checkValue = newValue as Boolean
-                preferences.edit().putBoolean(SCANLATOR_PREF, checkValue).commit()
-            }
-        }
-
-        // Rate limit
-        val apiRateLimitPreference = androidx.preference.ListPreference(screen.context).apply {
-            key = WEB_RATELIMIT_PREF
-            title = WEB_RATELIMIT_PREF_TITLE
-            summary = WEB_RATELIMIT_PREF_SUMMARY
-            entries = ENTRIES_ARRAY
-            entryValues = ENTRIES_ARRAY
-
-            setDefaultValue(WEB_RATELIMIT_PREF_DEFAULT_VALUE)
-            setOnPreferenceChangeListener { _, newValue ->
-                try {
-                    val setting = preferences.edit().putString(WEB_RATELIMIT_PREF, newValue as String).commit()
-                    setting
-                } catch (e: Exception) {
-                    e.printStackTrace()
-                    false
-                }
-            }
-        }
-
-        val imgCDNRateLimitPreference = androidx.preference.ListPreference(screen.context).apply {
-            key = IMAGE_CDN_RATELIMIT_PREF
-            title = IMAGE_CDN_RATELIMIT_PREF_TITLE
-            summary = IMAGE_CDN_RATELIMIT_PREF_SUMMARY
-            entries = ENTRIES_ARRAY
-            entryValues = ENTRIES_ARRAY
-
-            setDefaultValue(IMAGE_CDN_RATELIMIT_PREF_DEFAULT_VALUE)
-            setOnPreferenceChangeListener { _, newValue ->
-                try {
-                    val setting = preferences.edit().putString(IMAGE_CDN_RATELIMIT_PREF, newValue as String).commit()
-                    setting
-                } catch (e: Exception) {
-                    e.printStackTrace()
-                    false
-                }
-            }
-        }
-
-        screen.addPreference(sfwModePref)
-        screen.addPreference(scanlatorPref)
-        screen.addPreference(apiRateLimitPreference)
-        screen.addPreference(imgCDNRateLimitPreference)
-    }
-
     override fun getFilterList() = FilterList(
         FilterBy(),
         Filter.Separator(),
@@ -591,6 +528,46 @@ abstract class LectorTmo(
 
     protected fun getSFWModePref(): Boolean = preferences.getBoolean(SFW_MODE_PREF, SFW_MODE_PREF_DEFAULT_VALUE)
 
+    override fun setupPreferenceScreen(screen: PreferenceScreen) {
+        val sfwModePref = CheckBoxPreference(screen.context).apply {
+            key = SFW_MODE_PREF
+            title = SFW_MODE_PREF_TITLE
+            summary = SFW_MODE_PREF_SUMMARY
+            setDefaultValue(SFW_MODE_PREF_DEFAULT_VALUE)
+        }
+
+        val scanlatorPref = CheckBoxPreference(screen.context).apply {
+            key = SCANLATOR_PREF
+            title = SCANLATOR_PREF_TITLE
+            summary = SCANLATOR_PREF_SUMMARY
+            setDefaultValue(SCANLATOR_PREF_DEFAULT_VALUE)
+        }
+
+        // Rate limit
+        val apiRateLimitPreference = ListPreference(screen.context).apply {
+            key = WEB_RATELIMIT_PREF
+            title = WEB_RATELIMIT_PREF_TITLE
+            summary = WEB_RATELIMIT_PREF_SUMMARY
+            entries = ENTRIES_ARRAY
+            entryValues = ENTRIES_ARRAY
+            setDefaultValue(WEB_RATELIMIT_PREF_DEFAULT_VALUE)
+        }
+
+        val imgCDNRateLimitPreference = ListPreference(screen.context).apply {
+            key = IMAGE_CDN_RATELIMIT_PREF
+            title = IMAGE_CDN_RATELIMIT_PREF_TITLE
+            summary = IMAGE_CDN_RATELIMIT_PREF_SUMMARY
+            entries = ENTRIES_ARRAY
+            entryValues = ENTRIES_ARRAY
+            setDefaultValue(IMAGE_CDN_RATELIMIT_PREF_DEFAULT_VALUE)
+        }
+
+        screen.addPreference(sfwModePref)
+        screen.addPreference(scanlatorPref)
+        screen.addPreference(apiRateLimitPreference)
+        screen.addPreference(imgCDNRateLimitPreference)
+    }
+
     companion object {
         private const val SCANLATOR_PREF = "scanlatorPref"
         private const val SCANLATOR_PREF_TITLE = "Mostrar todos los scanlator"
diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/lectortmo/LectorTmoGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/lectortmo/LectorTmoGenerator.kt
index 7fcee7e32..2423a1468 100644
--- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/lectortmo/LectorTmoGenerator.kt
+++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/lectortmo/LectorTmoGenerator.kt
@@ -9,7 +9,7 @@ class LectorTmoGenerator : ThemeSourceGenerator {
 
     override val themeClass = "LectorTmo"
 
-    override val baseVersionCode: Int = 1
+    override val baseVersionCode: Int = 2
 
     override val sources = listOf(
         SingleLang("LectorManga", "https://lectormanga.com", "es", isNsfw = true, overrideVersionCode = 34),