mirror of
https://github.com/bbara04/Purefin.git
synced 2026-07-24 03:36:51 +00:00
refactor: merge media catalog reader into repository
This commit is contained in:
@@ -25,12 +25,12 @@ import javax.inject.Singleton
|
||||
class CompositeMediaRepository @Inject constructor(
|
||||
@Offline private val offlineRepository: MediaRepository,
|
||||
@Online private val onlineRepository: MediaRepository,
|
||||
) : MediaCatalogReader, MediaProgressWriter {
|
||||
) : MediaRepository {
|
||||
|
||||
private val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
|
||||
|
||||
// TODO move this into the domain layer and there you can use NetworkMonitor. Data should be free of android stuff.
|
||||
private val activeRepository: Flow<MediaCatalogReader> = flowOf(onlineRepository)
|
||||
private val activeRepository: Flow<MediaRepository> = flowOf(onlineRepository)
|
||||
|
||||
override val movies: StateFlow<Map<UUID, Movie>> = activeRepository
|
||||
.flatMapLatest { it.movies }
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
package hu.bbara.purefin.data
|
||||
|
||||
import hu.bbara.purefin.model.Episode
|
||||
import hu.bbara.purefin.model.Genre
|
||||
import hu.bbara.purefin.model.Movie
|
||||
import hu.bbara.purefin.model.Series
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import java.util.UUID
|
||||
|
||||
//TODO rename MediaRepository
|
||||
interface MediaCatalogReader {
|
||||
val movies: StateFlow<Map<UUID, Movie>>
|
||||
val series: StateFlow<Map<UUID, Series>>
|
||||
val episodes: StateFlow<Map<UUID, Episode>>
|
||||
val genres: StateFlow<Set<Genre>>
|
||||
suspend fun getMovie(id: UUID): Flow<Movie?>
|
||||
suspend fun getSeries(id: UUID): Flow<Series?>
|
||||
suspend fun getEpisode(id: UUID): Flow<Episode?>
|
||||
fun observeSeriesWithContent(seriesId: UUID): Flow<Series?>
|
||||
}
|
||||
@@ -1,4 +1,20 @@
|
||||
package hu.bbara.purefin.data
|
||||
|
||||
interface MediaRepository : MediaCatalogReader, MediaProgressWriter {
|
||||
import hu.bbara.purefin.model.Episode
|
||||
import hu.bbara.purefin.model.Genre
|
||||
import hu.bbara.purefin.model.Movie
|
||||
import hu.bbara.purefin.model.Series
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import java.util.UUID
|
||||
|
||||
interface MediaRepository : MediaProgressWriter {
|
||||
val movies: StateFlow<Map<UUID, Movie>>
|
||||
val series: StateFlow<Map<UUID, Series>>
|
||||
val episodes: StateFlow<Map<UUID, Episode>>
|
||||
val genres: StateFlow<Set<Genre>>
|
||||
suspend fun getMovie(id: UUID): Flow<Movie?>
|
||||
suspend fun getSeries(id: UUID): Flow<Series?>
|
||||
suspend fun getEpisode(id: UUID): Flow<Episode?>
|
||||
fun observeSeriesWithContent(seriesId: UUID): Flow<Series?>
|
||||
}
|
||||
@@ -4,7 +4,7 @@ import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import hu.bbara.purefin.data.HomeRepository
|
||||
import hu.bbara.purefin.data.MediaCatalogReader
|
||||
import hu.bbara.purefin.data.MediaRepository
|
||||
import hu.bbara.purefin.data.UserSessionRepository
|
||||
import hu.bbara.purefin.download.MediaDownloadController
|
||||
import hu.bbara.purefin.model.LibraryKind
|
||||
@@ -34,7 +34,7 @@ import javax.inject.Inject
|
||||
@HiltViewModel
|
||||
class AppViewModel @Inject constructor(
|
||||
private val homeRepository: HomeRepository,
|
||||
private val mediaCatalogReader: MediaCatalogReader,
|
||||
private val mediaCatalogReader: MediaRepository,
|
||||
private val userSessionRepository: UserSessionRepository,
|
||||
private val navigationManager: NavigationManager,
|
||||
private val mediaDownloadManager: MediaDownloadController,
|
||||
|
||||
@@ -3,7 +3,7 @@ package hu.bbara.purefin.feature.content.episode
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import hu.bbara.purefin.data.MediaCatalogReader
|
||||
import hu.bbara.purefin.data.MediaRepository
|
||||
import hu.bbara.purefin.download.DownloadState
|
||||
import hu.bbara.purefin.download.MediaDownloadController
|
||||
import hu.bbara.purefin.model.Episode
|
||||
@@ -22,7 +22,7 @@ import javax.inject.Inject
|
||||
|
||||
@HiltViewModel
|
||||
class EpisodeScreenViewModel @Inject constructor(
|
||||
private val mediaCatalogReader: MediaCatalogReader,
|
||||
private val mediaCatalogReader: MediaRepository,
|
||||
private val navigationManager: NavigationManager,
|
||||
private val mediaDownloadManager: MediaDownloadController,
|
||||
): ViewModel() {
|
||||
|
||||
@@ -3,7 +3,7 @@ package hu.bbara.purefin.feature.content.movie
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import hu.bbara.purefin.data.MediaCatalogReader
|
||||
import hu.bbara.purefin.data.MediaRepository
|
||||
import hu.bbara.purefin.download.DownloadState
|
||||
import hu.bbara.purefin.download.MediaDownloadController
|
||||
import hu.bbara.purefin.model.Movie
|
||||
@@ -21,7 +21,7 @@ import javax.inject.Inject
|
||||
|
||||
@HiltViewModel
|
||||
class MovieScreenViewModel @Inject constructor(
|
||||
private val mediaCatalogReader: MediaCatalogReader,
|
||||
private val mediaCatalogReader: MediaRepository,
|
||||
private val navigationManager: NavigationManager,
|
||||
private val mediaDownloadManager: MediaDownloadController,
|
||||
): ViewModel() {
|
||||
|
||||
@@ -3,7 +3,7 @@ package hu.bbara.purefin.feature.content.series
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import hu.bbara.purefin.data.MediaCatalogReader
|
||||
import hu.bbara.purefin.data.MediaRepository
|
||||
import hu.bbara.purefin.download.DownloadState
|
||||
import hu.bbara.purefin.download.MediaDownloadController
|
||||
import hu.bbara.purefin.model.Episode
|
||||
@@ -25,7 +25,7 @@ import javax.inject.Inject
|
||||
|
||||
@HiltViewModel
|
||||
class SeriesViewModel @Inject constructor(
|
||||
private val mediaCatalogReader: MediaCatalogReader,
|
||||
private val mediaCatalogReader: MediaRepository,
|
||||
private val navigationManager: NavigationManager,
|
||||
private val mediaDownloadManager: MediaDownloadController,
|
||||
) : ViewModel() {
|
||||
|
||||
@@ -3,7 +3,7 @@ package hu.bbara.purefin.feature.search
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import hu.bbara.purefin.data.MediaCatalogReader
|
||||
import hu.bbara.purefin.data.MediaRepository
|
||||
import hu.bbara.purefin.data.UserSessionRepository
|
||||
import hu.bbara.purefin.image.ArtworkKind
|
||||
import hu.bbara.purefin.image.ImageUrlBuilder
|
||||
@@ -26,7 +26,7 @@ import javax.inject.Inject
|
||||
@HiltViewModel
|
||||
@OptIn(FlowPreview::class)
|
||||
class SearchViewModel @Inject constructor(
|
||||
private val mediaCatalogReader: MediaCatalogReader,
|
||||
private val mediaCatalogReader: MediaRepository,
|
||||
private val userSessionRepository: UserSessionRepository,
|
||||
private val navigationManager: NavigationManager,
|
||||
) : ViewModel() {
|
||||
|
||||
@@ -5,8 +5,8 @@ import dagger.Module
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import hu.bbara.purefin.data.CompositeMediaRepository
|
||||
import hu.bbara.purefin.data.MediaCatalogReader
|
||||
import hu.bbara.purefin.data.MediaProgressWriter
|
||||
import hu.bbara.purefin.data.MediaRepository
|
||||
|
||||
|
||||
@Module
|
||||
@@ -14,7 +14,7 @@ import hu.bbara.purefin.data.MediaProgressWriter
|
||||
abstract class RepositoryModule {
|
||||
|
||||
@Binds
|
||||
abstract fun bindMediaCatalogReader(impl: CompositeMediaRepository): MediaCatalogReader
|
||||
abstract fun bindMediaRepository(impl: CompositeMediaRepository): MediaRepository
|
||||
|
||||
@Binds
|
||||
abstract fun bindMediaProgressWrite(impl: CompositeMediaRepository): MediaProgressWriter
|
||||
|
||||
@@ -5,7 +5,7 @@ import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import hu.bbara.purefin.data.MediaCatalogReader
|
||||
import hu.bbara.purefin.data.MediaRepository
|
||||
import hu.bbara.purefin.image.ArtworkKind
|
||||
import hu.bbara.purefin.image.ImageUrlBuilder
|
||||
import hu.bbara.purefin.model.PlayableMedia
|
||||
@@ -31,7 +31,7 @@ import javax.inject.Inject
|
||||
class PlayerViewModel @Inject constructor(
|
||||
savedStateHandle: SavedStateHandle,
|
||||
private val playerManager: PlayerManager,
|
||||
private val mediaCatalogReader: MediaCatalogReader,
|
||||
private val mediaCatalogReader: MediaRepository,
|
||||
private val progressManager: ProgressManager,
|
||||
) : ViewModel() {
|
||||
companion object {
|
||||
|
||||
Reference in New Issue
Block a user