@@ -38,7 +38,9 @@ import com.nononsenseapps.feeder.ui.compose.feed.FeedListItem
38
38
import com.nononsenseapps.feeder.ui.compose.feed.FeedOrTag
39
39
import com.nononsenseapps.feeder.ui.compose.navdrawer.DrawerItemWithUnreadCount
40
40
import com.nononsenseapps.feeder.ui.compose.text.htmlToAnnotatedString
41
+ import com.nononsenseapps.feeder.util.Either
41
42
import com.nononsenseapps.feeder.util.FilePathProvider
43
+ import java.io.FileNotFoundException
42
44
import java.time.Instant
43
45
import java.time.ZonedDateTime
44
46
import java.util.Locale
@@ -396,7 +398,14 @@ class FeedArticleViewModel(
396
398
fun ttsPlay () {
397
399
viewModelScope.launch(Dispatchers .IO ) {
398
400
val fullText = when (viewState.value.textToDisplay) {
399
- TextToDisplay .DEFAULT -> {
401
+ TextToDisplay .DEFAULT -> Either .catching(
402
+ onCatch = {
403
+ when (it) {
404
+ is FileNotFoundException -> TTSFileNotFound
405
+ else -> TTSUnknownError
406
+ }
407
+ },
408
+ ) {
400
409
blobInputStream(viewState.value.articleId, filePathProvider.articleDir).use {
401
410
htmlToAnnotatedString(
402
411
inputStream = it,
@@ -405,7 +414,14 @@ class FeedArticleViewModel(
405
414
}
406
415
}
407
416
408
- TextToDisplay .FULLTEXT -> {
417
+ TextToDisplay .FULLTEXT -> Either .catching(
418
+ onCatch = {
419
+ when (it) {
420
+ is FileNotFoundException -> TTSFileNotFound
421
+ else -> TTSUnknownError
422
+ }
423
+ },
424
+ ) {
409
425
blobFullInputStream(
410
426
viewState.value.articleId,
411
427
filePathProvider.fullArticleDir,
@@ -422,14 +438,13 @@ class FeedArticleViewModel(
422
438
TextToDisplay .FAILED_MISSING_BODY ,
423
439
TextToDisplay .FAILED_MISSING_LINK ,
424
440
TextToDisplay .FAILED_NOT_HTML ,
425
- -> null
441
+ -> Either . Left ( TTSUnknownError )
426
442
}
427
443
428
- if (fullText == null ) {
429
- // TODO show error some message
430
- } else {
444
+ // TODO show error some message
445
+ fullText.onRight {
431
446
ttsStateHolder.tts(
432
- textArray = fullText ,
447
+ textArray = it ,
433
448
useDetectLanguage = viewState.value.useDetectLanguage,
434
449
)
435
450
}
@@ -583,3 +598,9 @@ data class FeedArticleScreenViewState(
583
598
override val filter : FeedListFilter = emptyFeedListFilter,
584
599
val isArticleOpen : Boolean = false ,
585
600
) : FeedScreenViewState, ArticleScreenViewState
601
+
602
+ sealed class TSSError
603
+
604
+ object TTSFileNotFound : TSSError()
605
+
606
+ object TTSUnknownError : TSSError()
0 commit comments