diff --git a/data/src/main/java/hu/bbara/purefin/data/EpisodeSeriesLookup.kt b/data/src/main/java/hu/bbara/purefin/data/EpisodeSeriesLookup.kt deleted file mode 100644 index 2ed26af7..00000000 --- a/data/src/main/java/hu/bbara/purefin/data/EpisodeSeriesLookup.kt +++ /dev/null @@ -1,7 +0,0 @@ -package hu.bbara.purefin.data - -import java.util.UUID - -interface EpisodeSeriesLookup { - suspend fun preferenceKeyFor(mediaId: UUID): String -} diff --git a/data/src/main/java/hu/bbara/purefin/data/MediaCatalogReader.kt b/data/src/main/java/hu/bbara/purefin/data/MediaCatalogReader.kt index 34f60ee5..73160c61 100644 --- a/data/src/main/java/hu/bbara/purefin/data/MediaCatalogReader.kt +++ b/data/src/main/java/hu/bbara/purefin/data/MediaCatalogReader.kt @@ -3,10 +3,11 @@ package hu.bbara.purefin.data import hu.bbara.purefin.model.Episode import hu.bbara.purefin.model.Movie import hu.bbara.purefin.model.Series -import java.util.UUID import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.StateFlow +import java.util.UUID +//TODO rename MediaRepository interface MediaCatalogReader { val movies: StateFlow> val series: StateFlow> diff --git a/data/src/main/java/hu/bbara/purefin/data/catalog/DefaultEpisodeSeriesLookup.kt b/data/src/main/java/hu/bbara/purefin/data/catalog/DefaultEpisodeSeriesLookup.kt deleted file mode 100644 index 7e4c9a28..00000000 --- a/data/src/main/java/hu/bbara/purefin/data/catalog/DefaultEpisodeSeriesLookup.kt +++ /dev/null @@ -1,16 +0,0 @@ -package hu.bbara.purefin.data.catalog - -import hu.bbara.purefin.data.EpisodeSeriesLookup -import hu.bbara.purefin.data.MediaCatalogReader -import java.util.UUID -import javax.inject.Inject -import javax.inject.Singleton - -@Singleton -class DefaultEpisodeSeriesLookup @Inject constructor( - private val mediaCatalogReader: MediaCatalogReader, -) : EpisodeSeriesLookup { - override suspend fun preferenceKeyFor(mediaId: UUID): String { - return mediaCatalogReader.episodes.value[mediaId]?.seriesId?.toString() ?: mediaId.toString() - } -} diff --git a/data/src/main/java/hu/bbara/purefin/data/module/MediaRepositoryModule.kt b/data/src/main/java/hu/bbara/purefin/data/module/MediaRepositoryModule.kt new file mode 100644 index 00000000..cfcfed12 --- /dev/null +++ b/data/src/main/java/hu/bbara/purefin/data/module/MediaRepositoryModule.kt @@ -0,0 +1,16 @@ +package hu.bbara.purefin.data.module + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import hu.bbara.purefin.data.OfflineCatalogReader +import hu.bbara.purefin.data.catalog.OfflineMediaRepository + +@Module +@InstallIn(SingletonComponent::class) +abstract class MediaRepositoryModule { + + @Binds + abstract fun bindOfflineCatalogReader(impl: OfflineMediaRepository): OfflineCatalogReader +} \ No newline at end of file diff --git a/domain/src/main/java/hu/bbara/purefin/core/player/viewmodel/PlayerViewModel.kt b/domain/src/main/java/hu/bbara/purefin/core/player/viewmodel/PlayerViewModel.kt index 80077b09..3f8e1da5 100644 --- a/domain/src/main/java/hu/bbara/purefin/core/player/viewmodel/PlayerViewModel.kt +++ b/domain/src/main/java/hu/bbara/purefin/core/player/viewmodel/PlayerViewModel.kt @@ -4,14 +4,13 @@ import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import hu.bbara.purefin.data.EpisodeSeriesLookup -import hu.bbara.purefin.data.PlayableMediaRepository import hu.bbara.purefin.core.player.manager.PlayerManager import hu.bbara.purefin.core.player.manager.ProgressManager import hu.bbara.purefin.core.player.model.MediaContext import hu.bbara.purefin.core.player.model.PlayerUiState import hu.bbara.purefin.core.player.model.TrackOption import hu.bbara.purefin.core.player.preference.TrackPreferencesRepository +import hu.bbara.purefin.data.PlayableMediaRepository import kotlinx.coroutines.Job import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow @@ -30,7 +29,6 @@ class PlayerViewModel @Inject constructor( private val playerManager: PlayerManager, private val playableMediaRepository: PlayableMediaRepository, private val trackPreferencesRepository: TrackPreferencesRepository, - private val episodeSeriesLookup: EpisodeSeriesLookup, private val progressManager: ProgressManager, ) : ViewModel() { companion object { @@ -156,7 +154,10 @@ class PlayerViewModel @Inject constructor( if (result != null) { val (mediaItem, resumePositionMs) = result - val preferenceKey = episodeSeriesLookup.preferenceKeyFor(uuid) + + // TODO use CatalogReader for this instead of episodeSeriesLookup +// val preferenceKey = episodeSeriesLookup.preferenceKeyFor(uuid) + val preferenceKey = uuid.toString() val preferences = trackPreferencesRepository.getMediaPreferences(preferenceKey).first() val mediaSegments = playableMediaRepository.getMediaSegments(uuid) diff --git a/data/src/main/java/hu/bbara/purefin/data/catalog/CompositeMediaRepository.kt b/domain/src/main/java/hu/bbara/purefin/data/CompositeMediaRepository.kt similarity index 68% rename from data/src/main/java/hu/bbara/purefin/data/catalog/CompositeMediaRepository.kt rename to domain/src/main/java/hu/bbara/purefin/data/CompositeMediaRepository.kt index 1e2e2bdb..c4388ccc 100644 --- a/data/src/main/java/hu/bbara/purefin/data/catalog/CompositeMediaRepository.kt +++ b/domain/src/main/java/hu/bbara/purefin/data/CompositeMediaRepository.kt @@ -1,8 +1,7 @@ -package hu.bbara.purefin.data.catalog +package hu.bbara.purefin.data -import hu.bbara.purefin.data.MediaCatalogReader -import hu.bbara.purefin.data.MediaProgressWriter -import hu.bbara.purefin.data.NetworkMonitor +import hu.bbara.purefin.data.catalog.InMemoryMediaRepository +import hu.bbara.purefin.data.catalog.OfflineMediaRepository import hu.bbara.purefin.model.Episode import hu.bbara.purefin.model.Movie import hu.bbara.purefin.model.Series @@ -13,7 +12,6 @@ import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.stateIn @@ -26,34 +24,31 @@ import javax.inject.Singleton class CompositeMediaRepository @Inject constructor( private val offlineRepository: OfflineMediaRepository, private val onlineRepository: InMemoryMediaRepository, - private val networkMonitor: NetworkMonitor, ) : MediaCatalogReader, MediaProgressWriter { private val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO) - private val activeRepository: Flow = - networkMonitor.isOnline.flatMapLatest { online -> - flowOf(if (online) onlineRepository else offlineRepository) - } + // TODO move this into the domain layer and there you can use NetworkMonitor. Data should be free of android stuff. + private val activeRepository: Flow = flowOf(onlineRepository) override val movies: StateFlow> = activeRepository .flatMapLatest { it.movies } - .stateIn(scope, SharingStarted.Eagerly, emptyMap()) + .stateIn(scope, SharingStarted.Companion.Eagerly, emptyMap()) override val series: StateFlow> = activeRepository .flatMapLatest { it.series } - .stateIn(scope, SharingStarted.Eagerly, emptyMap()) + .stateIn(scope, SharingStarted.Companion.Eagerly, emptyMap()) override val episodes: StateFlow> = activeRepository .flatMapLatest { it.episodes } - .stateIn(scope, SharingStarted.Eagerly, emptyMap()) + .stateIn(scope, SharingStarted.Companion.Eagerly, emptyMap()) override fun observeSeriesWithContent(seriesId: UUID): Flow { return activeRepository.flatMapLatest { it.observeSeriesWithContent(seriesId) } } override suspend fun updateWatchProgress(mediaId: UUID, positionMs: Long, durationMs: Long) { - val repository = if (networkMonitor.isOnline.first()) onlineRepository else offlineRepository + val repository = onlineRepository repository.updateWatchProgress(mediaId, positionMs, durationMs) } -} +} \ No newline at end of file diff --git a/data/src/main/java/hu/bbara/purefin/data/catalog/MediaRepositoryModule.kt b/domain/src/main/java/hu/bbara/purefin/module/RepositoryModule.kt similarity index 51% rename from data/src/main/java/hu/bbara/purefin/data/catalog/MediaRepositoryModule.kt rename to domain/src/main/java/hu/bbara/purefin/module/RepositoryModule.kt index 64f7fc54..59907881 100644 --- a/data/src/main/java/hu/bbara/purefin/data/catalog/MediaRepositoryModule.kt +++ b/domain/src/main/java/hu/bbara/purefin/module/RepositoryModule.kt @@ -1,18 +1,19 @@ -package hu.bbara.purefin.data.catalog +package hu.bbara.purefin.module import dagger.Binds import dagger.Module import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent -import hu.bbara.purefin.data.EpisodeSeriesLookup +import hu.bbara.purefin.data.CompositeMediaRepository import hu.bbara.purefin.data.HomeRepository import hu.bbara.purefin.data.MediaCatalogReader import hu.bbara.purefin.data.MediaProgressWriter -import hu.bbara.purefin.data.OfflineCatalogReader +import hu.bbara.purefin.data.catalog.InMemoryAppContentRepository + @Module @InstallIn(SingletonComponent::class) -abstract class MediaRepositoryModule { +abstract class RepositoryModule { @Binds abstract fun bindHomeRepository(impl: InMemoryAppContentRepository): HomeRepository @@ -21,11 +22,5 @@ abstract class MediaRepositoryModule { abstract fun bindMediaCatalogReader(impl: CompositeMediaRepository): MediaCatalogReader @Binds - abstract fun bindMediaProgressWriter(impl: CompositeMediaRepository): MediaProgressWriter - - @Binds - abstract fun bindOfflineCatalogReader(impl: OfflineMediaRepository): OfflineCatalogReader - - @Binds - abstract fun bindEpisodeSeriesLookup(impl: DefaultEpisodeSeriesLookup): EpisodeSeriesLookup -} + abstract fun bindMediaProgressWrite(impl: CompositeMediaRepository): MediaProgressWriter +} \ No newline at end of file