From 38e7e2347a897469bd7ac3b89a4b4ba046a5e04c Mon Sep 17 00:00:00 2001
From: Eshlender <35057681+e-shl@users.noreply.github.com>
Date: Mon, 13 Mar 2023 19:35:07 +0500
Subject: [PATCH] [RU]LibGroup no empty series filter and custom domain
switcher 18+ (#15623)
* [RU]LibGroup no empty series filter
* domain
* custom domain switcher 18+
---
.../libgroup/hentailib/AndroidManifest.xml | 2 +-
.../libgroup/hentailib/src/HentaiLib.kt | 39 ++++++++++++++++++-
.../overrides/libgroup/yaoilib/src/YaoiLib.kt | 37 ++++++++++++++++++
.../multisrc/libgroup/LibGenerator.kt | 4 +-
.../tachiyomi/multisrc/libgroup/LibGroup.kt | 18 +++++++--
5 files changed, 93 insertions(+), 7 deletions(-)
diff --git a/multisrc/overrides/libgroup/hentailib/AndroidManifest.xml b/multisrc/overrides/libgroup/hentailib/AndroidManifest.xml
index 1ed798a66..543d49e63 100644
--- a/multisrc/overrides/libgroup/hentailib/AndroidManifest.xml
+++ b/multisrc/overrides/libgroup/hentailib/AndroidManifest.xml
@@ -16,7 +16,7 @@
diff --git a/multisrc/overrides/libgroup/hentailib/src/HentaiLib.kt b/multisrc/overrides/libgroup/hentailib/src/HentaiLib.kt
index 43a826d30..f3aea1844 100644
--- a/multisrc/overrides/libgroup/hentailib/src/HentaiLib.kt
+++ b/multisrc/overrides/libgroup/hentailib/src/HentaiLib.kt
@@ -1,5 +1,9 @@
package eu.kanade.tachiyomi.extension.ru.hentailib
+import android.app.Application
+import android.content.SharedPreferences
+import android.widget.Toast
+import androidx.preference.EditTextPreference
import eu.kanade.tachiyomi.multisrc.libgroup.LibGroup
import eu.kanade.tachiyomi.network.POST
import eu.kanade.tachiyomi.source.model.Filter
@@ -7,11 +11,20 @@ import eu.kanade.tachiyomi.source.model.FilterList
import okhttp3.Headers
import okhttp3.OkHttpClient
import okhttp3.Request
+import uy.kohesive.injekt.Injekt
+import uy.kohesive.injekt.api.get
-class HentaiLib : LibGroup("HentaiLib", "https://hentailib.me", "ru") {
+class HentaiLib : LibGroup("HentaiLib", "https://v1.hentailib.org", "ru") {
override val id: Long = 6425650164840473547
+ private val preferences: SharedPreferences by lazy {
+ Injekt.get().getSharedPreferences("source_$id", 0x0000)
+ }
+
+ private var domain: String = preferences.getString(DOMAIN_TITLE, DOMAIN_DEFAULT)!!
+ override val baseUrl: String = domain
+
override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(::imageContentTypeIntercept)
.build()
@@ -229,7 +242,31 @@ class HentaiLib : LibGroup("HentaiLib", "https://hentailib.me", "ru") {
SearchFilter("Яндэрэ", "146"),
)
+ override fun setupPreferenceScreen(screen: androidx.preference.PreferenceScreen) {
+ super.setupPreferenceScreen(screen)
+ EditTextPreference(screen.context).apply {
+ key = DOMAIN_TITLE
+ this.title = DOMAIN_TITLE
+ summary = domain
+ this.setDefaultValue(DOMAIN_DEFAULT)
+ dialogTitle = DOMAIN_TITLE
+ setOnPreferenceChangeListener { _, newValue ->
+ try {
+ val res = preferences.edit().putString(DOMAIN_TITLE, newValue as String).commit()
+ Toast.makeText(screen.context, "Для смены домена необходимо перезапустить приложение с полной остановкой.", Toast.LENGTH_LONG).show()
+ res
+ } catch (e: Exception) {
+ e.printStackTrace()
+ false
+ }
+ }
+ }.let(screen::addPreference)
+ }
+
companion object {
const val PREFIX_SLUG_SEARCH = "slug:"
+
+ private const val DOMAIN_TITLE = "Домен"
+ private const val DOMAIN_DEFAULT = "https://v1.hentailib.org"
}
}
diff --git a/multisrc/overrides/libgroup/yaoilib/src/YaoiLib.kt b/multisrc/overrides/libgroup/yaoilib/src/YaoiLib.kt
index 920e83199..96d05e9d4 100644
--- a/multisrc/overrides/libgroup/yaoilib/src/YaoiLib.kt
+++ b/multisrc/overrides/libgroup/yaoilib/src/YaoiLib.kt
@@ -1,5 +1,9 @@
package eu.kanade.tachiyomi.extension.ru.yaoilib
+import android.app.Application
+import android.content.SharedPreferences
+import android.widget.Toast
+import androidx.preference.EditTextPreference
import eu.kanade.tachiyomi.multisrc.libgroup.LibGroup
import eu.kanade.tachiyomi.network.POST
import eu.kanade.tachiyomi.source.model.Filter
@@ -7,9 +11,18 @@ import eu.kanade.tachiyomi.source.model.FilterList
import okhttp3.Headers
import okhttp3.OkHttpClient
import okhttp3.Request
+import uy.kohesive.injekt.Injekt
+import uy.kohesive.injekt.api.get
class YaoiLib : LibGroup("YaoiLib", "https://v1.slashlib.me", "ru") {
+ private val preferences: SharedPreferences by lazy {
+ Injekt.get().getSharedPreferences("source_$id", 0x0000)
+ }
+
+ private var domain: String = preferences.getString(DOMAIN_TITLE, DOMAIN_DEFAULT)!!
+ override val baseUrl: String = domain
+
override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(::imageContentTypeIntercept)
.build()
@@ -175,7 +188,31 @@ class YaoiLib : LibGroup("YaoiLib", "https://v1.slashlib.me", "ru") {
SearchFilter("18+", "2"),
)
+ override fun setupPreferenceScreen(screen: androidx.preference.PreferenceScreen) {
+ super.setupPreferenceScreen(screen)
+ EditTextPreference(screen.context).apply {
+ key = DOMAIN_TITLE
+ this.title = DOMAIN_TITLE
+ summary = domain
+ this.setDefaultValue(DOMAIN_DEFAULT)
+ dialogTitle = DOMAIN_TITLE
+ setOnPreferenceChangeListener { _, newValue ->
+ try {
+ val res = preferences.edit().putString(DOMAIN_TITLE, newValue as String).commit()
+ Toast.makeText(screen.context, "Для смены домена необходимо перезапустить приложение с полной остановкой.", Toast.LENGTH_LONG).show()
+ res
+ } catch (e: Exception) {
+ e.printStackTrace()
+ false
+ }
+ }
+ }.let(screen::addPreference)
+ }
+
companion object {
const val PREFIX_SLUG_SEARCH = "slug:"
+
+ private const val DOMAIN_TITLE = "Домен"
+ private const val DOMAIN_DEFAULT = "https://v1.slashlib.me"
}
}
diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/libgroup/LibGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/libgroup/LibGenerator.kt
index 6402bf621..6b531530b 100644
--- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/libgroup/LibGenerator.kt
+++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/libgroup/LibGenerator.kt
@@ -9,11 +9,11 @@ class LibGenerator : ThemeSourceGenerator {
override val themeClass = "LibGroup"
- override val baseVersionCode: Int = 16
+ override val baseVersionCode: Int = 17
override val sources = listOf(
SingleLang("MangaLib", "https://mangalib.me", "ru", overrideVersionCode = 74),
- SingleLang("HentaiLib", "https://hentailib.me", "ru", isNsfw = true, overrideVersionCode = 19),
+ SingleLang("HentaiLib", "https://v1.hentailib.org", "ru", isNsfw = true, overrideVersionCode = 19),
SingleLang("YaoiLib", "https://v1.slashlib.me", "ru", isNsfw = true, overrideVersionCode = 2),
)
diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/libgroup/LibGroup.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/libgroup/LibGroup.kt
index 057e6e922..b26b1174c 100644
--- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/libgroup/LibGroup.kt
+++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/libgroup/LibGroup.kt
@@ -129,7 +129,7 @@ abstract class LibGroup(
}
private fun fetchLatestMangaFromApi(page: Int): Observable {
- return client.newCall(POST("$baseUrl/filterlist?dir=desc&sort=last_chapter_at&page=$page", catalogHeaders()))
+ return client.newCall(POST("$baseUrl/filterlist?dir=desc&sort=last_chapter_at&page=$page&chapters[min]=1", catalogHeaders()))
.asObservableSuccess()
.map { response ->
latestUpdatesParse(response)
@@ -156,7 +156,7 @@ abstract class LibGroup(
}
private fun fetchPopularMangaFromApi(page: Int): Observable {
- return client.newCall(POST("$baseUrl/filterlist?dir=desc&sort=views&page=$page", catalogHeaders()))
+ return client.newCall(POST("$baseUrl/filterlist?dir=desc&sort=views&page=$page&chapters[min]=1", catalogHeaders()))
.asObservableSuccess()
.map { response ->
popularMangaParse(response)
@@ -539,7 +539,7 @@ abstract class LibGroup(
val resBody = tokenResponse.body.string()
csrfToken = "_token\" content=\"(.*)\"".toRegex().find(resBody)!!.groups[1]!!.value
}
- val url = "$baseUrl/filterlist?page=$page".toHttpUrlOrNull()!!.newBuilder()
+ val url = "$baseUrl/filterlist?page=$page&chapters[min]=1".toHttpUrlOrNull()!!.newBuilder()
if (query.isNotEmpty()) {
url.addQueryParameter("name", query)
}
@@ -579,6 +579,11 @@ abstract class LibGroup(
url.addQueryParameter(if (favorite.isIncluded()) "bookmarks[include][]" else "bookmarks[exclude][]", favorite.id)
}
}
+ is RequireChapters -> {
+ if (filter.state == 1) {
+ url.setQueryParameter("chapters[min]", "0")
+ }
+ }
else -> {}
}
}
@@ -606,6 +611,7 @@ abstract class LibGroup(
StatusList(getStatusList()),
StatusTitleList(getStatusTitleList()),
MyList(getMyList()),
+ RequireChapters(),
)
private class OrderBy : Filter.Sort(
@@ -701,6 +707,12 @@ abstract class LibGroup(
SearchFilter("Прочитано", "4"),
SearchFilter("Любимые", "5"),
)
+
+ private class RequireChapters : Filter.Select(
+ "Только проекты с главами",
+ arrayOf("Да", "Все"),
+ )
+
companion object {
const val PREFIX_SLUG_SEARCH = "slug:"
private const val SERVER_PREF = "MangaLibImageServer"