diff --git a/app/src/main/java/org/tasks/jobs/DriveUploader.kt b/app/src/main/java/org/tasks/jobs/DriveUploader.kt index 1380a1559..80142eab7 100644 --- a/app/src/main/java/org/tasks/jobs/DriveUploader.kt +++ b/app/src/main/java/org/tasks/jobs/DriveUploader.kt @@ -20,6 +20,7 @@ import timber.log.Timber import java.io.FileNotFoundException import java.io.IOException import java.net.ConnectException +import java.net.SocketException import java.net.SocketTimeoutException import java.net.UnknownHostException import javax.net.ssl.SSLException @@ -51,40 +52,45 @@ class DriveUploader @WorkerInject constructor( .forEach { drive.delete(it) } } Result.success() + } catch (e: FileNotFoundException) { + fail(e) + } catch (e: SocketException) { + retry(e) } catch (e: SocketTimeoutException) { - Timber.e(e) - Result.retry() + retry(e) } catch (e: SSLException) { - Timber.e(e) - Result.retry() + retry(e) } catch (e: ConnectException) { - Timber.e(e) - Result.retry() + retry(e) } catch (e: UnknownHostException) { - Timber.e(e) - Result.retry() - } catch (e: FileNotFoundException) { - Timber.e(e) - Result.failure() + retry(e) } catch (e: GoogleJsonResponseException) { when (e.statusCode) { - 401 -> { - Timber.e(e) - Result.failure() - } - 503 -> { - Timber.e(e) - Result.retry() - } - else -> { - firebase.reportException(e) - Result.retry() - } + 401, 403 -> fail(e) + 503 -> retry(e) + else -> retry(e, report = true) } } catch (e: IOException) { + fail(e, report = true) + } + } + + private fun fail(e: Throwable, report: Boolean = false): Result { + if (report) { + firebase.reportException(e) + } else { + Timber.e(e) + } + return Result.failure() + } + + private fun retry(e: Throwable, report: Boolean = false): Result { + if (report) { firebase.reportException(e) - Result.failure() + } else { + Timber.e(e) } + return Result.retry() } @Throws(IOException::class)