@@ -21,14 +21,14 @@ import androidx.lifecycle.viewModelScope
2121import com.example.jetcaster.core.data.database.model.EpisodeToPodcast
2222import com.example.jetcaster.core.data.database.model.Podcast
2323import com.example.jetcaster.core.data.database.model.PodcastWithExtraInfo
24- import com.example.jetcaster.core.data.database.model.toPlayerEpisode
2524import com.example.jetcaster.core.data.domain.FilterableCategoriesUseCase
2625import com.example.jetcaster.core.data.domain.PodcastCategoryFilterUseCase
2726import com.example.jetcaster.core.data.repository.EpisodeStore
2827import com.example.jetcaster.core.data.repository.PodcastStore
2928import com.example.jetcaster.core.data.repository.PodcastsRepository
3029import com.example.jetcaster.core.model.CategoryInfo
3130import com.example.jetcaster.core.model.FilterableCategoriesModel
31+ import com.example.jetcaster.core.model.PlayerEpisode
3232import com.example.jetcaster.core.model.PodcastCategoryFilterResult
3333import com.example.jetcaster.core.player.EpisodePlayer
3434import com.example.jetcaster.core.util.combine
@@ -38,7 +38,9 @@ import kotlinx.collections.immutable.toPersistentList
3838import kotlinx.coroutines.ExperimentalCoroutinesApi
3939import kotlinx.coroutines.flow.MutableStateFlow
4040import kotlinx.coroutines.flow.SharingStarted
41+ import kotlinx.coroutines.flow.combine
4142import kotlinx.coroutines.flow.flatMapLatest
43+ import kotlinx.coroutines.flow.map
4244import kotlinx.coroutines.flow.stateIn
4345import kotlinx.coroutines.launch
4446
@@ -55,9 +57,7 @@ class HomeViewModel @Inject constructor(
5557 // Holds our currently selected podcast in the library
5658 private val selectedLibraryPodcast = MutableStateFlow <Podcast ?>(null )
5759 // Holds our currently selected home category
58- private val selectedHomeCategory = MutableStateFlow (HomeCategory .Discover )
59- // Holds the currently available home categories
60- private val homeCategories = MutableStateFlow (HomeCategory .entries)
60+ private val selectedHomeCategory = MutableStateFlow (HomeCategory .Library )
6161 // Holds our currently selected category
6262 private val _selectedCategory = MutableStateFlow <CategoryInfo ?>(null )
6363
@@ -67,7 +67,6 @@ class HomeViewModel @Inject constructor(
6767 // Combines the latest value from each of the flows, allowing us to generate a
6868 // view state instance which only contains the latest values.
6969 val uiState = combine(
70- homeCategories,
7170 selectedHomeCategory,
7271 podcastStore.followedPodcastsSortedByLastEpisode(limit = 10 ),
7372 refreshing,
@@ -82,27 +81,31 @@ class HomeViewModel @Inject constructor(
8281 podcastUri = it?.uri ? : " " ,
8382 limit = 20
8483 )
84+ },
85+ episodePlayer.playerState.map {
86+ it.queue
8587 }
86- ) { homeCategories,
87- homeCategory,
88- podcasts,
89- refreshing,
90- filterableCategories,
91- podcastCategoryFilterResult,
92- libraryEpisodes ->
88+ ) {
89+ homeCategory,
90+ podcasts,
91+ refreshing,
92+ filterableCategories,
93+ podcastCategoryFilterResult,
94+ libraryEpisodes,
95+ queue ->
9396
9497 _selectedCategory .value = filterableCategories.selectedCategory
9598
9699 selectedHomeCategory.value = homeCategory
97100
98101 HomeViewState (
99- homeCategories = homeCategories,
100102 selectedHomeCategory = homeCategory,
101103 featuredPodcasts = podcasts.toPersistentList(),
102104 refreshing = refreshing,
103105 filterableCategoriesModel = filterableCategories,
104106 podcastCategoryFilterResult = podcastCategoryFilterResult,
105107 libraryEpisodes = libraryEpisodes,
108+ queue = queue,
106109 errorMessage = null , /* TODO */
107110 )
108111 }.stateIn(viewModelScope, SharingStarted .Lazily , initialValue = HomeViewState ())
@@ -130,27 +133,19 @@ class HomeViewModel @Inject constructor(
130133 podcastStore.togglePodcastFollowed(podcastUri)
131134 }
132135 }
133-
134- fun onLibraryPodcastSelected (podcast : Podcast ? ) {
135- selectedLibraryPodcast.value = podcast
136- }
137-
138- fun onQueuePodcast (episodeToPodcast : EpisodeToPodcast ) {
139- episodePlayer.addToQueue(episodeToPodcast.toPlayerEpisode())
140- }
141136}
142137
143138enum class HomeCategory {
144- Library , Discover
139+ Library ,
145140}
146141
147142data class HomeViewState (
148143 val featuredPodcasts : List <PodcastWithExtraInfo > = listOf(),
149144 val refreshing : Boolean = false ,
150- val selectedHomeCategory : HomeCategory = HomeCategory .Discover ,
151- val homeCategories : List <HomeCategory > = emptyList(),
145+ val selectedHomeCategory : HomeCategory = HomeCategory .Library ,
152146 val filterableCategoriesModel : FilterableCategoriesModel = FilterableCategoriesModel (),
153147 val podcastCategoryFilterResult : PodcastCategoryFilterResult = PodcastCategoryFilterResult (),
154148 val libraryEpisodes : List <EpisodeToPodcast > = emptyList(),
149+ val queue : List <PlayerEpisode > = emptyList(),
155150 val errorMessage : String? = null
156151)
0 commit comments