From a3c9e0a89ea20377b08cd2facce0bdbe6baca4fe Mon Sep 17 00:00:00 2001 From: Shinokuni Date: Sun, 11 Feb 2024 18:48:45 +0100 Subject: [PATCH] Improve error handling when adding a new feed in FeedTab --- .../app/compose/feeds/FeedViewModel.kt | 39 +++++++++++-------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/appcompose/src/main/java/com/readrops/app/compose/feeds/FeedViewModel.kt b/appcompose/src/main/java/com/readrops/app/compose/feeds/FeedViewModel.kt index 20e6d228..d2ca97f6 100644 --- a/appcompose/src/main/java/com/readrops/app/compose/feeds/FeedViewModel.kt +++ b/appcompose/src/main/java/com/readrops/app/compose/feeds/FeedViewModel.kt @@ -21,6 +21,7 @@ import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import org.koin.core.component.KoinComponent import org.koin.core.component.get +import java.net.UnknownHostException @OptIn(ExperimentalCoroutinesApi::class) class FeedViewModel( @@ -161,23 +162,30 @@ class FeedViewModel( } else -> viewModelScope.launch(Dispatchers.IO) { - if (localRSSDataSource.isUrlRSSResource(url)) { - // TODO add support for all account types - repository?.insertNewFeeds(listOf(url)) - - closeDialog() - } else { - val rssUrls = HtmlParser.getFeedLink(url, get()) - - if (rssUrls.isEmpty()) { - _addFeedDialogState.update { - it.copy(error = TextFieldError.NoRSSFeed) - } - } else { + try { + if (localRSSDataSource.isUrlRSSResource(url)) { // TODO add support for all account types - repository?.insertNewFeeds(rssUrls.map { it.url }) + repository?.insertNewFeeds(listOf(url)) closeDialog() + } else { + val rssUrls = HtmlParser.getFeedLink(url, get()) + + if (rssUrls.isEmpty()) { + _addFeedDialogState.update { + it.copy(error = TextFieldError.NoRSSFeed) + } + } else { + // TODO add support for all account types + repository?.insertNewFeeds(rssUrls.map { it.url }) + + closeDialog() + } + } + } catch (e: Exception) { + when (e) { + is UnknownHostException -> _addFeedDialogState.update { it.copy(error = TextFieldError.UnreachableUrl) } + else -> _addFeedDialogState.update { it.copy(error = TextFieldError.NoRSSFeed) } } } } @@ -303,5 +311,4 @@ class FeedViewModel( } // add/update folder -} - +} \ No newline at end of file