diff --git a/app-tv/src/main/java/hu/bbara/purefin/tv/TvActivity.kt b/app-tv/src/main/java/hu/bbara/purefin/tv/TvActivity.kt index b02e3931..835a7daa 100644 --- a/app-tv/src/main/java/hu/bbara/purefin/tv/TvActivity.kt +++ b/app-tv/src/main/java/hu/bbara/purefin/tv/TvActivity.kt @@ -37,7 +37,7 @@ import coil3.request.crossfade import coil3.util.DebugLogger import dagger.hilt.android.AndroidEntryPoint import hu.bbara.purefin.data.SessionBootstrapper -import hu.bbara.purefin.data.session.UserSessionRepository +import hu.bbara.purefin.data.UserSessionRepository import hu.bbara.purefin.navigation.NavigationCommand import hu.bbara.purefin.navigation.NavigationManager import hu.bbara.purefin.navigation.Route diff --git a/app/src/main/java/hu/bbara/purefin/PurefinActivity.kt b/app/src/main/java/hu/bbara/purefin/PurefinActivity.kt index afec057a..776d0a25 100644 --- a/app/src/main/java/hu/bbara/purefin/PurefinActivity.kt +++ b/app/src/main/java/hu/bbara/purefin/PurefinActivity.kt @@ -38,7 +38,7 @@ import coil3.util.DebugLogger import dagger.hilt.android.AndroidEntryPoint import hu.bbara.purefin.data.SessionBootstrapper import hu.bbara.purefin.jellyfin.JellyfinAuthInterceptor -import hu.bbara.purefin.data.session.UserSessionRepository +import hu.bbara.purefin.data.UserSessionRepository import hu.bbara.purefin.navigation.LocalNavigationBackStack import hu.bbara.purefin.navigation.LocalNavigationManager import hu.bbara.purefin.navigation.NavigationCommand diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 5161c0f0..df7b9b6e 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -29,7 +29,6 @@ kotlin { } dependencies { - implementation(project(":data")) implementation(project(":core-model")) implementation(libs.hilt) ksp(libs.hilt.compiler) diff --git a/core/src/main/java/hu/bbara/purefin/Qualifiers.kt b/core/src/main/java/hu/bbara/purefin/Qualifiers.kt new file mode 100644 index 00000000..895092a4 --- /dev/null +++ b/core/src/main/java/hu/bbara/purefin/Qualifiers.kt @@ -0,0 +1,11 @@ +package hu.bbara.purefin + +import javax.inject.Qualifier + +@Qualifier +@Retention(AnnotationRetention.BINARY) +annotation class Online + +@Qualifier +@Retention(AnnotationRetention.BINARY) +annotation class Offline \ No newline at end of file diff --git a/data/src/main/java/hu/bbara/purefin/data/AuthenticationRepository.kt b/core/src/main/java/hu/bbara/purefin/data/AuthenticationRepository.kt similarity index 100% rename from data/src/main/java/hu/bbara/purefin/data/AuthenticationRepository.kt rename to core/src/main/java/hu/bbara/purefin/data/AuthenticationRepository.kt diff --git a/core/src/main/java/hu/bbara/purefin/data/CompositeMediaRepository.kt b/core/src/main/java/hu/bbara/purefin/data/CompositeMediaRepository.kt index c4388ccc..d9425501 100644 --- a/core/src/main/java/hu/bbara/purefin/data/CompositeMediaRepository.kt +++ b/core/src/main/java/hu/bbara/purefin/data/CompositeMediaRepository.kt @@ -1,7 +1,7 @@ package hu.bbara.purefin.data -import hu.bbara.purefin.data.catalog.InMemoryMediaRepository -import hu.bbara.purefin.data.catalog.OfflineMediaRepository +import hu.bbara.purefin.Offline +import hu.bbara.purefin.Online import hu.bbara.purefin.model.Episode import hu.bbara.purefin.model.Movie import hu.bbara.purefin.model.Series @@ -22,8 +22,8 @@ import javax.inject.Singleton @OptIn(ExperimentalCoroutinesApi::class) @Singleton class CompositeMediaRepository @Inject constructor( - private val offlineRepository: OfflineMediaRepository, - private val onlineRepository: InMemoryMediaRepository, + @Offline private val offlineRepository: MediaRepository, + @Online private val onlineRepository: MediaRepository, ) : MediaCatalogReader, MediaProgressWriter { private val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO) diff --git a/data/src/main/java/hu/bbara/purefin/data/DownloadMediaSourceResolver.kt b/core/src/main/java/hu/bbara/purefin/data/DownloadMediaSourceResolver.kt similarity index 100% rename from data/src/main/java/hu/bbara/purefin/data/DownloadMediaSourceResolver.kt rename to core/src/main/java/hu/bbara/purefin/data/DownloadMediaSourceResolver.kt diff --git a/data/src/main/java/hu/bbara/purefin/data/HomeRepository.kt b/core/src/main/java/hu/bbara/purefin/data/HomeRepository.kt similarity index 100% rename from data/src/main/java/hu/bbara/purefin/data/HomeRepository.kt rename to core/src/main/java/hu/bbara/purefin/data/HomeRepository.kt diff --git a/data/src/main/java/hu/bbara/purefin/data/MediaCatalogReader.kt b/core/src/main/java/hu/bbara/purefin/data/MediaCatalogReader.kt similarity index 100% rename from data/src/main/java/hu/bbara/purefin/data/MediaCatalogReader.kt rename to core/src/main/java/hu/bbara/purefin/data/MediaCatalogReader.kt diff --git a/data/src/main/java/hu/bbara/purefin/data/MediaProgressWriter.kt b/core/src/main/java/hu/bbara/purefin/data/MediaProgressWriter.kt similarity index 100% rename from data/src/main/java/hu/bbara/purefin/data/MediaProgressWriter.kt rename to core/src/main/java/hu/bbara/purefin/data/MediaProgressWriter.kt diff --git a/core/src/main/java/hu/bbara/purefin/data/MediaRepository.kt b/core/src/main/java/hu/bbara/purefin/data/MediaRepository.kt new file mode 100644 index 00000000..5674cceb --- /dev/null +++ b/core/src/main/java/hu/bbara/purefin/data/MediaRepository.kt @@ -0,0 +1,4 @@ +package hu.bbara.purefin.data + +interface MediaRepository : MediaCatalogReader, MediaProgressWriter { +} \ No newline at end of file diff --git a/data/src/main/java/hu/bbara/purefin/data/NetworkMonitor.kt b/core/src/main/java/hu/bbara/purefin/data/NetworkMonitor.kt similarity index 100% rename from data/src/main/java/hu/bbara/purefin/data/NetworkMonitor.kt rename to core/src/main/java/hu/bbara/purefin/data/NetworkMonitor.kt diff --git a/data/src/main/java/hu/bbara/purefin/data/OfflineCatalogReader.kt b/core/src/main/java/hu/bbara/purefin/data/OfflineCatalogReader.kt similarity index 100% rename from data/src/main/java/hu/bbara/purefin/data/OfflineCatalogReader.kt rename to core/src/main/java/hu/bbara/purefin/data/OfflineCatalogReader.kt index 69e6b9ae..4c0a85ee 100644 --- a/data/src/main/java/hu/bbara/purefin/data/OfflineCatalogReader.kt +++ b/core/src/main/java/hu/bbara/purefin/data/OfflineCatalogReader.kt @@ -3,8 +3,8 @@ 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.StateFlow +import java.util.UUID interface OfflineCatalogReader { val movies: StateFlow> diff --git a/data/src/main/java/hu/bbara/purefin/data/OfflineCatalogStore.kt b/core/src/main/java/hu/bbara/purefin/data/OfflineCatalogStore.kt similarity index 100% rename from data/src/main/java/hu/bbara/purefin/data/OfflineCatalogStore.kt rename to core/src/main/java/hu/bbara/purefin/data/OfflineCatalogStore.kt diff --git a/data/src/main/java/hu/bbara/purefin/data/PlayableMediaRepository.kt b/core/src/main/java/hu/bbara/purefin/data/PlayableMediaRepository.kt similarity index 100% rename from data/src/main/java/hu/bbara/purefin/data/PlayableMediaRepository.kt rename to core/src/main/java/hu/bbara/purefin/data/PlayableMediaRepository.kt diff --git a/data/src/main/java/hu/bbara/purefin/data/PlaybackMethod.kt b/core/src/main/java/hu/bbara/purefin/data/PlaybackMethod.kt similarity index 100% rename from data/src/main/java/hu/bbara/purefin/data/PlaybackMethod.kt rename to core/src/main/java/hu/bbara/purefin/data/PlaybackMethod.kt diff --git a/data/src/main/java/hu/bbara/purefin/data/PlaybackProfileFamily.kt b/core/src/main/java/hu/bbara/purefin/data/PlaybackProfileFamily.kt similarity index 100% rename from data/src/main/java/hu/bbara/purefin/data/PlaybackProfileFamily.kt rename to core/src/main/java/hu/bbara/purefin/data/PlaybackProfileFamily.kt diff --git a/data/src/main/java/hu/bbara/purefin/data/PlaybackProgressReporter.kt b/core/src/main/java/hu/bbara/purefin/data/PlaybackProgressReporter.kt similarity index 100% rename from data/src/main/java/hu/bbara/purefin/data/PlaybackProgressReporter.kt rename to core/src/main/java/hu/bbara/purefin/data/PlaybackProgressReporter.kt diff --git a/data/src/main/java/hu/bbara/purefin/data/PlaybackReportContext.kt b/core/src/main/java/hu/bbara/purefin/data/PlaybackReportContext.kt similarity index 100% rename from data/src/main/java/hu/bbara/purefin/data/PlaybackReportContext.kt rename to core/src/main/java/hu/bbara/purefin/data/PlaybackReportContext.kt diff --git a/data/src/main/java/hu/bbara/purefin/data/SessionBootstrapper.kt b/core/src/main/java/hu/bbara/purefin/data/SessionBootstrapper.kt similarity index 100% rename from data/src/main/java/hu/bbara/purefin/data/SessionBootstrapper.kt rename to core/src/main/java/hu/bbara/purefin/data/SessionBootstrapper.kt diff --git a/data/src/main/java/hu/bbara/purefin/data/SmartDownloadStore.kt b/core/src/main/java/hu/bbara/purefin/data/SmartDownloadStore.kt similarity index 100% rename from data/src/main/java/hu/bbara/purefin/data/SmartDownloadStore.kt rename to core/src/main/java/hu/bbara/purefin/data/SmartDownloadStore.kt index 7a7878e1..3af20698 100644 --- a/data/src/main/java/hu/bbara/purefin/data/SmartDownloadStore.kt +++ b/core/src/main/java/hu/bbara/purefin/data/SmartDownloadStore.kt @@ -1,7 +1,7 @@ package hu.bbara.purefin.data -import java.util.UUID import kotlinx.coroutines.flow.Flow +import java.util.UUID interface SmartDownloadStore { suspend fun enable(seriesId: UUID) diff --git a/data/src/main/java/hu/bbara/purefin/data/session/UserSessionRepository.kt b/core/src/main/java/hu/bbara/purefin/data/UserSessionRepository.kt similarity index 92% rename from data/src/main/java/hu/bbara/purefin/data/session/UserSessionRepository.kt rename to core/src/main/java/hu/bbara/purefin/data/UserSessionRepository.kt index 46b26799..f430c3c2 100644 --- a/data/src/main/java/hu/bbara/purefin/data/session/UserSessionRepository.kt +++ b/core/src/main/java/hu/bbara/purefin/data/UserSessionRepository.kt @@ -1,7 +1,7 @@ -package hu.bbara.purefin.data.session +package hu.bbara.purefin.data -import java.util.UUID import kotlinx.coroutines.flow.Flow +import java.util.UUID interface UserSessionRepository { val serverUrl: Flow @@ -18,4 +18,4 @@ interface UserSessionRepository { suspend fun setLoggedIn(isLoggedIn: Boolean) val isOfflineMode: Flow -} +} \ No newline at end of file diff --git a/core/src/main/java/hu/bbara/purefin/feature/browse/home/AppViewModel.kt b/core/src/main/java/hu/bbara/purefin/feature/browse/home/AppViewModel.kt index 2fd709ef..f3114760 100644 --- a/core/src/main/java/hu/bbara/purefin/feature/browse/home/AppViewModel.kt +++ b/core/src/main/java/hu/bbara/purefin/feature/browse/home/AppViewModel.kt @@ -5,7 +5,7 @@ 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.session.UserSessionRepository +import hu.bbara.purefin.data.UserSessionRepository import hu.bbara.purefin.download.MediaDownloadController import hu.bbara.purefin.model.LibraryKind import hu.bbara.purefin.model.Media diff --git a/core/src/main/java/hu/bbara/purefin/feature/downloads/DownloadsViewModel.kt b/core/src/main/java/hu/bbara/purefin/feature/downloads/DownloadsViewModel.kt index 974d3bfb..9662c4af 100644 --- a/core/src/main/java/hu/bbara/purefin/feature/downloads/DownloadsViewModel.kt +++ b/core/src/main/java/hu/bbara/purefin/feature/downloads/DownloadsViewModel.kt @@ -3,7 +3,8 @@ package hu.bbara.purefin.feature.downloads import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import hu.bbara.purefin.data.OfflineCatalogReader +import hu.bbara.purefin.Offline +import hu.bbara.purefin.data.MediaRepository import hu.bbara.purefin.download.MediaDownloadController import hu.bbara.purefin.image.ArtworkKind import hu.bbara.purefin.image.ImageUrlBuilder @@ -22,7 +23,7 @@ import javax.inject.Inject @HiltViewModel class DownloadsViewModel @Inject constructor( - private val offlineCatalogReader: OfflineCatalogReader, + @Offline private val offlineCatalogReader: MediaRepository, private val navigationManager: NavigationManager, private val downloadManager: MediaDownloadController, ) : ViewModel() { diff --git a/core/src/main/java/hu/bbara/purefin/feature/login/LoginViewModel.kt b/core/src/main/java/hu/bbara/purefin/feature/login/LoginViewModel.kt index a20a8c80..616cc588 100644 --- a/core/src/main/java/hu/bbara/purefin/feature/login/LoginViewModel.kt +++ b/core/src/main/java/hu/bbara/purefin/feature/login/LoginViewModel.kt @@ -4,7 +4,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import hu.bbara.purefin.data.AuthenticationRepository -import hu.bbara.purefin.data.session.UserSessionRepository +import hu.bbara.purefin.data.UserSessionRepository import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow diff --git a/core/src/main/java/hu/bbara/purefin/feature/search/SearchViewModel.kt b/core/src/main/java/hu/bbara/purefin/feature/search/SearchViewModel.kt index a808a912..5fc1fea7 100644 --- a/core/src/main/java/hu/bbara/purefin/feature/search/SearchViewModel.kt +++ b/core/src/main/java/hu/bbara/purefin/feature/search/SearchViewModel.kt @@ -4,8 +4,8 @@ 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.UserSessionRepository import hu.bbara.purefin.image.ImageUrlBuilder -import hu.bbara.purefin.data.session.UserSessionRepository import java.util.UUID import kotlinx.coroutines.FlowPreview import kotlinx.coroutines.flow.MutableStateFlow diff --git a/data/src/main/java/hu/bbara/purefin/image/ArtworkKind.kt b/core/src/main/java/hu/bbara/purefin/image/ArtworkKind.kt similarity index 100% rename from data/src/main/java/hu/bbara/purefin/image/ArtworkKind.kt rename to core/src/main/java/hu/bbara/purefin/image/ArtworkKind.kt diff --git a/data/src/main/java/hu/bbara/purefin/image/ImageUrlBuilder.kt b/core/src/main/java/hu/bbara/purefin/image/ImageUrlBuilder.kt similarity index 100% rename from data/src/main/java/hu/bbara/purefin/image/ImageUrlBuilder.kt rename to core/src/main/java/hu/bbara/purefin/image/ImageUrlBuilder.kt diff --git a/core/src/main/java/hu/bbara/purefin/jellyfin/JellyfinAuthInterceptor.kt b/core/src/main/java/hu/bbara/purefin/jellyfin/JellyfinAuthInterceptor.kt index 2e38aff1..16bb4759 100644 --- a/core/src/main/java/hu/bbara/purefin/jellyfin/JellyfinAuthInterceptor.kt +++ b/core/src/main/java/hu/bbara/purefin/jellyfin/JellyfinAuthInterceptor.kt @@ -1,6 +1,6 @@ package hu.bbara.purefin.jellyfin -import hu.bbara.purefin.data.session.UserSessionRepository +import hu.bbara.purefin.data.UserSessionRepository import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob diff --git a/core/src/main/java/hu/bbara/purefin/module/RepositoryModule.kt b/core/src/main/java/hu/bbara/purefin/module/RepositoryModule.kt index 59907881..13430177 100644 --- a/core/src/main/java/hu/bbara/purefin/module/RepositoryModule.kt +++ b/core/src/main/java/hu/bbara/purefin/module/RepositoryModule.kt @@ -5,19 +5,14 @@ import dagger.Module import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent 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.catalog.InMemoryAppContentRepository @Module @InstallIn(SingletonComponent::class) abstract class RepositoryModule { - @Binds - abstract fun bindHomeRepository(impl: InMemoryAppContentRepository): HomeRepository - @Binds abstract fun bindMediaCatalogReader(impl: CompositeMediaRepository): MediaCatalogReader diff --git a/core/src/main/java/hu/bbara/purefin/navigation/EpisodeDto.kt b/core/src/main/java/hu/bbara/purefin/navigation/EpisodeDto.kt index 0af1c308..b40bfd83 100644 --- a/core/src/main/java/hu/bbara/purefin/navigation/EpisodeDto.kt +++ b/core/src/main/java/hu/bbara/purefin/navigation/EpisodeDto.kt @@ -1,8 +1,7 @@ package hu.bbara.purefin.navigation -import java.util.UUID import kotlinx.serialization.Serializable -import hu.bbara.purefin.navigation.UuidSerializer +import java.util.UUID @Serializable data class EpisodeDto( diff --git a/data/src/main/java/hu/bbara/purefin/navigation/UuidSerializer.kt b/core/src/main/java/hu/bbara/purefin/navigation/UuidSerializer.kt similarity index 100% rename from data/src/main/java/hu/bbara/purefin/navigation/UuidSerializer.kt rename to core/src/main/java/hu/bbara/purefin/navigation/UuidSerializer.kt diff --git a/data/build.gradle.kts b/data/build.gradle.kts index 0cd13180..1641bf70 100644 --- a/data/build.gradle.kts +++ b/data/build.gradle.kts @@ -30,6 +30,7 @@ kotlin { dependencies { implementation(project(":core-model")) + implementation(project(":core")) implementation(libs.media3.common) implementation(libs.kotlinx.coroutines.core) implementation(libs.jellyfin.core) diff --git a/data/src/main/java/hu/bbara/purefin/data/catalog/InMemoryAppContentRepository.kt b/data/src/main/java/hu/bbara/purefin/data/catalog/InMemoryAppContentRepository.kt index 73d708ae..d0619972 100644 --- a/data/src/main/java/hu/bbara/purefin/data/catalog/InMemoryAppContentRepository.kt +++ b/data/src/main/java/hu/bbara/purefin/data/catalog/InMemoryAppContentRepository.kt @@ -4,7 +4,7 @@ import android.util.Log import androidx.datastore.core.DataStore import hu.bbara.purefin.data.HomeRepository import hu.bbara.purefin.data.NetworkMonitor -import hu.bbara.purefin.data.session.UserSessionRepository +import hu.bbara.purefin.data.UserSessionRepository import hu.bbara.purefin.image.ArtworkKind import hu.bbara.purefin.image.ImageUrlBuilder import hu.bbara.purefin.model.Episode diff --git a/data/src/main/java/hu/bbara/purefin/data/catalog/InMemoryMediaRepository.kt b/data/src/main/java/hu/bbara/purefin/data/catalog/InMemoryMediaRepository.kt index 664559d5..5420c89d 100644 --- a/data/src/main/java/hu/bbara/purefin/data/catalog/InMemoryMediaRepository.kt +++ b/data/src/main/java/hu/bbara/purefin/data/catalog/InMemoryMediaRepository.kt @@ -1,21 +1,13 @@ package hu.bbara.purefin.data.catalog -import hu.bbara.purefin.data.MediaCatalogReader -import hu.bbara.purefin.data.MediaProgressWriter +import hu.bbara.purefin.data.MediaRepository +import hu.bbara.purefin.data.UserSessionRepository import hu.bbara.purefin.data.jellyfin.client.JellyfinApiClient import hu.bbara.purefin.image.ImageUrlBuilder -import hu.bbara.purefin.data.session.UserSessionRepository import hu.bbara.purefin.model.Episode import hu.bbara.purefin.model.Movie import hu.bbara.purefin.model.Season import hu.bbara.purefin.model.Series -import java.time.LocalDateTime -import java.time.format.DateTimeFormatter -import java.util.Locale -import java.util.UUID -import java.util.concurrent.TimeUnit -import javax.inject.Inject -import javax.inject.Singleton import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob @@ -28,12 +20,19 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import org.jellyfin.sdk.model.api.BaseItemDto +import java.time.LocalDateTime +import java.time.format.DateTimeFormatter +import java.util.Locale +import java.util.UUID +import java.util.concurrent.TimeUnit +import javax.inject.Inject +import javax.inject.Singleton @Singleton class InMemoryMediaRepository @Inject constructor( private val userSessionRepository: UserSessionRepository, private val jellyfinApiClient: JellyfinApiClient, -) : MediaCatalogReader, MediaProgressWriter { +) : MediaRepository { private val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO) diff --git a/data/src/main/java/hu/bbara/purefin/data/catalog/OfflineMediaRepository.kt b/data/src/main/java/hu/bbara/purefin/data/catalog/OfflineMediaRepository.kt index e5c6dc7f..e255c973 100644 --- a/data/src/main/java/hu/bbara/purefin/data/catalog/OfflineMediaRepository.kt +++ b/data/src/main/java/hu/bbara/purefin/data/catalog/OfflineMediaRepository.kt @@ -1,15 +1,10 @@ package hu.bbara.purefin.data.catalog -import hu.bbara.purefin.data.MediaCatalogReader -import hu.bbara.purefin.data.MediaProgressWriter -import hu.bbara.purefin.data.OfflineCatalogReader +import hu.bbara.purefin.data.MediaRepository import hu.bbara.purefin.data.offline.room.offline.OfflineRoomMediaLocalDataSource import hu.bbara.purefin.model.Episode import hu.bbara.purefin.model.Movie import hu.bbara.purefin.model.Series -import java.util.UUID -import javax.inject.Inject -import javax.inject.Singleton import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob @@ -17,11 +12,14 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.stateIn +import java.util.UUID +import javax.inject.Inject +import javax.inject.Singleton @Singleton class OfflineMediaRepository @Inject constructor( private val localDataSource: OfflineRoomMediaLocalDataSource, -) : OfflineCatalogReader, MediaCatalogReader, MediaProgressWriter { +) : MediaRepository { private val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO) override val movies: StateFlow> = localDataSource.moviesFlow diff --git a/data/src/main/java/hu/bbara/purefin/data/jellyfin/DefaultPlayableMediaRepository.kt b/data/src/main/java/hu/bbara/purefin/data/jellyfin/DefaultPlayableMediaRepository.kt index 801d584e..97073d20 100644 --- a/data/src/main/java/hu/bbara/purefin/data/jellyfin/DefaultPlayableMediaRepository.kt +++ b/data/src/main/java/hu/bbara/purefin/data/jellyfin/DefaultPlayableMediaRepository.kt @@ -8,7 +8,7 @@ import androidx.media3.common.MediaMetadata import androidx.media3.common.util.UnstableApi import hu.bbara.purefin.data.PlayableMediaRepository import hu.bbara.purefin.data.PlaybackReportContext -import hu.bbara.purefin.data.session.UserSessionRepository +import hu.bbara.purefin.data.UserSessionRepository import hu.bbara.purefin.image.ArtworkKind import hu.bbara.purefin.image.ImageUrlBuilder import hu.bbara.purefin.model.MediaSegment diff --git a/data/src/main/java/hu/bbara/purefin/data/jellyfin/client/JellyfinApiClient.kt b/data/src/main/java/hu/bbara/purefin/data/jellyfin/client/JellyfinApiClient.kt index bfd470f3..a34abae7 100644 --- a/data/src/main/java/hu/bbara/purefin/data/jellyfin/client/JellyfinApiClient.kt +++ b/data/src/main/java/hu/bbara/purefin/data/jellyfin/client/JellyfinApiClient.kt @@ -5,7 +5,7 @@ import android.util.Log import dagger.hilt.android.qualifiers.ApplicationContext import hu.bbara.purefin.data.PlaybackMethod import hu.bbara.purefin.data.PlaybackReportContext -import hu.bbara.purefin.data.session.UserSessionRepository +import hu.bbara.purefin.data.UserSessionRepository import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.first import kotlinx.coroutines.withContext diff --git a/data/src/main/java/hu/bbara/purefin/data/jellyfin/download/JellyfinDownloadMediaSourceResolver.kt b/data/src/main/java/hu/bbara/purefin/data/jellyfin/download/JellyfinDownloadMediaSourceResolver.kt index c2132329..efc15080 100644 --- a/data/src/main/java/hu/bbara/purefin/data/jellyfin/download/JellyfinDownloadMediaSourceResolver.kt +++ b/data/src/main/java/hu/bbara/purefin/data/jellyfin/download/JellyfinDownloadMediaSourceResolver.kt @@ -4,7 +4,7 @@ import hu.bbara.purefin.data.DownloadMediaSourceResolver import hu.bbara.purefin.data.EpisodeDownloadSource import hu.bbara.purefin.data.MovieDownloadSource import hu.bbara.purefin.data.PlaybackMethod -import hu.bbara.purefin.data.session.UserSessionRepository +import hu.bbara.purefin.data.UserSessionRepository import hu.bbara.purefin.data.jellyfin.client.JellyfinApiClient import hu.bbara.purefin.data.jellyfin.playback.PlaybackDecisionResolver import hu.bbara.purefin.data.jellyfin.playback.playbackCustomCacheKey diff --git a/data/src/main/java/hu/bbara/purefin/data/jellyfin/playback/JellyfinPlaybackResolver.kt b/data/src/main/java/hu/bbara/purefin/data/jellyfin/playback/JellyfinPlaybackResolver.kt index 16f14e16..d5082722 100644 --- a/data/src/main/java/hu/bbara/purefin/data/jellyfin/playback/JellyfinPlaybackResolver.kt +++ b/data/src/main/java/hu/bbara/purefin/data/jellyfin/playback/JellyfinPlaybackResolver.kt @@ -1,7 +1,7 @@ package hu.bbara.purefin.data.jellyfin.playback import android.util.Log -import hu.bbara.purefin.data.session.UserSessionRepository +import hu.bbara.purefin.data.UserSessionRepository import hu.bbara.purefin.data.jellyfin.client.JellyfinApiClient import java.util.UUID import java.util.concurrent.ConcurrentHashMap diff --git a/data/src/main/java/hu/bbara/purefin/data/jellyfin/session/JellyfinAuthenticationRepository.kt b/data/src/main/java/hu/bbara/purefin/data/jellyfin/session/JellyfinAuthenticationRepository.kt index 8287e9d5..da52b2a2 100644 --- a/data/src/main/java/hu/bbara/purefin/data/jellyfin/session/JellyfinAuthenticationRepository.kt +++ b/data/src/main/java/hu/bbara/purefin/data/jellyfin/session/JellyfinAuthenticationRepository.kt @@ -2,7 +2,7 @@ package hu.bbara.purefin.data.jellyfin.session import android.util.Log import hu.bbara.purefin.data.AuthenticationRepository -import hu.bbara.purefin.data.session.UserSessionRepository +import hu.bbara.purefin.data.UserSessionRepository import hu.bbara.purefin.data.jellyfin.client.JellyfinApiClient import javax.inject.Inject import javax.inject.Singleton diff --git a/data/src/main/java/hu/bbara/purefin/data/jellyfin/session/UserSessionModule.kt b/data/src/main/java/hu/bbara/purefin/data/jellyfin/session/UserSessionModule.kt index d2a974e3..f7952a02 100644 --- a/data/src/main/java/hu/bbara/purefin/data/jellyfin/session/UserSessionModule.kt +++ b/data/src/main/java/hu/bbara/purefin/data/jellyfin/session/UserSessionModule.kt @@ -10,7 +10,7 @@ import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent -import hu.bbara.purefin.data.session.UserSessionRepository +import hu.bbara.purefin.data.UserSessionRepository import javax.inject.Singleton @Module diff --git a/data/src/main/java/hu/bbara/purefin/data/jellyfin/session/UserSessionRepository.kt b/data/src/main/java/hu/bbara/purefin/data/jellyfin/session/UserSessionRepository.kt index 9dbdadd8..73b08f60 100644 --- a/data/src/main/java/hu/bbara/purefin/data/jellyfin/session/UserSessionRepository.kt +++ b/data/src/main/java/hu/bbara/purefin/data/jellyfin/session/UserSessionRepository.kt @@ -1,7 +1,7 @@ package hu.bbara.purefin.data.jellyfin.session import androidx.datastore.core.DataStore -import hu.bbara.purefin.data.session.UserSessionRepository +import hu.bbara.purefin.data.UserSessionRepository import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.first 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 index cfcfed12..b54af7d6 100644 --- a/data/src/main/java/hu/bbara/purefin/data/module/MediaRepositoryModule.kt +++ b/data/src/main/java/hu/bbara/purefin/data/module/MediaRepositoryModule.kt @@ -4,7 +4,12 @@ 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.Offline +import hu.bbara.purefin.Online +import hu.bbara.purefin.data.HomeRepository +import hu.bbara.purefin.data.MediaRepository +import hu.bbara.purefin.data.catalog.InMemoryAppContentRepository +import hu.bbara.purefin.data.catalog.InMemoryMediaRepository import hu.bbara.purefin.data.catalog.OfflineMediaRepository @Module @@ -12,5 +17,13 @@ import hu.bbara.purefin.data.catalog.OfflineMediaRepository abstract class MediaRepositoryModule { @Binds - abstract fun bindOfflineCatalogReader(impl: OfflineMediaRepository): OfflineCatalogReader + @Online + abstract fun bindOnlineRepository(impl: InMemoryMediaRepository): MediaRepository + + @Binds + @Offline + abstract fun bindOfflineRepository(impl: OfflineMediaRepository): MediaRepository + + @Binds + abstract fun bindHomeRepository(impl: InMemoryAppContentRepository): HomeRepository } \ No newline at end of file