diff --git a/app/src/main/java/com/futo/circles/core/Constants.kt b/app/src/main/java/com/futo/circles/core/Constants.kt index 7ca9158d64f02ed9cdb6cde4c15e1f9b165e8200..372f118349b31dedfb36d5fa873f299973a2d5a0 100644 --- a/app/src/main/java/com/futo/circles/core/Constants.kt +++ b/app/src/main/java/com/futo/circles/core/Constants.kt @@ -1,4 +1,11 @@ -package com.futo.circles.utils +package com.futo.circles.core const val GROUP_TAG = "social.kombucha.group" -const val DEFAULT_USER_PREFIX = "@notices:" \ No newline at end of file +const val DEFAULT_USER_PREFIX = "@notices:" + + +const val DEFAULT_ERROR_MESSAGE = "Something went wrong" +const val AUTH_EXCEPTION_REASON_KEY = "reason" + +const val PENDING_SESSION_PROPERTY_NAME = "pendingSessionData" +const val CURRENT_SESSION_PROPERTY_NAME = "currentSession" \ No newline at end of file diff --git a/app/src/main/java/com/futo/circles/core/ErrorParser.kt b/app/src/main/java/com/futo/circles/core/ErrorParser.kt new file mode 100644 index 0000000000000000000000000000000000000000..8f945aff12ef47d138689169e9d966c8b32ea9d5 --- /dev/null +++ b/app/src/main/java/com/futo/circles/core/ErrorParser.kt @@ -0,0 +1,26 @@ +package com.futo.circles.core + +import org.json.JSONObject +import org.matrix.android.sdk.api.failure.Failure +import retrofit2.HttpException + +object ErrorParser { + + + fun getErrorMessage(t: Throwable): String = + handleErrorBodyException(t) ?: handleServerException(t) ?: DEFAULT_ERROR_MESSAGE + + + private fun handleErrorBodyException(t: Throwable): String? = + (t as? HttpException)?.response()?.errorBody()?.string()?.let { + try { + JSONObject(it).getString(AUTH_EXCEPTION_REASON_KEY) + } catch (e: Exception) { + null + } + } + + private fun handleServerException(t: Throwable): String? = + (t as? Failure.ServerError)?.error?.message ?: t.message + +} \ No newline at end of file diff --git a/app/src/main/java/com/futo/circles/core/ReflectionUtils.kt b/app/src/main/java/com/futo/circles/core/ReflectionUtils.kt index 59aa786296ce9ebb441b41fef08e9f2c3bfabc48..50931f79a04c896ed432f4e917b96f6a5ecb0c8b 100644 --- a/app/src/main/java/com/futo/circles/core/ReflectionUtils.kt +++ b/app/src/main/java/com/futo/circles/core/ReflectionUtils.kt @@ -1,4 +1,4 @@ -package com.futo.circles.utils +package com.futo.circles.core fun <T : Any> T.getPrivateProperty(variableName: String): Any? { return javaClass.getDeclaredField(variableName).let { field -> diff --git a/app/src/main/java/com/futo/circles/extensions/LiveDataExtensions.kt b/app/src/main/java/com/futo/circles/extensions/LiveDataExtensions.kt index 037a1c64a83b0a4ec2b35dd243793be5c0a25749..f32b7633eb3a4836783012af4678b0e476dcdf44 100644 --- a/app/src/main/java/com/futo/circles/extensions/LiveDataExtensions.kt +++ b/app/src/main/java/com/futo/circles/extensions/LiveDataExtensions.kt @@ -2,9 +2,9 @@ package com.futo.circles.extensions import androidx.fragment.app.Fragment import androidx.lifecycle.LiveData +import com.futo.circles.core.ErrorParser import com.futo.circles.core.HasLoadingState import com.futo.circles.core.SingleEventLiveData -import org.matrix.android.sdk.api.failure.Failure fun <T> SingleEventLiveData<Response<T>>.observeResponse( hasLoadingState: HasLoadingState, @@ -35,8 +35,7 @@ suspend fun <T> createResult(block: suspend () -> T): Response<T> { return try { Response.Success(block()) } catch (t: Throwable) { - val message = (t as? Failure.ServerError)?.error?.message ?: t.message - Response.Error(message ?: "Something went wrong") + Response.Error(ErrorParser.getErrorMessage(t)) } } diff --git a/app/src/main/java/com/futo/circles/extensions/RegistrationWizardExtensions.kt b/app/src/main/java/com/futo/circles/extensions/RegistrationWizardExtensions.kt index c15128010fa5d318253834a8b377345ba4550ed0..839ebb5f0fb12c298869f3138a07cad14a9bcf3a 100644 --- a/app/src/main/java/com/futo/circles/extensions/RegistrationWizardExtensions.kt +++ b/app/src/main/java/com/futo/circles/extensions/RegistrationWizardExtensions.kt @@ -1,8 +1,10 @@ package com.futo.circles.extensions -import com.futo.circles.utils.getPrivateProperty +import com.futo.circles.core.CURRENT_SESSION_PROPERTY_NAME +import com.futo.circles.core.PENDING_SESSION_PROPERTY_NAME +import com.futo.circles.core.getPrivateProperty import org.matrix.android.sdk.api.auth.registration.RegistrationWizard fun RegistrationWizard.getPendingSignUpSessionId() = - getPrivateProperty("pendingSessionData") - ?.getPrivateProperty("currentSession")?.toString() ?: "" \ No newline at end of file + getPrivateProperty(PENDING_SESSION_PROPERTY_NAME) + ?.getPrivateProperty(CURRENT_SESSION_PROPERTY_NAME)?.toString() ?: "" \ No newline at end of file diff --git a/app/src/main/java/com/futo/circles/feature/create_group/data_source/CreateGroupDataSource.kt b/app/src/main/java/com/futo/circles/feature/create_group/data_source/CreateGroupDataSource.kt index 38ae86c6c05cf90cb397e64c88f8b7c8d30c2632..5b41d4ef105f5847208a122d1cf42c0f14ba6b4b 100644 --- a/app/src/main/java/com/futo/circles/feature/create_group/data_source/CreateGroupDataSource.kt +++ b/app/src/main/java/com/futo/circles/feature/create_group/data_source/CreateGroupDataSource.kt @@ -4,7 +4,7 @@ import android.net.Uri import com.futo.circles.extensions.createResult import com.futo.circles.model.UserListItem import com.futo.circles.provider.MatrixSessionProvider -import com.futo.circles.utils.GROUP_TAG +import com.futo.circles.core.GROUP_TAG import org.matrix.android.sdk.api.session.room.model.RoomDirectoryVisibility import org.matrix.android.sdk.api.session.room.model.create.CreateRoomParams import org.matrix.android.sdk.api.session.room.model.create.CreateRoomPreset diff --git a/app/src/main/java/com/futo/circles/feature/groups/GroupsViewModel.kt b/app/src/main/java/com/futo/circles/feature/groups/GroupsViewModel.kt index a8fd123bb8c85b0728c0f5c061c898bee54faf68..0baed56b3ff56307986e15f618bfe359568b246b 100644 --- a/app/src/main/java/com/futo/circles/feature/groups/GroupsViewModel.kt +++ b/app/src/main/java/com/futo/circles/feature/groups/GroupsViewModel.kt @@ -4,7 +4,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.map import com.futo.circles.extensions.toGroupsList import com.futo.circles.provider.MatrixSessionProvider -import com.futo.circles.utils.GROUP_TAG +import com.futo.circles.core.GROUP_TAG import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams diff --git a/app/src/main/java/com/futo/circles/feature/select_users/data_source/SelectUsersDataSource.kt b/app/src/main/java/com/futo/circles/feature/select_users/data_source/SelectUsersDataSource.kt index 4a6a9959ef8ad805f9ada1d851891988ea5e74d2..48ba04c96d25020599beef7a451a9ca6f2c31f35 100644 --- a/app/src/main/java/com/futo/circles/feature/select_users/data_source/SelectUsersDataSource.kt +++ b/app/src/main/java/com/futo/circles/feature/select_users/data_source/SelectUsersDataSource.kt @@ -7,7 +7,7 @@ import com.futo.circles.model.InviteMemberListItem import com.futo.circles.model.NoResultsItem import com.futo.circles.model.UserListItem import com.futo.circles.provider.MatrixSessionProvider -import com.futo.circles.utils.DEFAULT_USER_PREFIX +import com.futo.circles.core.DEFAULT_USER_PREFIX import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.* import org.matrix.android.sdk.api.session.user.model.User