mirror of
https://github.com/atsunatsu/Look4Sat.git
synced 2026-10-06 04:27:29 +00:00
fix(data): LoTW sync resilience — longer timeouts (30s/120s), gzip transfer, follow redirects; ARRL server-side latency is the bottleneck
This commit is contained in:
1 parent
de6ade025c
commit
c372386a77
1 file changed
+13
-3
+13
-3
@@ -57,15 +57,25 @@ class LoTWRepository : ILoTWRepository {
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
val connection = URL("$BASE_URL?$query").openConnection() as HttpURLConnection
|
val connection = URL("$BASE_URL?$query").openConnection() as HttpURLConnection
|
||||||
connection.connectTimeout = 15_000
|
// ARRL can be slow to accept connections from mobile networks
|
||||||
connection.readTimeout = 60_000
|
// (long TLS handshakes across the Pacific, occasional server-side
|
||||||
|
// queueing). 30s connect + 120s read gives the request enough
|
||||||
|
// headroom; the sync button stays disabled meanwhile so users
|
||||||
|
// see progress rather than a hung dialog.
|
||||||
|
connection.connectTimeout = 30_000
|
||||||
|
connection.readTimeout = 120_000
|
||||||
connection.requestMethod = "GET"
|
connection.requestMethod = "GET"
|
||||||
|
connection.setRequestProperty("Accept-Encoding", "gzip")
|
||||||
|
connection.instanceFollowRedirects = true
|
||||||
val code = connection.responseCode
|
val code = connection.responseCode
|
||||||
if (code !in 200..299) {
|
if (code !in 200..299) {
|
||||||
connection.disconnect()
|
connection.disconnect()
|
||||||
return@withContext null
|
return@withContext null
|
||||||
}
|
}
|
||||||
val body = connection.inputStream.bufferedReader().use { it.readText() }
|
val stream = connection.inputStream
|
||||||
|
val body = ("gzip".equals(connection.contentEncoding, ignoreCase = true))
|
||||||
|
.let { gz -> if (gz) java.util.zip.GZIPInputStream(stream) else stream }
|
||||||
|
.bufferedReader().use { it.readText() }
|
||||||
connection.disconnect()
|
connection.disconnect()
|
||||||
if (body.contains(" password=") && !body.startsWith("ARRL")) return@withContext null
|
if (body.contains(" password=") && !body.startsWith("ARRL")) return@withContext null
|
||||||
parseConfirmedGrids(body)
|
parseConfirmedGrids(body)
|
||||||
|
|||||||
Reference in new issue
Block a user