From b61a6adeb76cd49805f6fa9d731b55e7643204b6 Mon Sep 17 00:00:00 2001 From: Roshan Varughese <40583749+Animeboynz@users.noreply.github.com> Date: Sat, 28 Sep 2024 14:28:39 +1200 Subject: [PATCH] Move to ScreenModel --- .../mihon/feature/upcoming/UpcomingScreenContent.kt | 10 ++++++---- .../mihon/feature/upcoming/UpcomingScreenModel.kt | 11 ++++++++--- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/mihon/feature/upcoming/UpcomingScreenContent.kt b/app/src/main/java/mihon/feature/upcoming/UpcomingScreenContent.kt index 32090f2fa..64ef64360 100644 --- a/app/src/main/java/mihon/feature/upcoming/UpcomingScreenContent.kt +++ b/app/src/main/java/mihon/feature/upcoming/UpcomingScreenContent.kt @@ -72,6 +72,7 @@ fun UpcomingScreenContent( setSelectedYearMonth = setSelectedYearMonth, onClickDay = { onClickDay(it, 0) }, onClickUpcoming = onClickUpcoming, + mangaCountMap = state.mangaCountMap, ) } else { UpcomingScreenSmallImpl( @@ -83,6 +84,7 @@ fun UpcomingScreenContent( setSelectedYearMonth = setSelectedYearMonth, onClickDay = { onClickDay(it, 1) }, onClickUpcoming = onClickUpcoming, + mangaCountMap = state.mangaCountMap, ) } } @@ -144,6 +146,7 @@ private fun UpcomingScreenSmallImpl( setSelectedYearMonth: (YearMonth) -> Unit, onClickDay: (LocalDate) -> Unit, onClickUpcoming: (manga: Manga) -> Unit, + mangaCountMap: ImmutableMap, ) { FastScrollLazyColumn( contentPadding = paddingValues, @@ -175,8 +178,7 @@ private fun UpcomingScreenSmallImpl( ) } is UpcomingUIModel.Header -> { - val mangaCount = items.filterIsInstance() - .count { it.manga.expectedNextUpdate?.toLocalDate() == item.date } + val mangaCount = mangaCountMap[item.date] ?: 0 DateHeading( date = item.date, @@ -198,6 +200,7 @@ private fun UpcomingScreenLargeImpl( setSelectedYearMonth: (YearMonth) -> Unit, onClickDay: (LocalDate) -> Unit, onClickUpcoming: (manga: Manga) -> Unit, + mangaCountMap: ImmutableMap, ) { TwoPanelBox( modifier = Modifier.padding(paddingValues), @@ -229,8 +232,7 @@ private fun UpcomingScreenLargeImpl( ) } is UpcomingUIModel.Header -> { - val mangaCount = items.filterIsInstance() - .count { it.manga.expectedNextUpdate?.toLocalDate() == item.date } + val mangaCount = mangaCountMap[item.date] ?: 0 DateHeading( date = item.date, diff --git a/app/src/main/java/mihon/feature/upcoming/UpcomingScreenModel.kt b/app/src/main/java/mihon/feature/upcoming/UpcomingScreenModel.kt index b404a7f96..0992448a0 100644 --- a/app/src/main/java/mihon/feature/upcoming/UpcomingScreenModel.kt +++ b/app/src/main/java/mihon/feature/upcoming/UpcomingScreenModel.kt @@ -28,13 +28,17 @@ class UpcomingScreenModel( init { screenModelScope.launch { - getUpcomingManga.subscribe().collectLatest { + getUpcomingManga.subscribe().collectLatest { mangaList -> mutableState.update { state -> - val upcomingItems = it.toUpcomingUIModels() + val upcomingItems = mangaList.toUpcomingUIModels() + val mangaCountMap = mangaList.groupBy { it.expectedNextUpdate?.toLocalDate() ?: LocalDate.MAX } + .mapValues { it.value.size } + .toImmutableMap() state.copy( items = upcomingItems, - events = it.toEvents(), + events = mangaList.toEvents(), headerIndexes = upcomingItems.getHeaderIndexes(), + mangaCountMap = mangaCountMap ) } } @@ -83,5 +87,6 @@ class UpcomingScreenModel( val items: ImmutableList = persistentListOf(), val events: ImmutableMap = persistentMapOf(), val headerIndexes: ImmutableMap = persistentMapOf(), + val mangaCountMap: ImmutableMap = persistentMapOf(), ) }