Split url and domain validations #1043

master
Koitharu 2 years ago
parent 249c8377bd
commit b521460335
Signed by: Koitharu
GPG Key ID: 676DEE768C17A9D7

@ -1,6 +1,5 @@
package org.koitharu.kotatsu.settings.utils.validation package org.koitharu.kotatsu.settings.utils.validation
import android.webkit.URLUtil
import okhttp3.HttpUrl import okhttp3.HttpUrl
import org.koitharu.kotatsu.R import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.core.util.EditTextValidator import org.koitharu.kotatsu.core.util.EditTextValidator
@ -21,20 +20,15 @@ class DomainValidator : EditTextValidator() {
companion object { companion object {
fun isValidDomain(value: String): Boolean { fun isValidDomain(value: String): Boolean = runCatching {
if ( ! URLUtil.isValidUrl(value) ) { require(value.isNotEmpty())
return runCatching { val parts = value.split(':')
require(value.isNotEmpty()) require(parts.size <= 2)
val parts = value.split(':') val urlBuilder = HttpUrl.Builder()
require(parts.size <= 2) urlBuilder.host(parts.first())
val urlBuilder = HttpUrl.Builder() if (parts.size == 2) {
urlBuilder.host(parts.first()) urlBuilder.port(parts[1].toInt())
if (parts.size == 2) {
urlBuilder.port(parts[1].toInt())
}
}.isSuccess
} }
return true }.isSuccess
}
} }
} }

@ -0,0 +1,24 @@
package org.koitharu.kotatsu.settings.utils.validation
import android.webkit.URLUtil
import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.core.util.EditTextValidator
class UrlValidator : EditTextValidator() {
override fun validate(text: String): ValidationResult {
val trimmed = text.trim()
if (trimmed.isEmpty()) {
return ValidationResult.Success
}
return if (!isValidUrl(trimmed)) {
ValidationResult.Failed(context.getString(R.string.invalid_server_address_message))
} else {
ValidationResult.Success
}
}
private fun isValidUrl(str: String): Boolean {
return URLUtil.isValidUrl(str) || DomainValidator.isValidDomain(str)
}
}

@ -16,7 +16,7 @@ import org.koitharu.kotatsu.core.ui.AlertDialogFragment
import org.koitharu.kotatsu.core.util.ext.ifNullOrEmpty import org.koitharu.kotatsu.core.util.ext.ifNullOrEmpty
import org.koitharu.kotatsu.core.util.ext.withArgs import org.koitharu.kotatsu.core.util.ext.withArgs
import org.koitharu.kotatsu.databinding.PreferenceDialogAutocompletetextviewBinding import org.koitharu.kotatsu.databinding.PreferenceDialogAutocompletetextviewBinding
import org.koitharu.kotatsu.settings.utils.validation.DomainValidator import org.koitharu.kotatsu.settings.utils.validation.UrlValidator
import org.koitharu.kotatsu.sync.data.SyncSettings import org.koitharu.kotatsu.sync.data.SyncSettings
import javax.inject.Inject import javax.inject.Inject
@ -58,7 +58,7 @@ class SyncHostDialogFragment : AlertDialogFragment<PreferenceDialogAutocompletet
binding.dropdown.setOnClickListener { binding.dropdown.setOnClickListener {
editText.showDropDown() editText.showDropDown()
} }
DomainValidator().attachToEditText(editText) UrlValidator().attachToEditText(editText)
} }
override fun onClick(dialog: DialogInterface, which: Int) { override fun onClick(dialog: DialogInterface, which: Int) {

@ -278,7 +278,8 @@
<string name="exclude_nsfw_from_history_summary">Manga marked as NSFW will never be added to the history and your progress will not be saved</string> <string name="exclude_nsfw_from_history_summary">Manga marked as NSFW will never be added to the history and your progress will not be saved</string>
<string name="clear_cookies_summary">Can help in case of some issues. All authorizations will be invalidated</string> <string name="clear_cookies_summary">Can help in case of some issues. All authorizations will be invalidated</string>
<string name="show_all">Show all</string> <string name="show_all">Show all</string>
<string name="invalid_domain_message">Invalid server address</string> <string name="invalid_domain_message">Invalid domain</string>
<string name="invalid_server_address_message">Invalid server address</string>
<string name="select_range">Select range</string> <string name="select_range">Select range</string>
<string name="clear_all_history">Clear all history</string> <string name="clear_all_history">Clear all history</string>
<string name="last_2_hours">Last 2 hours</string> <string name="last_2_hours">Last 2 hours</string>

Loading…
Cancel
Save