Request: use timeout values from settings
This commit is contained in:
parent
70beae84e7
commit
d47d67be1a
|
@ -20,6 +20,7 @@ import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.core.view.setMargins
|
import androidx.core.view.setMargins
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
|
import androidx.preference.PreferenceManager
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import dev.lowrespalmtree.comet.databinding.FragmentPageViewBinding
|
import dev.lowrespalmtree.comet.databinding.FragmentPageViewBinding
|
||||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
|
@ -112,7 +113,14 @@ class PageViewFragment : Fragment(), ContentAdapter.ContentAdapterListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
when (uri.scheme) {
|
when (uri.scheme) {
|
||||||
"gemini" -> pageViewModel.sendGeminiRequest(uri)
|
"gemini" -> {
|
||||||
|
val prefs = PreferenceManager.getDefaultSharedPreferences(requireContext())
|
||||||
|
val connectionTimeout =
|
||||||
|
prefs.getInt("connection_timeout", Request.DEFAULT_CONNECTION_TIMEOUT_SEC)
|
||||||
|
val readTimeout =
|
||||||
|
prefs.getInt("read_timeout", Request.DEFAULT_READ_TIMEOUT_SEC)
|
||||||
|
pageViewModel.sendGeminiRequest(uri, connectionTimeout, readTimeout)
|
||||||
|
}
|
||||||
else -> openUnknownScheme(uri)
|
else -> openUnknownScheme(uri)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,14 +39,14 @@ class PageViewModel : ViewModel() {
|
||||||
*
|
*
|
||||||
* The URI must be valid, absolute and with a gemini scheme.
|
* The URI must be valid, absolute and with a gemini scheme.
|
||||||
*/
|
*/
|
||||||
fun sendGeminiRequest(uri: Uri, redirects: Int = 0) {
|
fun sendGeminiRequest(uri: Uri, connectionTimeout: Int, readTimeout: Int, redirects: Int = 0) {
|
||||||
Log.d(TAG, "sendRequest: URI \"$uri\"")
|
Log.d(TAG, "sendRequest: URI \"$uri\"")
|
||||||
state.postValue(State.CONNECTING)
|
state.postValue(State.CONNECTING)
|
||||||
requestJob?.apply { if (isActive) cancel() }
|
requestJob?.apply { if (isActive) cancel() }
|
||||||
requestJob = viewModelScope.launch(Dispatchers.IO) {
|
requestJob = viewModelScope.launch(Dispatchers.IO) {
|
||||||
val response = try {
|
val response = try {
|
||||||
val request = Request(uri)
|
val request = Request(uri)
|
||||||
val socket = request.connect()
|
val socket = request.connect(connectionTimeout, readTimeout)
|
||||||
val channel = request.proceed(socket, this)
|
val channel = request.proceed(socket, this)
|
||||||
Response.from(channel, viewModelScope)
|
Response.from(channel, viewModelScope)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
|
|
@ -17,13 +17,13 @@ import javax.net.ssl.X509TrustManager
|
||||||
class Request(private val uri: Uri) {
|
class Request(private val uri: Uri) {
|
||||||
private val port get() = if (uri.port > 0) uri.port else 1965
|
private val port get() = if (uri.port > 0) uri.port else 1965
|
||||||
|
|
||||||
fun connect(): SSLSocket {
|
fun connect(connectionTimeout: Int, readTimeout: Int): SSLSocket {
|
||||||
Log.d(TAG, "connect")
|
Log.d(TAG, "connect")
|
||||||
val context = SSLContext.getInstance("TLSv1.2")
|
val context = SSLContext.getInstance("TLSv1.2")
|
||||||
context.init(null, arrayOf(TrustManager()), null)
|
context.init(null, arrayOf(TrustManager()), null)
|
||||||
val socket = context.socketFactory.createSocket() as SSLSocket
|
val socket = context.socketFactory.createSocket() as SSLSocket
|
||||||
socket.soTimeout = 10000
|
socket.soTimeout = readTimeout * 1000
|
||||||
socket.connect(InetSocketAddress(uri.host, port), 10000)
|
socket.connect(InetSocketAddress(uri.host, port), connectionTimeout * 1000)
|
||||||
socket.startHandshake()
|
socket.startHandshake()
|
||||||
return socket
|
return socket
|
||||||
}
|
}
|
||||||
|
@ -69,6 +69,8 @@ class Request(private val uri: Uri) {
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val TAG = "Request"
|
private const val TAG = "Request"
|
||||||
|
const val DEFAULT_CONNECTION_TIMEOUT_SEC = 10
|
||||||
|
const val DEFAULT_READ_TIMEOUT_SEC = 10
|
||||||
}
|
}
|
||||||
}
|
}
|
Reference in a new issue