Skip to content

Commit

Permalink
Handle error message
Browse files Browse the repository at this point in the history
  • Loading branch information
rakuishi committed Jun 10, 2023
1 parent c1c6e69 commit f4a4872
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,10 @@ fun NovelListScreen(

LaunchedEffect(snackbarHostState) {
viewModel.snackbarMessageChannel.receiveAsFlow().collect {
val message = context.getString(it)
snackbarHostState.showSnackbar(message = message)
val message =
if (it.stringResId != null) context.getString(it.stringResId)
else it.string
message?.let { snackbarHostState.showSnackbar(message = it) }
}
}

Expand Down Expand Up @@ -137,7 +139,7 @@ fun NovelListScreen(
Text(
modifier = Modifier
.align(alignment = Alignment.Center)
.padding(bottom = 16.dp),
.padding(all = 16.dp),
text = stringResource(R.string.add_novel_from_fab),
style = MaterialTheme.typography.bodyLarge,
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.rakuishi.nreader.ui.novel_list

import androidx.annotation.StringRes
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf
import androidx.lifecycle.ViewModel
Expand Down Expand Up @@ -30,23 +31,37 @@ class NovelListViewModel(
get() = !isLoading && content?.novelList?.isEmpty() == true
}

data class Message(
@StringRes
val stringResId: Int? = null,
val string: String? = null,
)

var uiState: MutableState<UiState> = mutableStateOf(UiState())
private set
var snackbarMessageChannel = Channel<Int>()
var snackbarMessageChannel = Channel<Message>()
private set

fun fetchNovelList(forceReload: Boolean = false) {
viewModelScope.launch {
val updateNewEpisode = forceReload || uiState.value.content == null
if (updateNewEpisode) uiState.value = uiState.value.copy(isLoading = true)

val novelList = novelRepository.fetchList(skipUpdateNewEpisode = !updateNewEpisode)
val fetchedAt = if (updateNewEpisode) Date() else uiState.value.content?.fetchedAt
uiState.value = uiState.value.copy(
isLoading = false,
error = null,
content = UiState.Content(novelList, fetchedAt)
)
try {
val novelList = novelRepository.fetchList(skipUpdateNewEpisode = !updateNewEpisode)
val fetchedAt = if (updateNewEpisode) Date() else uiState.value.content?.fetchedAt
uiState.value = uiState.value.copy(
isLoading = false,
error = null,
content = UiState.Content(novelList, fetchedAt)
)
} catch (e: Exception) {
uiState.value = uiState.value.copy(
isLoading = false,
error = e,
)
snackbarMessageChannel.send(Message(string = e.message))
}
}
}

Expand All @@ -61,7 +76,7 @@ class NovelListViewModel(
)
)
} else {
snackbarMessageChannel.send(R.string.enter_url_failed)
snackbarMessageChannel.send(Message(stringResId = R.string.enter_url_failed))
}
}
}
Expand All @@ -79,7 +94,7 @@ class NovelListViewModel(

val isSuccess = novelList.none { it.id == novel.id }
if (!isSuccess) {
snackbarMessageChannel.send(R.string.delete_failed)
snackbarMessageChannel.send(Message(stringResId = R.string.delete_failed))
}
}
}
Expand Down

0 comments on commit f4a4872

Please sign in to comment.