add error handling

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
This commit is contained in:
Marcel Hibbe 2025-07-11 13:24:21 +02:00
parent ed488d6424
commit 65d7203820
No known key found for this signature in database
GPG Key ID: C793F8B59F43CE7B
4 changed files with 30 additions and 13 deletions

View File

@ -1270,7 +1270,7 @@ class ChatActivity :
}
is ChatViewModel.ThreadCreationUiState.Error -> {
Log.e(TAG, "Error when creating thread")
Log.e(TAG, "Error when creating thread", uiState.exception)
Snackbar.make(binding.root, R.string.nc_common_error_sorry, Snackbar.LENGTH_LONG).show()
}
@ -1290,7 +1290,7 @@ class ChatActivity :
}
is ChatViewModel.ThreadRetrieveUiState.Error -> {
Log.e(TAG, "Error when retrieving thread")
Log.e(TAG, "Error when retrieving thread", uiState.exception)
Snackbar.make(binding.root, R.string.nc_common_error_sorry, Snackbar.LENGTH_LONG).show()
}

View File

@ -435,15 +435,23 @@ class ChatViewModel @Inject constructor(
fun createThread(credentials: String, url: String) {
viewModelScope.launch {
val thread = chatNetworkDataSource.createThread(credentials, url)
_threadCreationState.value = ThreadCreationUiState.Success(thread.ocs?.data)
try {
val thread = chatNetworkDataSource.createThread(credentials, url)
_threadCreationState.value = ThreadCreationUiState.Success(thread.ocs?.data)
} catch (exception: Exception) {
_threadCreationState.value = ThreadCreationUiState.Error(exception)
}
}
}
fun getThread(credentials: String, url: String) {
viewModelScope.launch {
val thread = threadsRepository.getThread(credentials, url)
_threadRetrieveState.value = ThreadRetrieveUiState.Success(thread.ocs?.data)
try {
val thread = threadsRepository.getThread(credentials, url)
_threadRetrieveState.value = ThreadRetrieveUiState.Success(thread.ocs?.data)
} catch (exception: Exception) {
_threadRetrieveState.value = ThreadRetrieveUiState.Error(exception)
}
}
}
@ -900,12 +908,12 @@ class ChatViewModel @Inject constructor(
sealed class ThreadCreationUiState {
data object None : ThreadCreationUiState()
data class Success(val thread: ThreadInfo?) : ThreadCreationUiState()
data class Error(val message: String) : ThreadCreationUiState()
data class Error(val exception: Exception) : ThreadCreationUiState()
}
sealed class ThreadRetrieveUiState {
data object None : ThreadRetrieveUiState()
data class Success(val thread: ThreadInfo?) : ThreadRetrieveUiState()
data class Error(val message: String) : ThreadRetrieveUiState()
data class Error(val exception: Exception) : ThreadRetrieveUiState()
}
}

View File

@ -10,6 +10,7 @@ package com.nextcloud.talk.threadsoverview
import android.content.Intent
import android.os.Bundle
import android.text.format.DateUtils
import android.util.Log
import androidx.activity.compose.setContent
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
@ -24,10 +25,13 @@ import androidx.compose.foundation.lazy.items
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.SnackbarHost
import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
@ -41,6 +45,7 @@ import com.nextcloud.talk.activities.BaseActivity
import com.nextcloud.talk.api.NcApi
import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.chat.ChatActivity
import com.nextcloud.talk.chat.ChatActivity.Companion.TAG
import com.nextcloud.talk.components.ColoredStatusBar
import com.nextcloud.talk.components.StandardAppBar
import com.nextcloud.talk.contacts.loadImage
@ -52,7 +57,6 @@ import com.nextcloud.talk.utils.ApiUtils
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_TOKEN
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_THREAD_ID
import javax.inject.Inject
import kotlin.toString
@AutoInjector(NextcloudTalkApplication::class)
class ThreadsOverviewActivity : BaseActivity() {
@ -162,7 +166,8 @@ fun ThreadsOverviewScreen(
)
}
is ThreadsOverviewViewModel.ThreadsListUiState.Error -> {
ErrorView(message = state.message)
Log.e(TAG, "Error when retrieving threads", uiState.exception)
ErrorView(message = stringResource(R.string.nc_common_error_sorry))
}
}
}

View File

@ -43,14 +43,18 @@ class ThreadsOverviewViewModel @Inject constructor(
fun getThreads(credentials: String, url: String) {
viewModelScope.launch {
val threads = threadsRepository.getThreads(credentials, url)
_threadsListState.value = ThreadsListUiState.Success(threads.ocs?.data)
try {
val threads = threadsRepository.getThreads(credentials, url)
_threadsListState.value = ThreadsListUiState.Success(threads.ocs?.data)
} catch (exception: Exception) {
_threadsListState.value = ThreadsListUiState.Error(exception)
}
}
}
sealed class ThreadsListUiState {
data object None : ThreadsListUiState()
data class Success(val threadsList: List<ThreadInfo>?) : ThreadsListUiState()
data class Error(val message: String) : ThreadsListUiState()
data class Error(val exception: Exception) : ThreadsListUiState()
}
}