From 3ea89742709b8e63a21f147846c74a52134aeadf Mon Sep 17 00:00:00 2001 From: MUEDSA <7676275+muedsa@users.noreply.github.com> Date: Fri, 10 Nov 2023 13:29:16 +0800 Subject: [PATCH] update: remark episode that have been watched --- .../ui/features/detail/AnimeDetailScreen.kt | 6 +++++- .../agetv/viewmodel/AnimeDetailViewModel.kt | 17 ++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/com/muedsa/agetv/ui/features/detail/AnimeDetailScreen.kt b/app/src/main/kotlin/com/muedsa/agetv/ui/features/detail/AnimeDetailScreen.kt index 4355e8c..72b1499 100644 --- a/app/src/main/kotlin/com/muedsa/agetv/ui/features/detail/AnimeDetailScreen.kt +++ b/app/src/main/kotlin/com/muedsa/agetv/ui/features/detail/AnimeDetailScreen.kt @@ -85,6 +85,7 @@ fun AnimeDetailScreen( val animeDetailLD by viewModel.animeDetailLDSF.collectAsState() val favoriteModel by viewModel.favoriteModelSF.collectAsState() + val progressedEpisodeTitleSet by viewModel.progressedEpisodeTitleSetSF.collectAsState() val danSearchAnimeListLD by viewModel.danSearchAnimeListLDSF.collectAsState() val danAnimeInfoLD by viewModel.danAnimeInfoLDSF.collectAsState() @@ -386,7 +387,10 @@ fun AnimeDetailScreen( && danAnimeInfoLD.data?.episodes!!.size > index ) { Column(horizontalAlignment = Alignment.CenterHorizontally) { - Text(text = item[0]) + Text( + text = if (progressedEpisodeTitleSet.contains(item[0])) + "${item[0]}*" else item[0] + ) Text( text = danAnimeInfoLD.data!!.episodes[index].episodeTitle, style = MaterialTheme.typography.labelSmall diff --git a/app/src/main/kotlin/com/muedsa/agetv/viewmodel/AnimeDetailViewModel.kt b/app/src/main/kotlin/com/muedsa/agetv/viewmodel/AnimeDetailViewModel.kt index c11057c..a236ae1 100644 --- a/app/src/main/kotlin/com/muedsa/agetv/viewmodel/AnimeDetailViewModel.kt +++ b/app/src/main/kotlin/com/muedsa/agetv/viewmodel/AnimeDetailViewModel.kt @@ -11,6 +11,7 @@ import com.muedsa.agetv.model.age.AnimeDetailPageModel import com.muedsa.agetv.model.dandanplay.DanAnimeInfo import com.muedsa.agetv.model.dandanplay.DanSearchAnime import com.muedsa.agetv.repository.AppRepository +import com.muedsa.agetv.room.dao.EpisodeProgressDao import com.muedsa.agetv.room.dao.FavoriteAnimeDao import com.muedsa.agetv.room.model.FavoriteAnimeModel import com.muedsa.uitl.LogUtil @@ -21,6 +22,7 @@ import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch @@ -31,7 +33,8 @@ import javax.inject.Inject class AnimeDetailViewModel @Inject constructor( savedStateHandle: SavedStateHandle, private val repo: AppRepository, - private val favoriteAnimeDao: FavoriteAnimeDao + private val favoriteAnimeDao: FavoriteAnimeDao, + private val episodeProgressDao: EpisodeProgressDao ) : ViewModel() { private val _navAnimeIdFlow = savedStateHandle.getStateFlow(ANIME_ID_SAVED_STATE_KEY, "0") @@ -59,6 +62,18 @@ class AnimeDetailViewModel @Inject constructor( initialValue = null ) + val progressedEpisodeTitleSetSF = animeDetailLDSF.map { animeDetailLD -> + (if (animeDetailLD.type == LazyType.SUCCESS) { + animeDetailLD.data?.video?.id?.let { + episodeProgressDao.getListByAid(it) + } + } else null)?.map { it.title }?.toSet() ?: emptySet() + }.stateIn( + scope = viewModelScope, + started = SharingStarted.WhileSubscribed(5000), + initialValue = emptySet() + ) + private fun animeDetail(aid: Int) { viewModelScope.launch { _animeDetailLDSF.value = LazyData.init()