Files
vyatsu-schedule/app/src/main/java/agzam/vyatsu/data/remote/VyatsuHttpClient.kt
T
Agzamus ef81659521 chore(http): log failed requests only
Per-request GET success logs (39 long URLs per teacher sync) flood the
2MB logcat buffer together with system ZeroHung spam, drowning the real
kill reason (am_proc_died / lowmemorykiller). Log only non-2xx responses.
2026-09-20 03:08:33 +03:00

51 lines
1.8 KiB
Kotlin

package agzam.vyatsu.data.remote
import android.util.Log
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import okhttp3.OkHttpClient
import okhttp3.Request
import java.io.InputStream
import java.util.concurrent.TimeUnit
/**
* @author Agzam
*/
object VyatsuHttpClient {
private const val TAG = "HTTP"
private val client: OkHttpClient = OkHttpClient.Builder()
.connectTimeout(15, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build()
suspend fun getText(url: String): String = withContext(Dispatchers.IO) {
client.newCall(Request.Builder().url(url).build()).execute().use { resp ->
if (!resp.isSuccessful) Log.e(TAG, "GET $url -> HTTP ${resp.code}")
check(resp.isSuccessful) { "HTTP ${resp.code} for $url" }
resp.body!!.string()
}
}
suspend fun getBytes(url: String): ByteArray = withContext(Dispatchers.IO) {
client.newCall(Request.Builder().url(url).build()).execute().use { resp ->
if (!resp.isSuccessful) Log.e(TAG, "GET $url -> HTTP ${resp.code}")
check(resp.isSuccessful) { "HTTP ${resp.code} for $url" }
resp.body!!.bytes()
}
}
/**
* Открывает потоковое тело ответа. Вызывающий обязан закрыть
* возвращённый [InputStream], чтобы вернуть соединение в пул.
*/
suspend fun openStream(url: String): InputStream = withContext(Dispatchers.IO) {
val resp = client.newCall(Request.Builder().url(url).build()).execute()
if (!resp.isSuccessful) Log.e(TAG, "GET $url -> HTTP ${resp.code}")
check(resp.isSuccessful) { "HTTP ${resp.code} for $url" }
resp.body!!.byteStream()
}
}