mirror of
https://github.com/pachli/pachli-android.git
synced 2024-12-12 17:18:07 +01:00
5aacb02ea0
Previous code assumed server responses would always be JSON, and had no special handling for mis-configured servers that sometimes return HTML; for example, if the server has a bug, or there's a reverse proxy in front of the server issuing DoS-prevention challenges. This could cause errors to show with no useful debugging information. Update `ApiResult` to check the content-type in the response and return one of two new errors if the content-type is missing or wrong. Also include the HTTP code in `ApiResponse` for use elsewhere. Update `ThrowableExtensions` to pull the `error` and optional `description` out of the error body. Update `PachliError` so `formatArgs` can be an array of arbitrary types, not just strings. Update `MediaUploader`; expose the different errors as new `MediaUploaderError` types instead of `Exception` subclasses, and return `Result<V, E>` where appropriate. Update `ComposeViewModel` to use the new `MediaUploaderError` types and create new `PickMediaError` to report issues there, replacing `VideoOrImageException`. Update `ComposeActivity` to use the new error types and show errors until the user dismisses them, so they're better able to see and report problems. Fixes #704.
53 lines
1.6 KiB
Plaintext
53 lines
1.6 KiB
Plaintext
/*
|
|
* Copyright 2023 Pachli Association
|
|
*
|
|
* This file is a part of Pachli.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
|
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
|
|
* License, or (at your option) any later version.
|
|
*
|
|
* Pachli is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
|
|
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
|
* Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along with Pachli; if not,
|
|
* see <http://www.gnu.org/licenses>.
|
|
*/
|
|
|
|
plugins {
|
|
alias(libs.plugins.pachli.android.library)
|
|
alias(libs.plugins.pachli.android.hilt)
|
|
alias(libs.plugins.kotlin.parcelize)
|
|
}
|
|
|
|
android {
|
|
namespace = "app.pachli.core.network"
|
|
|
|
defaultConfig {
|
|
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
implementation(projects.core.common)
|
|
implementation(projects.core.model)
|
|
implementation(projects.core.preferences)
|
|
|
|
implementation(libs.moshi)
|
|
implementation(libs.moshi.adapters)
|
|
ksp(libs.moshi.codegen)
|
|
|
|
implementation(libs.bundles.retrofit)
|
|
implementation(libs.bundles.okhttp)
|
|
api(libs.networkresult.calladapter)
|
|
implementation(libs.semver)
|
|
|
|
testImplementation(libs.mockwebserver)
|
|
testImplementation(libs.bundles.mockito)
|
|
|
|
// ThrowableExtensions uses JSONObject, which is missing from Robolectric.
|
|
// Use the real implementation
|
|
testImplementation(libs.org.json)
|
|
}
|