mirror of
https://github.com/bbara04/Purefin.git
synced 2026-07-24 03:36:51 +00:00
feat(settings): add per-library visibility toggles for home screen
Add a Home Screen Libraries setting group with per-library toggles to control which libraries appear on the home screen. Libraries toggled off are hidden from both phone and TV home screens but remain accessible via the Libraries tab and navigation drawer.
This commit is contained in:
@@ -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,9 +149,14 @@ class AppViewModel @Inject constructor(
|
||||
homeRepository.latestLibraryContent,
|
||||
localMediaRepository.movies,
|
||||
localMediaRepository.series,
|
||||
localMediaRepository.episodes
|
||||
) { libraryMap, moviesMap, seriesMap, episodesMap ->
|
||||
libraryMap.mapValues { (_, items) ->
|
||||
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 {
|
||||
|
||||
@@ -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<List<SettingGroup>> = 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
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user