Fix requests failing in Komga. (#13704)
This commit is contained in:
parent
c8adaa2f2a
commit
997b3e2e68
@ -1,3 +1,16 @@
|
|||||||
|
## 1.3.43
|
||||||
|
|
||||||
|
Minimum Komga version required: `0.151.0`
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
* Requests failing if address preference is saved with a trailing slash
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* Add URL validation in the address preferences
|
||||||
|
* Use a URL-focused keyboard when available while editing the address preferences
|
||||||
|
|
||||||
## 1.3.42
|
## 1.3.42
|
||||||
|
|
||||||
Minimum Komga version required: `0.151.0`
|
Minimum Komga version required: `0.151.0`
|
||||||
|
@ -6,7 +6,7 @@ ext {
|
|||||||
extName = 'Komga'
|
extName = 'Komga'
|
||||||
pkgNameSuffix = 'all.komga'
|
pkgNameSuffix = 'all.komga'
|
||||||
extClass = '.KomgaFactory'
|
extClass = '.KomgaFactory'
|
||||||
extVersionCode = 42
|
extVersionCode = 43
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
@ -2,9 +2,14 @@ package eu.kanade.tachiyomi.extension.all.komga
|
|||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
|
import android.text.Editable
|
||||||
import android.text.InputType
|
import android.text.InputType
|
||||||
|
import android.text.TextWatcher
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
|
import android.widget.Button
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
import androidx.preference.EditTextPreference
|
||||||
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.AppInfo
|
import eu.kanade.tachiyomi.AppInfo
|
||||||
import eu.kanade.tachiyomi.extension.all.komga.dto.AuthorDto
|
import eu.kanade.tachiyomi.extension.all.komga.dto.AuthorDto
|
||||||
import eu.kanade.tachiyomi.extension.all.komga.dto.BookDto
|
import eu.kanade.tachiyomi.extension.all.komga.dto.BookDto
|
||||||
@ -393,9 +398,9 @@ open class Komga(suffix: String = "") : ConfigurableSource, UnmeteredSource, Htt
|
|||||||
(0..7).map { bytes[it].toLong() and 0xff shl 8 * (7 - it) }.reduce(Long::or) and Long.MAX_VALUE
|
(0..7).map { bytes[it].toLong() and 0xff shl 8 * (7 - it) }.reduce(Long::or) and Long.MAX_VALUE
|
||||||
}
|
}
|
||||||
|
|
||||||
override val baseUrl by lazy { getPrefBaseUrl() }
|
override val baseUrl by lazy { preferences.baseUrl }
|
||||||
private val username by lazy { getPrefUsername() }
|
private val username by lazy { preferences.username }
|
||||||
private val password by lazy { getPrefPassword() }
|
private val password by lazy { preferences.password }
|
||||||
private val json: Json by injectLazy()
|
private val json: Json by injectLazy()
|
||||||
|
|
||||||
override fun headersBuilder(): Headers.Builder =
|
override fun headersBuilder(): Headers.Builder =
|
||||||
@ -420,23 +425,66 @@ open class Komga(suffix: String = "") : ConfigurableSource, UnmeteredSource, Htt
|
|||||||
.dns(Dns.SYSTEM) // don't use DNS over HTTPS as it breaks IP addressing
|
.dns(Dns.SYSTEM) // don't use DNS over HTTPS as it breaks IP addressing
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
override fun setupPreferenceScreen(screen: androidx.preference.PreferenceScreen) {
|
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
||||||
screen.addPreference(screen.editTextPreference(ADDRESS_TITLE, ADDRESS_DEFAULT, baseUrl))
|
screen.addEditTextPreference(
|
||||||
screen.addPreference(screen.editTextPreference(USERNAME_TITLE, USERNAME_DEFAULT, username))
|
title = ADDRESS_TITLE,
|
||||||
screen.addPreference(screen.editTextPreference(PASSWORD_TITLE, PASSWORD_DEFAULT, password, true))
|
default = ADDRESS_DEFAULT,
|
||||||
|
value = baseUrl,
|
||||||
|
inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_URI,
|
||||||
|
validate = { it.toHttpUrlOrNull() != null },
|
||||||
|
validationMessage = "The URL is invalid or malformed"
|
||||||
|
)
|
||||||
|
screen.addEditTextPreference(
|
||||||
|
title = USERNAME_TITLE,
|
||||||
|
default = USERNAME_DEFAULT,
|
||||||
|
value = username
|
||||||
|
)
|
||||||
|
screen.addEditTextPreference(
|
||||||
|
title = PASSWORD_TITLE,
|
||||||
|
default = PASSWORD_DEFAULT,
|
||||||
|
value = password,
|
||||||
|
inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun androidx.preference.PreferenceScreen.editTextPreference(title: String, default: String, value: String, isPassword: Boolean = false): androidx.preference.EditTextPreference {
|
private fun PreferenceScreen.addEditTextPreference(
|
||||||
return androidx.preference.EditTextPreference(context).apply {
|
title: String,
|
||||||
|
default: String,
|
||||||
|
value: String,
|
||||||
|
inputType: Int? = null,
|
||||||
|
validate: ((String) -> Boolean)? = null,
|
||||||
|
validationMessage: String? = null
|
||||||
|
) {
|
||||||
|
val preference = EditTextPreference(context).apply {
|
||||||
key = title
|
key = title
|
||||||
this.title = title
|
this.title = title
|
||||||
summary = value
|
summary = value
|
||||||
this.setDefaultValue(default)
|
this.setDefaultValue(default)
|
||||||
dialogTitle = title
|
dialogTitle = title
|
||||||
|
|
||||||
if (isPassword) {
|
setOnBindEditTextListener { editText ->
|
||||||
setOnBindEditTextListener {
|
if (inputType != null) {
|
||||||
it.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD
|
editText.inputType = inputType
|
||||||
|
}
|
||||||
|
|
||||||
|
if (validate != null) {
|
||||||
|
editText.addTextChangedListener(object : TextWatcher {
|
||||||
|
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
|
||||||
|
|
||||||
|
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
|
||||||
|
|
||||||
|
override fun afterTextChanged(editable: Editable?) {
|
||||||
|
requireNotNull(editable)
|
||||||
|
|
||||||
|
val text = editable.toString()
|
||||||
|
|
||||||
|
val isValid = text.isBlank() || validate(text)
|
||||||
|
|
||||||
|
editText.error = if (!isValid) validationMessage else null
|
||||||
|
editText.rootView.findViewById<Button>(android.R.id.button1)
|
||||||
|
?.isEnabled = editText.error == null
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -451,11 +499,18 @@ open class Komga(suffix: String = "") : ConfigurableSource, UnmeteredSource, Htt
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
addPreference(preference)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getPrefBaseUrl(): String = preferences.getString(ADDRESS_TITLE, ADDRESS_DEFAULT)!!
|
private val SharedPreferences.baseUrl
|
||||||
private fun getPrefUsername(): String = preferences.getString(USERNAME_TITLE, USERNAME_DEFAULT)!!
|
get() = getString(ADDRESS_TITLE, ADDRESS_DEFAULT)!!.removeSuffix("/")
|
||||||
private fun getPrefPassword(): String = preferences.getString(PASSWORD_TITLE, PASSWORD_DEFAULT)!!
|
|
||||||
|
private val SharedPreferences.username
|
||||||
|
get() = getString(USERNAME_TITLE, USERNAME_DEFAULT)!!
|
||||||
|
|
||||||
|
private val SharedPreferences.password
|
||||||
|
get() = getString(PASSWORD_TITLE, PASSWORD_DEFAULT)!!
|
||||||
|
|
||||||
init {
|
init {
|
||||||
if (baseUrl.isNotBlank()) {
|
if (baseUrl.isNotBlank()) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user