From 4aa22bd557bf5ef36251971fcb9e0d376be5ddef Mon Sep 17 00:00:00 2001 From: zachseidner1 Date: Mon, 21 Apr 2025 13:57:30 -0400 Subject: [PATCH 1/2] Implement loading timeouts --- .../score/model/ScoreRepository.kt | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/cornellappdev/score/model/ScoreRepository.kt b/app/src/main/java/com/cornellappdev/score/model/ScoreRepository.kt index 6e8dd19..25b0dd8 100644 --- a/app/src/main/java/com/cornellappdev/score/model/ScoreRepository.kt +++ b/app/src/main/java/com/cornellappdev/score/model/ScoreRepository.kt @@ -2,6 +2,7 @@ package com.cornellappdev.score.model import android.util.Log import com.apollographql.apollo.ApolloClient +import com.cornellappdev.score.util.isValidSport import com.cornellappdev.score.util.parseColor import com.example.score.GameByIdQuery import com.example.score.GamesQuery @@ -10,9 +11,11 @@ import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch +import kotlinx.coroutines.withTimeout import javax.inject.Inject import javax.inject.Singleton -import com.cornellappdev.score.util.isValidSport + +private const val TIMEOUT_TIME_MILLIS = 5000L /** * This is a singleton responsible for fetching and caching all data for Score. @@ -40,7 +43,10 @@ class ScoreRepository @Inject constructor( fun fetchGames() = appScope.launch { _upcomingGamesFlow.value = ApiResponse.Loading try { - val result = (apolloClient.query(GamesQuery()).execute()).toResult() + val result = + withTimeout(TIMEOUT_TIME_MILLIS) { + apolloClient.query((GamesQuery())).execute().toResult() + } if (result.isSuccess) { val games = result.getOrNull() @@ -93,7 +99,12 @@ class ScoreRepository @Inject constructor( fun getGameById(id: String) = appScope.launch { _currentGameFlow.value = ApiResponse.Loading try { - val result = (apolloClient.query(GameByIdQuery(id)).execute()).toResult() + val result = + withTimeout(TIMEOUT_TIME_MILLIS) { + (apolloClient.query(GameByIdQuery(id)).execute()).toResult() + } + + result.getOrNull()?.game?.let { _currentGameFlow.value = ApiResponse.Success(it.toGameDetails()) } ?: _currentGameFlow.update { ApiResponse.Error } From ac4e70e0adc8f4375097a1586f13d56bcf3fd819 Mon Sep 17 00:00:00 2001 From: zachseidner1 Date: Mon, 21 Apr 2025 13:58:13 -0400 Subject: [PATCH 2/2] Remove bad parenthesis --- .../main/java/com/cornellappdev/score/model/ScoreRepository.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/cornellappdev/score/model/ScoreRepository.kt b/app/src/main/java/com/cornellappdev/score/model/ScoreRepository.kt index 25b0dd8..1310cd4 100644 --- a/app/src/main/java/com/cornellappdev/score/model/ScoreRepository.kt +++ b/app/src/main/java/com/cornellappdev/score/model/ScoreRepository.kt @@ -101,7 +101,7 @@ class ScoreRepository @Inject constructor( try { val result = withTimeout(TIMEOUT_TIME_MILLIS) { - (apolloClient.query(GameByIdQuery(id)).execute()).toResult() + apolloClient.query(GameByIdQuery(id)).execute().toResult() }