diff --git a/core/src/main/java/hu/bbara/purefin/core/feature/browse/home/AppViewModel.kt b/core/src/main/java/hu/bbara/purefin/core/feature/browse/home/AppViewModel.kt index 94d198f6..e73761e0 100644 --- a/core/src/main/java/hu/bbara/purefin/core/feature/browse/home/AppViewModel.kt +++ b/core/src/main/java/hu/bbara/purefin/core/feature/browse/home/AppViewModel.kt @@ -9,6 +9,7 @@ import hu.bbara.purefin.core.data.NetworkMonitor import hu.bbara.purefin.core.data.UserSessionRepository import hu.bbara.purefin.core.download.MediaDownloadController import hu.bbara.purefin.core.jellyfin.JellyfinMediaMetadataUpdater +import hu.bbara.purefin.core.settings.SettingsRepository import hu.bbara.purefin.core.model.EpisodeUiModel import hu.bbara.purefin.core.model.LibraryUiModel import hu.bbara.purefin.core.model.MediaUiModel @@ -41,6 +42,7 @@ class AppViewModel @Inject constructor( private val jellyfinMediaMetadataUpdater: JellyfinMediaMetadataUpdater, private val navigationManager: NavigationManager, private val mediaDownloadManager: MediaDownloadController, + private val settingsRepository: SettingsRepository, networkMonitor: NetworkMonitor, ) : ViewModel() { @@ -147,26 +149,31 @@ class AppViewModel @Inject constructor( homeRepository.latestLibraryContent, localMediaRepository.movies, localMediaRepository.series, - localMediaRepository.episodes - ) { libraryMap, moviesMap, seriesMap, episodesMap -> - libraryMap.mapValues { (_, items) -> - items.mapNotNull { media -> - when (media) { - is Media.MovieMedia -> moviesMap[media.movieId]?.let { - MovieUiModel(movie = it) + localMediaRepository.episodes, + settingsRepository.settings, + ) { libraryMap, moviesMap, seriesMap, episodesMap, settings -> + libraryMap + .filter { (libraryId, _) -> + settings.booleanSettings["home_library_visible_$libraryId"] ?: true + } + .mapValues { (_, items) -> + items.mapNotNull { media -> + when (media) { + is Media.MovieMedia -> moviesMap[media.movieId]?.let { + MovieUiModel(movie = it) + } + is Media.EpisodeMedia -> episodesMap[media.episodeId]?.let { + EpisodeUiModel(episode = it) + } + is Media.SeriesMedia -> seriesMap[media.seriesId]?.let { + SeriesUiModel(series = it) + } + is Media.SeasonMedia -> seriesMap[media.seriesId]?.let { + SeriesUiModel(series = it) + } } - is Media.EpisodeMedia -> episodesMap[media.episodeId]?.let { - EpisodeUiModel(episode = it) - } - is Media.SeriesMedia -> seriesMap[media.seriesId]?.let { - SeriesUiModel(series = it) - } - is Media.SeasonMedia -> seriesMap[media.seriesId]?.let { - SeriesUiModel(series = it) - } - } - }.distinctBy { it.id } - } + }.distinctBy { it.id } + } }.stateIn( scope = viewModelScope, started = SharingStarted.WhileSubscribed(5_000), diff --git a/core/src/main/java/hu/bbara/purefin/core/feature/settings/HomeLibrarySettingsProvider.kt b/core/src/main/java/hu/bbara/purefin/core/feature/settings/HomeLibrarySettingsProvider.kt new file mode 100644 index 00000000..abaf738e --- /dev/null +++ b/core/src/main/java/hu/bbara/purefin/core/feature/settings/HomeLibrarySettingsProvider.kt @@ -0,0 +1,35 @@ +package hu.bbara.purefin.core.feature.settings + +import hu.bbara.purefin.core.data.HomeRepository +import hu.bbara.purefin.core.settings.BooleanSetting +import hu.bbara.purefin.core.settings.SettingGroup +import hu.bbara.purefin.core.settings.SettingsGroupProvider +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class HomeLibrarySettingsProvider @Inject constructor( + private val homeRepository: HomeRepository, +) : SettingsGroupProvider { + + override val settingGroups: Flow> = homeRepository.libraries.map { libraries -> + if (libraries.isEmpty()) return@map emptyList() + + val options = libraries.map { library -> + BooleanSetting( + key = "home_library_visible_${library.id}", + title = library.name, + defaultValue = true + ) + } + + listOf( + SettingGroup( + title = "Home Screen Libraries", + options = options + ) + ) + } +} diff --git a/core/src/main/java/hu/bbara/purefin/core/settings/SettingsGroupProviderModule.kt b/core/src/main/java/hu/bbara/purefin/core/settings/SettingsGroupProviderModule.kt index 75a7078f..475f7492 100644 --- a/core/src/main/java/hu/bbara/purefin/core/settings/SettingsGroupProviderModule.kt +++ b/core/src/main/java/hu/bbara/purefin/core/settings/SettingsGroupProviderModule.kt @@ -5,6 +5,7 @@ import dagger.Module import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent import dagger.multibindings.IntoSet +import hu.bbara.purefin.core.feature.settings.HomeLibrarySettingsProvider import hu.bbara.purefin.core.feature.settings.LogoutSettingsProvider import hu.bbara.purefin.core.feature.update.AppUpdateController @@ -16,6 +17,10 @@ abstract class SettingsGroupProviderModule { @IntoSet abstract fun bindAppUpdateSettingsProvider(impl: AppUpdateController): SettingsGroupProvider + @Binds + @IntoSet + abstract fun bindHomeLibrarySettingsProvider(impl: HomeLibrarySettingsProvider): SettingsGroupProvider + @Binds @IntoSet abstract fun bindLogoutSettingsProvider(impl: LogoutSettingsProvider): SettingsGroupProvider