Skip to content

Commit edc9dbe

Browse files
authored
Add 'OfflineException' as a cause when using failFastIfOffline (#6104)
* Add 'OfflineException' as a cause when using failFastIfOffline * update apiDump
1 parent 6684a79 commit edc9dbe

File tree

4 files changed

+24
-8
lines changed

4 files changed

+24
-8
lines changed

libraries/apollo-api/api/apollo-api.api

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1292,6 +1292,13 @@ public final class com/apollographql/apollo/exception/NullOrMissingField : com/a
12921292
public fun <init> (Ljava/lang/String;)V
12931293
}
12941294

1295+
public final class com/apollographql/apollo/exception/OfflineException : java/io/IOException {
1296+
public static final field INSTANCE Lcom/apollographql/apollo/exception/OfflineException;
1297+
public fun equals (Ljava/lang/Object;)Z
1298+
public fun hashCode ()I
1299+
public fun toString ()Ljava/lang/String;
1300+
}
1301+
12951302
public final class com/apollographql/apollo/exception/RouterError : com/apollographql/apollo/exception/ApolloException {
12961303
public fun <init> (Ljava/util/List;)V
12971304
public final fun getErrors ()Ljava/util/List;

libraries/apollo-api/api/apollo-api.klib.api

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1000,6 +1000,11 @@ final inline fun <#A: reified kotlin/Any?> (kotlin/Any).com.apollographql.apollo
10001000
final inline fun com.apollographql.apollo.api.json/buildJsonByteString(kotlin/String? = ..., crossinline kotlin/Function1<com.apollographql.apollo.api.json/JsonWriter, kotlin/Unit>): okio/ByteString // com.apollographql.apollo.api.json/buildJsonByteString|buildJsonByteString(kotlin.String?;kotlin.Function1<com.apollographql.apollo.api.json.JsonWriter,kotlin.Unit>){}[0]
10011001
final inline fun com.apollographql.apollo.api.json/buildJsonMap(crossinline kotlin/Function1<com.apollographql.apollo.api.json/JsonWriter, kotlin/Unit>): kotlin/Any? // com.apollographql.apollo.api.json/buildJsonMap|buildJsonMap(kotlin.Function1<com.apollographql.apollo.api.json.JsonWriter,kotlin.Unit>){}[0]
10021002
final inline fun com.apollographql.apollo.api.json/buildJsonString(kotlin/String? = ..., crossinline kotlin/Function1<com.apollographql.apollo.api.json/JsonWriter, kotlin/Unit>): kotlin/String // com.apollographql.apollo.api.json/buildJsonString|buildJsonString(kotlin.String?;kotlin.Function1<com.apollographql.apollo.api.json.JsonWriter,kotlin.Unit>){}[0]
1003+
final object com.apollographql.apollo.exception/OfflineException : okio/IOException { // com.apollographql.apollo.exception/OfflineException|null[0]
1004+
final fun equals(kotlin/Any?): kotlin/Boolean // com.apollographql.apollo.exception/OfflineException.equals|equals(kotlin.Any?){}[0]
1005+
final fun hashCode(): kotlin/Int // com.apollographql.apollo.exception/OfflineException.hashCode|hashCode(){}[0]
1006+
final fun toString(): kotlin/String // com.apollographql.apollo.exception/OfflineException.toString|toString(){}[0]
1007+
}
10031008
final val com.apollographql.apollo.api/AnyAdapter // com.apollographql.apollo.api/AnyAdapter|{}AnyAdapter[0]
10041009
final fun <get-AnyAdapter>(): com.apollographql.apollo.api/Adapter<kotlin/Any> // com.apollographql.apollo.api/AnyAdapter.<get-AnyAdapter>|<get-AnyAdapter>(){}[0]
10051010
final val com.apollographql.apollo.api/ApolloOptionalAnyAdapter // com.apollographql.apollo.api/ApolloOptionalAnyAdapter|{}ApolloOptionalAnyAdapter[0]

libraries/apollo-api/src/commonMain/kotlin/com/apollographql/apollo/exception/Exceptions.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.apollographql.apollo.annotations.ApolloInternal
66
import com.apollographql.apollo.api.Error
77
import com.apollographql.apollo.api.http.HttpHeader
88
import okio.BufferedSource
9+
import okio.IOException
910

1011
/**
1112
* The base class for all exceptions
@@ -31,16 +32,20 @@ class NoDataException(cause: Throwable?) : ApolloException("No data was found",
3132
* [ApolloNetworkException] is thrown when an I/O error happens reading the operation.
3233
*
3334
* @param message a message indicating what the error was.
34-
* @param platformCause the underlying cause. Might be null. When not null, it can be cast to:
35-
* - a [Throwable] on JVM platforms.
36-
* - a [NSError] on Darwin platforms.
37-
* to get more details about what went wrong.
35+
* @param platformCause the underlying cause to get more details about what went wrong. When not null, it is either:
36+
* - a [Throwable]
37+
* - or a [NSError] on Apple platforms.
3838
*/
3939
class ApolloNetworkException(
4040
message: String? = null,
4141
val platformCause: Any? = null,
4242
) : ApolloException(message = message, cause = platformCause as? Throwable)
4343

44+
/**
45+
* The device has been detected as offline
46+
*/
47+
data object OfflineException: IOException("The device is offline")
48+
4449
/**
4550
* The server could not process a subscription and sent an error.
4651
*

libraries/apollo-runtime/src/commonMain/kotlin/com/apollographql/apollo/interceptor/RetryOnErrorInterceptor.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,12 @@ import com.apollographql.apollo.api.ApolloResponse
66
import com.apollographql.apollo.api.Operation
77
import com.apollographql.apollo.exception.ApolloException
88
import com.apollographql.apollo.exception.ApolloNetworkException
9+
import com.apollographql.apollo.exception.OfflineException
910
import com.apollographql.apollo.network.NetworkMonitor
10-
import com.benasher44.uuid.uuid4
1111
import kotlinx.coroutines.delay
1212
import kotlinx.coroutines.flow.Flow
1313
import kotlinx.coroutines.flow.emitAll
1414
import kotlinx.coroutines.flow.flow
15-
import kotlinx.coroutines.flow.flowOf
1615
import kotlinx.coroutines.flow.map
1716
import kotlinx.coroutines.flow.onEach
1817
import kotlinx.coroutines.flow.retryWhen
@@ -62,7 +61,7 @@ private class DefaultRetryOnErrorInterceptorImpl(private val networkMonitor: Net
6261

6362
return flow {
6463
if (failFastIfOffline && networkMonitor?.isOnline() == false) {
65-
emit((ApolloResponse.Builder(request.operation, request.requestUuid).exception(OfflineException).build()))
64+
emit((ApolloResponse.Builder(request.operation, request.requestUuid).exception(OfflineApolloException).build()))
6665
} else {
6766
emitAll(downStream)
6867
}
@@ -98,7 +97,7 @@ private fun ApolloException.isRecoverable(): Boolean {
9897

9998
private object RetryException : Exception()
10099

101-
private val OfflineException = ApolloNetworkException("The device is offline")
100+
private val OfflineApolloException = ApolloNetworkException("The device is offline", OfflineException)
102101

103102
/**
104103
* A copy/paste of the kotlinx.coroutines version until it becomes stable

0 commit comments

Comments
 (0)