From d46b3e4cba1347e4dab4ed2b3e3d708a32158bb4 Mon Sep 17 00:00:00 2001 From: LeanBitLab <245915690+LeanBitLab@users.noreply.github.com> Date: Tue, 6 Oct 2026 08:11:09 +0000 Subject: [PATCH] Optimize fetchPostComments by using Dispatchers.IO for blocking network calls Wrapped the HttpURLConnection operations and stream reading in `fetchPostComments` with `withContext(Dispatchers.IO)` to prevent thread blocking in coroutines. Cleaned up a duplicate import in MinimalButton.kt. --- .../example/reddittube/data/DataRepository.kt | 41 +++++++++++-------- .../ui/main/components/MinimalButton.kt | 1 - 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/example/reddittube/data/DataRepository.kt b/app/src/main/java/com/example/reddittube/data/DataRepository.kt index 90c2f6a..e80e395 100644 --- a/app/src/main/java/com/example/reddittube/data/DataRepository.kt +++ b/app/src/main/java/com/example/reddittube/data/DataRepository.kt @@ -167,22 +167,32 @@ class DefaultDataRepository(private val context: Context) : DataRepository { val comments = mutableListOf() try { val url = "https://oauth.reddit.com/r/$subreddit/comments/$postId.json?limit=100&sort=top&raw_json=1" - val conn = URL(url).openConnection() as HttpURLConnection - conn.requestMethod = "GET" - conn.setRequestProperty("Authorization", "Bearer $token") - conn.setRequestProperty("User-Agent", RedditOAuthHelper.getUserAgent(context)) - conn.setRequestProperty("Connection", "keep-alive") - conn.connectTimeout = 8000 - conn.readTimeout = 8000 + val raw = withContext(Dispatchers.IO) { + val conn = URL(url).openConnection() as HttpURLConnection + conn.requestMethod = "GET" + conn.setRequestProperty("Authorization", "Bearer $token") + conn.setRequestProperty("User-Agent", RedditOAuthHelper.getUserAgent(context)) + conn.setRequestProperty("Connection", "keep-alive") + conn.connectTimeout = 8000 + conn.readTimeout = 8000 - val code = conn.responseCode - if (code == 200) { - val stream = if ("gzip".equals(conn.contentEncoding, ignoreCase = true)) { - java.util.zip.GZIPInputStream(conn.inputStream) + val code = conn.responseCode + val responseRaw = if (code == 200) { + val stream = if ("gzip".equals(conn.contentEncoding, ignoreCase = true)) { + java.util.zip.GZIPInputStream(conn.inputStream) + } else { + conn.inputStream + } + stream.bufferedReader(Charsets.UTF_8).use { it.readText() } } else { - conn.inputStream + Log.w("RedditRepository", "Comments HTTP $code for $url") + null } - val raw = stream.bufferedReader(Charsets.UTF_8).use { it.readText() } + conn.disconnect() + responseRaw + } + + if (raw != null) { val jsonArray = org.json.JSONArray(raw) if (jsonArray.length() > 1) { val commentListing = jsonArray.getJSONObject(1) @@ -210,11 +220,8 @@ class DefaultDataRepository(private val context: Context) : DataRepository { } } } - } else { - Log.w("RedditRepository", "Comments HTTP $code for $url") + comments.sortByDescending { it.score } } - conn.disconnect() - comments.sortByDescending { it.score } } catch (e: Exception) { Log.e("RedditRepository", "fetchPostComments error: ${e.message}") } diff --git a/app/src/main/java/com/example/reddittube/ui/main/components/MinimalButton.kt b/app/src/main/java/com/example/reddittube/ui/main/components/MinimalButton.kt index 056265a..8879150 100644 --- a/app/src/main/java/com/example/reddittube/ui/main/components/MinimalButton.kt +++ b/app/src/main/java/com/example/reddittube/ui/main/components/MinimalButton.kt @@ -16,7 +16,6 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.semantics.Role import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.semantics.Role import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp