From 96d5f31d82a84a311df037044a4e0d170d7133f3 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 23 Jan 2026 17:39:23 +0500 Subject: [PATCH] Updated on 2026-08-14 --- .../news/repository/DefaultNewsRepository.kt | 7 +++-- .../domain/news/repository/NewsRepository.kt | 2 +- .../domain/news/usecase/GetNewsUseCase.kt | 12 ++++---- .../details/MarketsTokenDetailsModel.kt | 30 +++++++++---------- 4 files changed, 25 insertions(+), 26 deletions(-) diff --git a/data/news/src/main/java/com/tangem/data/news/repository/DefaultNewsRepository.kt b/data/news/src/main/java/com/tangem/data/news/repository/DefaultNewsRepository.kt index ec3ad96779..6a43110f51 100644 --- a/data/news/src/main/java/com/tangem/data/news/repository/DefaultNewsRepository.kt +++ b/data/news/src/main/java/com/tangem/data/news/repository/DefaultNewsRepository.kt @@ -58,7 +58,7 @@ internal class DefaultNewsRepository( return updateViewedStatusForNewsBatch(newsBatchFlow, context.coroutineScope) } - override fun getNews(config: NewsListConfig, limit: Int): Flow> { + override fun getNews(config: NewsListConfig, limit: Int): Flow>> { return flow { val items = newsApi.getNews( page = FIRST_PAGE, @@ -73,7 +73,7 @@ internal class DefaultNewsRepository( }, onError = { error -> Timber.e(error, "Failed to get list of news") - emptyList() + throw error }, ) @@ -85,8 +85,9 @@ internal class DefaultNewsRepository( articlesToUpdate.map { article -> val isViewed = viewedFlags[article.id] == true article.copy(viewed = isViewed) - }.sortedBy { it.viewed } + }.sortedBy { it.viewed }.right() } + .catch { it.left() } } override fun observeDetailedArticles(): Flow> { diff --git a/domain/news/src/main/java/com/tangem/domain/news/repository/NewsRepository.kt b/domain/news/src/main/java/com/tangem/domain/news/repository/NewsRepository.kt index 44266d3935..d122f330f6 100644 --- a/domain/news/src/main/java/com/tangem/domain/news/repository/NewsRepository.kt +++ b/domain/news/src/main/java/com/tangem/domain/news/repository/NewsRepository.kt @@ -28,7 +28,7 @@ interface NewsRepository { * * @param config config for getting news list */ - fun getNews(config: NewsListConfig, limit: Int): Flow> + fun getNews(config: NewsListConfig, limit: Int): Flow>> /** * Observes cached detailed articles. diff --git a/domain/news/src/main/java/com/tangem/domain/news/usecase/GetNewsUseCase.kt b/domain/news/src/main/java/com/tangem/domain/news/usecase/GetNewsUseCase.kt index adaa426bfd..66b61406a3 100644 --- a/domain/news/src/main/java/com/tangem/domain/news/usecase/GetNewsUseCase.kt +++ b/domain/news/src/main/java/com/tangem/domain/news/usecase/GetNewsUseCase.kt @@ -8,11 +8,9 @@ import kotlinx.coroutines.flow.Flow class GetNewsUseCase(private val repository: NewsRepository) { - fun getNews(limit: Int, newsListConfig: NewsListConfig): Either>> = - Either.catch { - repository.getNews( - config = newsListConfig, - limit = limit, - ) - } + fun getNews(limit: Int, newsListConfig: NewsListConfig): Flow>> = + repository.getNews( + config = newsListConfig, + limit = limit, + ) } \ No newline at end of file diff --git a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/market/details/MarketsTokenDetailsModel.kt b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/market/details/MarketsTokenDetailsModel.kt index f1c5bb2319..b3675953a2 100644 --- a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/market/details/MarketsTokenDetailsModel.kt +++ b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/model/market/details/MarketsTokenDetailsModel.kt @@ -39,6 +39,7 @@ import com.tangem.domain.wallets.usecase.GetWalletsUseCase import com.tangem.features.feed.components.market.details.DefaultMarketsTokenDetailsComponent import com.tangem.features.feed.components.market.details.analytics.MarketTokenAnalyticsEvent import com.tangem.features.feed.impl.R +import com.tangem.features.feed.model.converter.ShortArticleToArticleConfigUMConverter import com.tangem.features.feed.model.market.details.analytics.MarketDetailsAnalyticsEvent import com.tangem.features.feed.model.market.details.converter.DescriptionConverter import com.tangem.features.feed.model.market.details.converter.ExchangeItemStateConverter @@ -46,7 +47,6 @@ import com.tangem.features.feed.model.market.details.converter.TokenMarketInfoCo import com.tangem.features.feed.model.market.details.formatter.* import com.tangem.features.feed.model.market.details.state.QuotesStateUpdater import com.tangem.features.feed.model.market.details.state.TokenNetworksState -import com.tangem.features.feed.model.converter.ShortArticleToArticleConfigUMConverter import com.tangem.features.feed.ui.market.detailed.state.ExchangesBottomSheetContent import com.tangem.features.feed.ui.market.detailed.state.MarketsTokenDetailsUM import com.tangem.lib.crypto.BlockchainUtils @@ -313,8 +313,8 @@ internal class MarketsTokenDetailsModel @Inject constructor( snapshot = null, tokenIds = listOf(params.token.id.value), ), - ).onRight { listOfArticles -> - listOfArticles.collect { articles -> + ).collect { result -> + result.onRight { articles -> state.update { marketsTokenDetailsUM -> val relatedNews = shortArticleToArticleConfigUMConverter.convert(articles) marketsTokenDetailsUM.copy( @@ -343,19 +343,19 @@ internal class MarketsTokenDetailsModel @Inject constructor( ), ) } + }.onLeft { throwable -> + val (code, message) = if (throwable is ApiResponseError.HttpException) { + throwable.code.numericCode to throwable.message.orEmpty() + } else { + null to "" + } + analyticsEventHandler.send( + MarketTokenAnalyticsEvent.TokenNewsLoadError( + code = code, + message = message, + ), + ) } - }.onLeft { throwable -> - val (code, message) = if (throwable is ApiResponseError.HttpException) { - throwable.code.numericCode to throwable.message.orEmpty() - } else { - null to "" - } - analyticsEventHandler.send( - MarketTokenAnalyticsEvent.TokenNewsLoadError( - code = code, - message = message, - ), - ) } } }