diff --git a/.gitignore b/.gitignore index 8ccc4f8..3ea61a1 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,7 @@ /.idea/navEditor.xml /.idea/assetWizardSettings.xml .DS_Store -/build +**/build /captures .externalNativeBuild .cxx diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 8c4dd43..f413d51 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -47,6 +47,11 @@ kotlin { } dependencies { + implementation(project(":core:model")) + implementation(project(":core:data")) + implementation(project(":feature:download")) + implementation(project(":core:player")) + implementation(project(":feature:shared")) implementation(libs.androidx.core.ktx) implementation(libs.androidx.lifecycle.runtime.ktx) implementation(libs.androidx.lifecycle.viewmodel.compose) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3862882..82ad2fa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -33,7 +33,7 @@ android:exported="false" android:theme="@style/Theme.Purefin" /> diff --git a/app/src/main/java/hu/bbara/purefin/PurefinActivity.kt b/app/src/main/java/hu/bbara/purefin/PurefinActivity.kt index 215ee86..222072a 100644 --- a/app/src/main/java/hu/bbara/purefin/PurefinActivity.kt +++ b/app/src/main/java/hu/bbara/purefin/PurefinActivity.kt @@ -31,15 +31,15 @@ import coil3.network.okhttp.OkHttpNetworkFetcherFactory import coil3.request.crossfade import coil3.util.DebugLogger import dagger.hilt.android.AndroidEntryPoint -import hu.bbara.purefin.client.JellyfinApiClient -import hu.bbara.purefin.client.JellyfinAuthInterceptor import hu.bbara.purefin.common.ui.PurefinWaitingScreen +import hu.bbara.purefin.core.data.client.JellyfinApiClient +import hu.bbara.purefin.core.data.client.JellyfinAuthInterceptor +import hu.bbara.purefin.core.data.navigation.LocalNavigationManager +import hu.bbara.purefin.core.data.navigation.NavigationCommand +import hu.bbara.purefin.core.data.navigation.NavigationManager +import hu.bbara.purefin.core.data.navigation.Route +import hu.bbara.purefin.core.data.session.UserSessionRepository import hu.bbara.purefin.login.ui.LoginScreen -import hu.bbara.purefin.navigation.LocalNavigationManager -import hu.bbara.purefin.navigation.NavigationCommand -import hu.bbara.purefin.navigation.NavigationManager -import hu.bbara.purefin.navigation.Route -import hu.bbara.purefin.session.UserSessionRepository import hu.bbara.purefin.ui.theme.AppTheme import kotlinx.coroutines.launch import okhttp3.OkHttpClient diff --git a/app/src/main/java/hu/bbara/purefin/app/content/ContentMockData.kt b/app/src/main/java/hu/bbara/purefin/app/content/ContentMockData.kt index dc328f2..68b7159 100644 --- a/app/src/main/java/hu/bbara/purefin/app/content/ContentMockData.kt +++ b/app/src/main/java/hu/bbara/purefin/app/content/ContentMockData.kt @@ -1,14 +1,14 @@ package hu.bbara.purefin.app.content -import hu.bbara.purefin.app.content.episode.EpisodeUiModel -import hu.bbara.purefin.app.content.movie.MovieUiModel -import hu.bbara.purefin.app.content.series.SeriesCastMemberUiModel -import hu.bbara.purefin.app.content.series.SeriesEpisodeUiModel -import hu.bbara.purefin.app.content.series.SeriesSeasonUiModel -import hu.bbara.purefin.app.content.series.SeriesUiModel +import hu.bbara.purefin.feature.shared.content.episode.EpisodeUiModel +import hu.bbara.purefin.feature.shared.content.movie.MovieUiModel +import hu.bbara.purefin.feature.shared.content.series.SeriesCastMemberUiModel +import hu.bbara.purefin.feature.shared.content.series.SeriesEpisodeUiModel +import hu.bbara.purefin.feature.shared.content.series.SeriesSeasonUiModel +import hu.bbara.purefin.feature.shared.content.series.SeriesUiModel import org.jellyfin.sdk.model.UUID -import hu.bbara.purefin.app.content.episode.CastMember as EpisodeCastMember -import hu.bbara.purefin.app.content.movie.CastMember as MovieCastMember +import hu.bbara.purefin.feature.shared.content.episode.CastMember as EpisodeCastMember +import hu.bbara.purefin.feature.shared.content.movie.CastMember as MovieCastMember object ContentMockData { fun series(): SeriesUiModel { diff --git a/app/src/main/java/hu/bbara/purefin/app/content/episode/EpisodeComponents.kt b/app/src/main/java/hu/bbara/purefin/app/content/episode/EpisodeComponents.kt index 2cf47be..d490199 100644 --- a/app/src/main/java/hu/bbara/purefin/app/content/episode/EpisodeComponents.kt +++ b/app/src/main/java/hu/bbara/purefin/app/content/episode/EpisodeComponents.kt @@ -37,7 +37,7 @@ import hu.bbara.purefin.common.ui.components.GhostIconButton import hu.bbara.purefin.common.ui.components.MediaActionButton import hu.bbara.purefin.common.ui.components.MediaPlaybackSettings import hu.bbara.purefin.common.ui.components.MediaResumeButton -import hu.bbara.purefin.data.model.Episode +import hu.bbara.purefin.core.model.Episode import hu.bbara.purefin.player.PlayerActivity @Composable diff --git a/app/src/main/java/hu/bbara/purefin/app/content/episode/EpisodeScreen.kt b/app/src/main/java/hu/bbara/purefin/app/content/episode/EpisodeScreen.kt index c656832..919d5c3 100644 --- a/app/src/main/java/hu/bbara/purefin/app/content/episode/EpisodeScreen.kt +++ b/app/src/main/java/hu/bbara/purefin/app/content/episode/EpisodeScreen.kt @@ -16,8 +16,9 @@ import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import hu.bbara.purefin.common.ui.PurefinWaitingScreen import hu.bbara.purefin.common.ui.components.MediaHero -import hu.bbara.purefin.data.model.Episode -import hu.bbara.purefin.navigation.EpisodeDto +import hu.bbara.purefin.core.data.navigation.EpisodeDto +import hu.bbara.purefin.core.model.Episode +import hu.bbara.purefin.feature.shared.content.episode.EpisodeScreenViewModel @Composable fun EpisodeScreen( diff --git a/app/src/main/java/hu/bbara/purefin/app/content/movie/MovieComponents.kt b/app/src/main/java/hu/bbara/purefin/app/content/movie/MovieComponents.kt index f220630..6514d23 100644 --- a/app/src/main/java/hu/bbara/purefin/app/content/movie/MovieComponents.kt +++ b/app/src/main/java/hu/bbara/purefin/app/content/movie/MovieComponents.kt @@ -39,7 +39,8 @@ import hu.bbara.purefin.common.ui.components.GhostIconButton import hu.bbara.purefin.common.ui.components.MediaActionButton import hu.bbara.purefin.common.ui.components.MediaPlaybackSettings import hu.bbara.purefin.common.ui.components.MediaResumeButton -import hu.bbara.purefin.download.DownloadState +import hu.bbara.purefin.feature.download.DownloadState +import hu.bbara.purefin.feature.shared.content.movie.MovieUiModel import hu.bbara.purefin.player.PlayerActivity @Composable diff --git a/app/src/main/java/hu/bbara/purefin/app/content/movie/MovieScreen.kt b/app/src/main/java/hu/bbara/purefin/app/content/movie/MovieScreen.kt index ffc7cff..f7dc32b 100644 --- a/app/src/main/java/hu/bbara/purefin/app/content/movie/MovieScreen.kt +++ b/app/src/main/java/hu/bbara/purefin/app/content/movie/MovieScreen.kt @@ -22,8 +22,10 @@ import androidx.hilt.navigation.compose.hiltViewModel import hu.bbara.purefin.app.content.ContentMockData import hu.bbara.purefin.common.ui.PurefinWaitingScreen import hu.bbara.purefin.common.ui.components.MediaHero -import hu.bbara.purefin.download.DownloadState -import hu.bbara.purefin.navigation.MovieDto +import hu.bbara.purefin.core.data.navigation.MovieDto +import hu.bbara.purefin.feature.download.DownloadState +import hu.bbara.purefin.feature.shared.content.movie.MovieScreenViewModel +import hu.bbara.purefin.feature.shared.content.movie.MovieUiModel @Composable fun MovieScreen( diff --git a/app/src/main/java/hu/bbara/purefin/app/content/series/SeriesComponents.kt b/app/src/main/java/hu/bbara/purefin/app/content/series/SeriesComponents.kt index d4a38c8..4693674 100644 --- a/app/src/main/java/hu/bbara/purefin/app/content/series/SeriesComponents.kt +++ b/app/src/main/java/hu/bbara/purefin/app/content/series/SeriesComponents.kt @@ -53,10 +53,11 @@ import hu.bbara.purefin.common.ui.components.MediaActionButton import hu.bbara.purefin.common.ui.components.MediaProgressBar import hu.bbara.purefin.common.ui.components.PurefinAsyncImage import hu.bbara.purefin.common.ui.components.WatchStateIndicator -import hu.bbara.purefin.data.model.CastMember -import hu.bbara.purefin.data.model.Episode -import hu.bbara.purefin.data.model.Season -import hu.bbara.purefin.data.model.Series +import hu.bbara.purefin.core.model.CastMember +import hu.bbara.purefin.core.model.Episode +import hu.bbara.purefin.core.model.Season +import hu.bbara.purefin.core.model.Series +import hu.bbara.purefin.feature.shared.content.series.SeriesViewModel @Composable internal fun SeriesTopBar( diff --git a/app/src/main/java/hu/bbara/purefin/app/content/series/SeriesScreen.kt b/app/src/main/java/hu/bbara/purefin/app/content/series/SeriesScreen.kt index 99c88c1..36c079a 100644 --- a/app/src/main/java/hu/bbara/purefin/app/content/series/SeriesScreen.kt +++ b/app/src/main/java/hu/bbara/purefin/app/content/series/SeriesScreen.kt @@ -24,9 +24,10 @@ import androidx.hilt.navigation.compose.hiltViewModel import hu.bbara.purefin.common.ui.MediaSynopsis import hu.bbara.purefin.common.ui.PurefinWaitingScreen import hu.bbara.purefin.common.ui.components.MediaHero -import hu.bbara.purefin.data.model.Season -import hu.bbara.purefin.data.model.Series -import hu.bbara.purefin.navigation.SeriesDto +import hu.bbara.purefin.core.data.navigation.SeriesDto +import hu.bbara.purefin.core.model.Season +import hu.bbara.purefin.core.model.Series +import hu.bbara.purefin.feature.shared.content.series.SeriesViewModel @Composable fun SeriesScreen( diff --git a/app/src/main/java/hu/bbara/purefin/app/home/HomeNavigation.kt b/app/src/main/java/hu/bbara/purefin/app/home/HomeNavigation.kt index 41303bb..6f83d74 100644 --- a/app/src/main/java/hu/bbara/purefin/app/home/HomeNavigation.kt +++ b/app/src/main/java/hu/bbara/purefin/app/home/HomeNavigation.kt @@ -1,7 +1,7 @@ package hu.bbara.purefin.app.home import androidx.navigation3.runtime.EntryProviderScope -import hu.bbara.purefin.navigation.Route +import hu.bbara.purefin.core.data.navigation.Route /** * Navigation 3 entry definition for the Home section. diff --git a/app/src/main/java/hu/bbara/purefin/app/home/HomePage.kt b/app/src/main/java/hu/bbara/purefin/app/home/HomePage.kt index b54cd8f..11eddfb 100644 --- a/app/src/main/java/hu/bbara/purefin/app/home/HomePage.kt +++ b/app/src/main/java/hu/bbara/purefin/app/home/HomePage.kt @@ -25,6 +25,7 @@ import hu.bbara.purefin.app.home.ui.HomeDrawerContent import hu.bbara.purefin.app.home.ui.HomeMockData import hu.bbara.purefin.app.home.ui.HomeNavItem import hu.bbara.purefin.app.home.ui.HomeTopBar +import hu.bbara.purefin.feature.shared.home.HomePageViewModel import kotlinx.coroutines.launch import org.jellyfin.sdk.model.api.CollectionType @@ -74,7 +75,7 @@ fun HomePage( primaryNavItems = libraryNavItems, secondaryNavItems = HomeMockData.secondaryNavItems, user = HomeMockData.user, - onLibrarySelected = viewModel::onLibrarySelected, + onLibrarySelected = { item -> viewModel.onLibrarySelected(item.id, item.label) }, onLogout = viewModel::logout ) } diff --git a/app/src/main/java/hu/bbara/purefin/app/home/ui/HomeContent.kt b/app/src/main/java/hu/bbara/purefin/app/home/ui/HomeContent.kt index 80a2a1f..81413cf 100644 --- a/app/src/main/java/hu/bbara/purefin/app/home/ui/HomeContent.kt +++ b/app/src/main/java/hu/bbara/purefin/app/home/ui/HomeContent.kt @@ -10,6 +10,10 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp +import hu.bbara.purefin.feature.shared.home.ContinueWatchingItem +import hu.bbara.purefin.feature.shared.home.LibraryItem +import hu.bbara.purefin.feature.shared.home.NextUpItem +import hu.bbara.purefin.feature.shared.home.PosterItem import org.jellyfin.sdk.model.UUID @Composable diff --git a/app/src/main/java/hu/bbara/purefin/app/home/ui/HomeModels.kt b/app/src/main/java/hu/bbara/purefin/app/home/ui/HomeModels.kt index 293ef58..ac6dd1e 100644 --- a/app/src/main/java/hu/bbara/purefin/app/home/ui/HomeModels.kt +++ b/app/src/main/java/hu/bbara/purefin/app/home/ui/HomeModels.kt @@ -1,85 +1,7 @@ package hu.bbara.purefin.app.home.ui import androidx.compose.ui.graphics.vector.ImageVector -import hu.bbara.purefin.data.model.Episode -import hu.bbara.purefin.data.model.Movie -import hu.bbara.purefin.data.model.Series import org.jellyfin.sdk.model.UUID -import org.jellyfin.sdk.model.api.BaseItemKind -import org.jellyfin.sdk.model.api.CollectionType - -data class ContinueWatchingItem( - val type: BaseItemKind, - val movie: Movie? = null, - val episode: Episode? = null -) { - val id: UUID = when (type) { - BaseItemKind.MOVIE -> movie!!.id - BaseItemKind.EPISODE -> episode!!.id - else -> throw UnsupportedOperationException("Unsupported item type: $type") - } - val primaryText: String = when (type) { - BaseItemKind.MOVIE -> movie!!.title - BaseItemKind.EPISODE -> episode!!.title - else -> throw UnsupportedOperationException("Unsupported item type: $type") - } - val secondaryText: String = when (type) { - BaseItemKind.MOVIE -> movie!!.year - BaseItemKind.EPISODE -> episode!!.releaseDate - else -> throw UnsupportedOperationException("Unsupported item type: $type") - } - val progress: Double = when (type) { - BaseItemKind.MOVIE -> movie!!.progress ?: 0.0 - BaseItemKind.EPISODE -> episode!!.progress ?: 0.0 - else -> throw UnsupportedOperationException("Unsupported item type: $type") - } -} - -data class NextUpItem( - val episode: Episode -) { - val id: UUID = episode.id - val primaryText: String = episode.title - val secondaryText: String = episode.releaseDate -} - -data class LibraryItem( - val id: UUID, - val name: String, - val type: CollectionType, - val isEmpty: Boolean -) - -data class PosterItem( - val type: BaseItemKind, - val movie: Movie? = null, - val series: Series? = null, - val episode: Episode? = null -) { - val id: UUID = when (type) { - BaseItemKind.MOVIE -> movie!!.id - BaseItemKind.EPISODE -> episode!!.id - BaseItemKind.SERIES -> series!!.id - else -> throw IllegalArgumentException("Invalid type: $type") - } - val title: String = when (type) { - BaseItemKind.MOVIE -> movie!!.title - BaseItemKind.EPISODE -> episode!!.title - BaseItemKind.SERIES -> series!!.name - else -> throw IllegalArgumentException("Invalid type: $type") - } - val imageUrl: String = when (type) { - BaseItemKind.MOVIE -> movie!!.heroImageUrl - BaseItemKind.EPISODE -> episode!!.heroImageUrl - BaseItemKind.SERIES -> series!!.heroImageUrl - else -> throw IllegalArgumentException("Invalid type: $type") - } - fun watched() = when (type) { - BaseItemKind.MOVIE -> movie!!.watched - BaseItemKind.EPISODE -> episode!!.watched - else -> throw IllegalArgumentException("Invalid type: $type") - } -} data class HomeNavItem( val id: UUID, diff --git a/app/src/main/java/hu/bbara/purefin/app/home/ui/HomeSections.kt b/app/src/main/java/hu/bbara/purefin/app/home/ui/HomeSections.kt index b028303..1efe5c3 100644 --- a/app/src/main/java/hu/bbara/purefin/app/home/ui/HomeSections.kt +++ b/app/src/main/java/hu/bbara/purefin/app/home/ui/HomeSections.kt @@ -40,6 +40,9 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import coil3.request.ImageRequest import hu.bbara.purefin.common.ui.PosterCard +import hu.bbara.purefin.feature.shared.home.ContinueWatchingItem +import hu.bbara.purefin.feature.shared.home.NextUpItem +import hu.bbara.purefin.feature.shared.home.PosterItem import hu.bbara.purefin.common.ui.components.MediaProgressBar import hu.bbara.purefin.common.ui.components.PurefinAsyncImage import hu.bbara.purefin.player.PlayerActivity diff --git a/app/src/main/java/hu/bbara/purefin/app/library/ui/LibraryScreen.kt b/app/src/main/java/hu/bbara/purefin/app/library/ui/LibraryScreen.kt index 42aaa39..a3406d3 100644 --- a/app/src/main/java/hu/bbara/purefin/app/library/ui/LibraryScreen.kt +++ b/app/src/main/java/hu/bbara/purefin/app/library/ui/LibraryScreen.kt @@ -21,11 +21,11 @@ import androidx.compose.runtime.collectAsState import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel -import hu.bbara.purefin.app.home.ui.PosterItem -import hu.bbara.purefin.app.library.LibraryViewModel import hu.bbara.purefin.common.ui.PosterCard import hu.bbara.purefin.common.ui.components.PurefinIconButton -import hu.bbara.purefin.navigation.LibraryDto +import hu.bbara.purefin.core.data.navigation.LibraryDto +import hu.bbara.purefin.feature.shared.home.PosterItem +import hu.bbara.purefin.feature.shared.library.LibraryViewModel @Composable fun LibraryScreen( diff --git a/app/src/main/java/hu/bbara/purefin/common/ui/MediaDetailComponents.kt b/app/src/main/java/hu/bbara/purefin/common/ui/MediaDetailComponents.kt index 38f85f5..e3edf62 100644 --- a/app/src/main/java/hu/bbara/purefin/common/ui/MediaDetailComponents.kt +++ b/app/src/main/java/hu/bbara/purefin/common/ui/MediaDetailComponents.kt @@ -34,7 +34,7 @@ import androidx.compose.ui.unit.TextUnit import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import hu.bbara.purefin.common.ui.components.PurefinAsyncImage -import hu.bbara.purefin.data.model.CastMember +import hu.bbara.purefin.core.model.CastMember @Composable fun MediaMetaChip( diff --git a/app/src/main/java/hu/bbara/purefin/common/ui/PosterCard.kt b/app/src/main/java/hu/bbara/purefin/common/ui/PosterCard.kt index 8c97feb..851172d 100644 --- a/app/src/main/java/hu/bbara/purefin/common/ui/PosterCard.kt +++ b/app/src/main/java/hu/bbara/purefin/common/ui/PosterCard.kt @@ -23,10 +23,10 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import coil3.request.ImageRequest -import hu.bbara.purefin.app.home.ui.PosterItem import hu.bbara.purefin.common.ui.components.PurefinAsyncImage import hu.bbara.purefin.common.ui.components.UnwatchedEpisodeIndicator import hu.bbara.purefin.common.ui.components.WatchStateIndicator +import hu.bbara.purefin.feature.shared.home.PosterItem import org.jellyfin.sdk.model.UUID import org.jellyfin.sdk.model.api.BaseItemKind @@ -49,11 +49,10 @@ fun PosterCard( when (posterItem.type) { BaseItemKind.MOVIE -> onMovieSelected(posterItem.id) BaseItemKind.SERIES -> onSeriesSelected(posterItem.id) - BaseItemKind.EPISODE -> onEpisodeSelected( - posterItem.episode!!.seriesId, - posterItem.episode.seasonId, - posterItem.episode.id - ) + BaseItemKind.EPISODE -> { + val ep = posterItem.episode!! + onEpisodeSelected(ep.seriesId, ep.seasonId, ep.id) + } else -> {} } } @@ -79,20 +78,26 @@ fun PosterCard( contentScale = ContentScale.Crop ) when (item.type) { - BaseItemKind.MOVIE -> WatchStateIndicator( - size = 28, - modifier = Modifier.align(Alignment.TopEnd) - .padding(8.dp), - watched = item.movie!!.watched, - started = (item.movie.progress ?: 0.0) > 0 - ) - BaseItemKind.EPISODE -> WatchStateIndicator( - size = 28, - modifier = Modifier.align(Alignment.TopEnd) - .padding(8.dp), - watched = item.episode!!.watched, - started = (item.episode.progress ?: 0.0) > 0 - ) + BaseItemKind.MOVIE -> { + val m = item.movie!! + WatchStateIndicator( + size = 28, + modifier = Modifier.align(Alignment.TopEnd) + .padding(8.dp), + watched = m.watched, + started = (m.progress ?: 0.0) > 0 + ) + } + BaseItemKind.EPISODE -> { + val ep = item.episode!! + WatchStateIndicator( + size = 28, + modifier = Modifier.align(Alignment.TopEnd) + .padding(8.dp), + watched = ep.watched, + started = (ep.progress ?: 0.0) > 0 + ) + } BaseItemKind.SERIES -> UnwatchedEpisodeIndicator( size = 28, modifier = Modifier.align(Alignment.TopEnd) diff --git a/app/src/main/java/hu/bbara/purefin/login/ui/LoginScreen.kt b/app/src/main/java/hu/bbara/purefin/login/ui/LoginScreen.kt index 52af391..2291d44 100644 --- a/app/src/main/java/hu/bbara/purefin/login/ui/LoginScreen.kt +++ b/app/src/main/java/hu/bbara/purefin/login/ui/LoginScreen.kt @@ -41,7 +41,7 @@ import hu.bbara.purefin.common.ui.PurefinComplexTextField import hu.bbara.purefin.common.ui.PurefinPasswordField import hu.bbara.purefin.common.ui.PurefinTextButton import hu.bbara.purefin.common.ui.PurefinWaitingScreen -import hu.bbara.purefin.login.viewmodel.LoginViewModel +import hu.bbara.purefin.feature.shared.login.LoginViewModel import kotlinx.coroutines.launch @Composable diff --git a/app/src/main/java/hu/bbara/purefin/navigation/NavigationModule.kt b/app/src/main/java/hu/bbara/purefin/navigation/NavigationModule.kt index c2f31d5..bf42c4a 100644 --- a/app/src/main/java/hu/bbara/purefin/navigation/NavigationModule.kt +++ b/app/src/main/java/hu/bbara/purefin/navigation/NavigationModule.kt @@ -6,6 +6,7 @@ import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.android.components.ActivityRetainedComponent import dagger.multibindings.IntoSet +import hu.bbara.purefin.core.data.navigation.Route @Module @InstallIn(ActivityRetainedComponent::class) diff --git a/app/src/main/java/hu/bbara/purefin/navigation/RouteEntryBuilder.kt b/app/src/main/java/hu/bbara/purefin/navigation/RouteEntryBuilder.kt index 7a3a4bc..c77ef0d 100644 --- a/app/src/main/java/hu/bbara/purefin/navigation/RouteEntryBuilder.kt +++ b/app/src/main/java/hu/bbara/purefin/navigation/RouteEntryBuilder.kt @@ -6,6 +6,7 @@ import hu.bbara.purefin.app.content.movie.MovieScreen import hu.bbara.purefin.app.content.series.SeriesScreen import hu.bbara.purefin.app.home.HomePage import hu.bbara.purefin.app.library.ui.LibraryScreen +import hu.bbara.purefin.core.data.navigation.Route import hu.bbara.purefin.login.ui.LoginScreen fun EntryProviderScope.appRouteEntryBuilder() { diff --git a/app/src/main/java/hu/bbara/purefin/player/PlayerActivity.kt b/app/src/main/java/hu/bbara/purefin/player/PlayerActivity.kt index 71c464a..8b55a30 100644 --- a/app/src/main/java/hu/bbara/purefin/player/PlayerActivity.kt +++ b/app/src/main/java/hu/bbara/purefin/player/PlayerActivity.kt @@ -11,8 +11,8 @@ import androidx.core.view.WindowInsetsControllerCompat import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import dagger.hilt.android.AndroidEntryPoint +import hu.bbara.purefin.core.player.viewmodel.PlayerViewModel import hu.bbara.purefin.player.ui.PlayerScreen -import hu.bbara.purefin.player.viewmodel.PlayerViewModel import hu.bbara.purefin.ui.theme.AppTheme @AndroidEntryPoint diff --git a/app/src/main/java/hu/bbara/purefin/player/stream/MediaSourceSelector.kt b/app/src/main/java/hu/bbara/purefin/player/stream/MediaSourceSelector.kt deleted file mode 100644 index 47c688f..0000000 --- a/app/src/main/java/hu/bbara/purefin/player/stream/MediaSourceSelector.kt +++ /dev/null @@ -1,4 +0,0 @@ -package hu.bbara.purefin.player.stream - -class MediaSourceSelector { -} \ No newline at end of file diff --git a/app/src/main/java/hu/bbara/purefin/player/ui/PlayerScreen.kt b/app/src/main/java/hu/bbara/purefin/player/ui/PlayerScreen.kt index 5f08f7a..fc080e5 100644 --- a/app/src/main/java/hu/bbara/purefin/player/ui/PlayerScreen.kt +++ b/app/src/main/java/hu/bbara/purefin/player/ui/PlayerScreen.kt @@ -39,6 +39,7 @@ import androidx.media3.ui.AspectRatioFrameLayout import androidx.media3.ui.PlayerView import hu.bbara.purefin.common.ui.components.EmptyValueTimedVisibility import hu.bbara.purefin.common.ui.components.ValueChangeTimedVisibility +import hu.bbara.purefin.core.player.viewmodel.PlayerViewModel import hu.bbara.purefin.player.ui.components.PersistentOverlayContainer import hu.bbara.purefin.player.ui.components.PlayerAdjustmentIndicator import hu.bbara.purefin.player.ui.components.PlayerControlsOverlay @@ -46,7 +47,6 @@ import hu.bbara.purefin.player.ui.components.PlayerGesturesLayer import hu.bbara.purefin.player.ui.components.PlayerLoadingErrorEndCard import hu.bbara.purefin.player.ui.components.PlayerQueuePanel import hu.bbara.purefin.player.ui.components.rememberPersistentOverlayController -import hu.bbara.purefin.player.viewmodel.PlayerViewModel import kotlin.math.abs import kotlin.math.roundToInt diff --git a/app/src/main/java/hu/bbara/purefin/player/ui/components/PlayerControlsOverlay.kt b/app/src/main/java/hu/bbara/purefin/player/ui/components/PlayerControlsOverlay.kt index f9ffd31..c2dcafd 100644 --- a/app/src/main/java/hu/bbara/purefin/player/ui/components/PlayerControlsOverlay.kt +++ b/app/src/main/java/hu/bbara/purefin/player/ui/components/PlayerControlsOverlay.kt @@ -37,8 +37,8 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import hu.bbara.purefin.common.ui.components.GhostIconButton import hu.bbara.purefin.common.ui.components.PurefinIconButton -import hu.bbara.purefin.player.model.PlayerUiState -import hu.bbara.purefin.player.model.TrackOption +import hu.bbara.purefin.core.player.model.PlayerUiState +import hu.bbara.purefin.core.player.model.TrackOption @Composable fun PlayerControlsOverlay( diff --git a/app/src/main/java/hu/bbara/purefin/player/ui/components/PlayerLoadingErrorEndCard.kt b/app/src/main/java/hu/bbara/purefin/player/ui/components/PlayerLoadingErrorEndCard.kt index fec89ae..5382810 100644 --- a/app/src/main/java/hu/bbara/purefin/player/ui/components/PlayerLoadingErrorEndCard.kt +++ b/app/src/main/java/hu/bbara/purefin/player/ui/components/PlayerLoadingErrorEndCard.kt @@ -19,7 +19,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp -import hu.bbara.purefin.player.model.PlayerUiState +import hu.bbara.purefin.core.player.model.PlayerUiState @Composable fun PlayerLoadingErrorEndCard( diff --git a/app/src/main/java/hu/bbara/purefin/player/ui/components/PlayerQueuePanel.kt b/app/src/main/java/hu/bbara/purefin/player/ui/components/PlayerQueuePanel.kt index 42e3922..c271a65 100644 --- a/app/src/main/java/hu/bbara/purefin/player/ui/components/PlayerQueuePanel.kt +++ b/app/src/main/java/hu/bbara/purefin/player/ui/components/PlayerQueuePanel.kt @@ -31,7 +31,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import hu.bbara.purefin.common.ui.components.PurefinAsyncImage -import hu.bbara.purefin.player.model.PlayerUiState +import hu.bbara.purefin.core.player.model.PlayerUiState @Composable fun PlayerQueuePanel( diff --git a/app/src/main/java/hu/bbara/purefin/player/ui/components/PlayerSeekBar.kt b/app/src/main/java/hu/bbara/purefin/player/ui/components/PlayerSeekBar.kt index e360fd2..2def2fa 100644 --- a/app/src/main/java/hu/bbara/purefin/player/ui/components/PlayerSeekBar.kt +++ b/app/src/main/java/hu/bbara/purefin/player/ui/components/PlayerSeekBar.kt @@ -16,8 +16,8 @@ import androidx.compose.ui.geometry.Offset import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp -import hu.bbara.purefin.player.model.MarkerType -import hu.bbara.purefin.player.model.TimedMarker +import hu.bbara.purefin.core.player.model.MarkerType +import hu.bbara.purefin.core.player.model.TimedMarker @Composable fun PlayerSeekBar( diff --git a/app/src/main/java/hu/bbara/purefin/player/ui/components/TrackSelectionButtons.kt b/app/src/main/java/hu/bbara/purefin/player/ui/components/TrackSelectionButtons.kt index 7a267f1..8b14f87 100644 --- a/app/src/main/java/hu/bbara/purefin/player/ui/components/TrackSelectionButtons.kt +++ b/app/src/main/java/hu/bbara/purefin/player/ui/components/TrackSelectionButtons.kt @@ -27,7 +27,7 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import hu.bbara.purefin.common.ui.components.PurefinIconButton -import hu.bbara.purefin.player.model.TrackOption +import hu.bbara.purefin.core.player.model.TrackOption @Composable fun QualitySelectionButton( diff --git a/build.gradle.kts b/build.gradle.kts index 1b4e189..5950d80 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,8 +1,10 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { alias(libs.plugins.android.application) apply false + alias(libs.plugins.android.library) apply false alias(libs.plugins.kotlin.android) apply false alias(libs.plugins.kotlin.compose) apply false + alias(libs.plugins.kotlin.serialization) apply false alias(libs.plugins.ksp) apply false alias(libs.plugins.hilt) apply false } \ No newline at end of file diff --git a/core/data/build.gradle.kts b/core/data/build.gradle.kts new file mode 100644 index 0000000..9afea19 --- /dev/null +++ b/core/data/build.gradle.kts @@ -0,0 +1,52 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + +plugins { + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.android) + alias(libs.plugins.kotlin.compose) + alias(libs.plugins.kotlin.serialization) + alias(libs.plugins.hilt) + alias(libs.plugins.ksp) +} + +android { + namespace = "hu.bbara.purefin.core.data" + compileSdk = 36 + + defaultConfig { + minSdk = 29 + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + + buildFeatures { + compose = true + } +} + +kotlin { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_11) + } +} + +dependencies { + implementation(project(":core:model")) + implementation(libs.jellyfin.core) + implementation(libs.kotlinx.serialization.json) + implementation(libs.hilt) + ksp(libs.hilt.compiler) + implementation(libs.datastore) + implementation(libs.okhttp) + implementation(libs.logging.interceptor) + implementation(libs.coil.compose) + implementation(libs.coil.network.okhttp) + implementation(libs.androidx.room.ktx) + ksp(libs.androidx.room.compiler) + implementation(libs.androidx.navigation3.runtime) + implementation(platform(libs.androidx.compose.bom)) + implementation(libs.androidx.compose.ui) +} diff --git a/app/src/main/java/hu/bbara/purefin/data/ActiveMediaRepository.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/ActiveMediaRepository.kt similarity index 87% rename from app/src/main/java/hu/bbara/purefin/data/ActiveMediaRepository.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/ActiveMediaRepository.kt index 45ca20b..c46ad13 100644 --- a/app/src/main/java/hu/bbara/purefin/data/ActiveMediaRepository.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/ActiveMediaRepository.kt @@ -1,13 +1,14 @@ -package hu.bbara.purefin.data +package hu.bbara.purefin.core.data -import hu.bbara.purefin.data.local.room.OfflineRepository -import hu.bbara.purefin.data.local.room.OnlineRepository -import hu.bbara.purefin.data.model.Episode -import hu.bbara.purefin.data.model.Library -import hu.bbara.purefin.data.model.Media -import hu.bbara.purefin.data.model.Movie -import hu.bbara.purefin.data.model.Series -import hu.bbara.purefin.session.UserSessionRepository +import hu.bbara.purefin.core.data.local.room.OfflineRepository +import hu.bbara.purefin.core.data.local.room.OnlineRepository +import hu.bbara.purefin.core.data.session.UserSessionRepository +import hu.bbara.purefin.core.model.Episode +import hu.bbara.purefin.core.model.Library +import hu.bbara.purefin.core.model.Media +import hu.bbara.purefin.core.model.MediaRepositoryState +import hu.bbara.purefin.core.model.Movie +import hu.bbara.purefin.core.model.Series import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi diff --git a/app/src/main/java/hu/bbara/purefin/data/InMemoryMediaRepository.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/InMemoryMediaRepository.kt similarity index 95% rename from app/src/main/java/hu/bbara/purefin/data/InMemoryMediaRepository.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/InMemoryMediaRepository.kt index 2f1fe7a..c49bf38 100644 --- a/app/src/main/java/hu/bbara/purefin/data/InMemoryMediaRepository.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/InMemoryMediaRepository.kt @@ -1,20 +1,21 @@ -package hu.bbara.purefin.data +package hu.bbara.purefin.core.data import androidx.datastore.core.DataStore -import hu.bbara.purefin.client.JellyfinApiClient -import hu.bbara.purefin.data.cache.CachedMediaItem -import hu.bbara.purefin.data.cache.HomeCache -import hu.bbara.purefin.data.local.room.OfflineDatabase -import hu.bbara.purefin.data.local.room.OfflineRoomMediaLocalDataSource -import hu.bbara.purefin.data.local.room.RoomMediaLocalDataSource -import hu.bbara.purefin.data.model.Episode -import hu.bbara.purefin.data.model.Library -import hu.bbara.purefin.data.model.Media -import hu.bbara.purefin.data.model.Movie -import hu.bbara.purefin.data.model.Season -import hu.bbara.purefin.data.model.Series -import hu.bbara.purefin.image.JellyfinImageHelper -import hu.bbara.purefin.session.UserSessionRepository +import hu.bbara.purefin.core.data.cache.CachedMediaItem +import hu.bbara.purefin.core.data.cache.HomeCache +import hu.bbara.purefin.core.data.client.JellyfinApiClient +import hu.bbara.purefin.core.data.image.JellyfinImageHelper +import hu.bbara.purefin.core.data.local.room.OfflineDatabase +import hu.bbara.purefin.core.data.local.room.OfflineRoomMediaLocalDataSource +import hu.bbara.purefin.core.data.local.room.RoomMediaLocalDataSource +import hu.bbara.purefin.core.data.session.UserSessionRepository +import hu.bbara.purefin.core.model.Episode +import hu.bbara.purefin.core.model.Library +import hu.bbara.purefin.core.model.Media +import hu.bbara.purefin.core.model.MediaRepositoryState +import hu.bbara.purefin.core.model.Movie +import hu.bbara.purefin.core.model.Season +import hu.bbara.purefin.core.model.Series import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/java/hu/bbara/purefin/data/MediaRepository.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/MediaRepository.kt similarity index 70% rename from app/src/main/java/hu/bbara/purefin/data/MediaRepository.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/MediaRepository.kt index 489820d..bbae58c 100644 --- a/app/src/main/java/hu/bbara/purefin/data/MediaRepository.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/MediaRepository.kt @@ -1,10 +1,11 @@ -package hu.bbara.purefin.data +package hu.bbara.purefin.core.data -import hu.bbara.purefin.data.model.Episode -import hu.bbara.purefin.data.model.Library -import hu.bbara.purefin.data.model.Media -import hu.bbara.purefin.data.model.Movie -import hu.bbara.purefin.data.model.Series +import hu.bbara.purefin.core.model.Episode +import hu.bbara.purefin.core.model.Library +import hu.bbara.purefin.core.model.Media +import hu.bbara.purefin.core.model.MediaRepositoryState +import hu.bbara.purefin.core.model.Movie +import hu.bbara.purefin.core.model.Series import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.StateFlow import java.util.UUID diff --git a/app/src/main/java/hu/bbara/purefin/data/MediaRepositoryModule.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/MediaRepositoryModule.kt similarity index 79% rename from app/src/main/java/hu/bbara/purefin/data/MediaRepositoryModule.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/MediaRepositoryModule.kt index dc1c5f9..e80cb06 100644 --- a/app/src/main/java/hu/bbara/purefin/data/MediaRepositoryModule.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/MediaRepositoryModule.kt @@ -1,11 +1,11 @@ -package hu.bbara.purefin.data +package hu.bbara.purefin.core.data import dagger.Binds import dagger.Module import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent -import hu.bbara.purefin.data.local.room.OnlineRepository -import hu.bbara.purefin.data.local.room.OfflineRepository +import hu.bbara.purefin.core.data.local.room.OfflineRepository +import hu.bbara.purefin.core.data.local.room.OnlineRepository @Module @InstallIn(SingletonComponent::class) diff --git a/app/src/main/java/hu/bbara/purefin/data/OfflineMediaRepository.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/OfflineMediaRepository.kt similarity index 86% rename from app/src/main/java/hu/bbara/purefin/data/OfflineMediaRepository.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/OfflineMediaRepository.kt index b6a8e61..1875f38 100644 --- a/app/src/main/java/hu/bbara/purefin/data/OfflineMediaRepository.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/OfflineMediaRepository.kt @@ -1,12 +1,13 @@ -package hu.bbara.purefin.data +package hu.bbara.purefin.core.data -import hu.bbara.purefin.data.local.room.OfflineDatabase -import hu.bbara.purefin.data.local.room.OfflineRoomMediaLocalDataSource -import hu.bbara.purefin.data.model.Episode -import hu.bbara.purefin.data.model.Library -import hu.bbara.purefin.data.model.Media -import hu.bbara.purefin.data.model.Movie -import hu.bbara.purefin.data.model.Series +import hu.bbara.purefin.core.data.local.room.OfflineDatabase +import hu.bbara.purefin.core.data.local.room.OfflineRoomMediaLocalDataSource +import hu.bbara.purefin.core.model.Episode +import hu.bbara.purefin.core.model.Library +import hu.bbara.purefin.core.model.Media +import hu.bbara.purefin.core.model.MediaRepositoryState +import hu.bbara.purefin.core.model.Movie +import hu.bbara.purefin.core.model.Series import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob diff --git a/app/src/main/java/hu/bbara/purefin/data/cache/HomeCache.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/cache/HomeCache.kt similarity index 90% rename from app/src/main/java/hu/bbara/purefin/data/cache/HomeCache.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/cache/HomeCache.kt index dc08861..2c01de2 100644 --- a/app/src/main/java/hu/bbara/purefin/data/cache/HomeCache.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/cache/HomeCache.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.data.cache +package hu.bbara.purefin.core.data.cache import kotlinx.serialization.Serializable diff --git a/app/src/main/java/hu/bbara/purefin/data/cache/HomeCacheModule.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/cache/HomeCacheModule.kt similarity index 95% rename from app/src/main/java/hu/bbara/purefin/data/cache/HomeCacheModule.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/cache/HomeCacheModule.kt index 740546c..8aaaa82 100644 --- a/app/src/main/java/hu/bbara/purefin/data/cache/HomeCacheModule.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/cache/HomeCacheModule.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.data.cache +package hu.bbara.purefin.core.data.cache import android.content.Context import androidx.datastore.core.DataStore diff --git a/app/src/main/java/hu/bbara/purefin/data/cache/HomeCacheSerializer.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/cache/HomeCacheSerializer.kt similarity index 95% rename from app/src/main/java/hu/bbara/purefin/data/cache/HomeCacheSerializer.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/cache/HomeCacheSerializer.kt index ecdbc7d..a27d962 100644 --- a/app/src/main/java/hu/bbara/purefin/data/cache/HomeCacheSerializer.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/cache/HomeCacheSerializer.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.data.cache +package hu.bbara.purefin.core.data.cache import androidx.datastore.core.CorruptionException import androidx.datastore.core.Serializer diff --git a/app/src/main/java/hu/bbara/purefin/client/AndroidDeviceProfile.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/client/AndroidDeviceProfile.kt similarity index 99% rename from app/src/main/java/hu/bbara/purefin/client/AndroidDeviceProfile.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/client/AndroidDeviceProfile.kt index 28d432f..bfd37cb 100644 --- a/app/src/main/java/hu/bbara/purefin/client/AndroidDeviceProfile.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/client/AndroidDeviceProfile.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.client +package hu.bbara.purefin.core.data.client import android.media.MediaCodecList import android.util.Log diff --git a/app/src/main/java/hu/bbara/purefin/client/CodecDebugHelper.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/client/CodecDebugHelper.kt similarity index 96% rename from app/src/main/java/hu/bbara/purefin/client/CodecDebugHelper.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/client/CodecDebugHelper.kt index f81adfa..b12e9b3 100644 --- a/app/src/main/java/hu/bbara/purefin/client/CodecDebugHelper.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/client/CodecDebugHelper.kt @@ -1,6 +1,5 @@ -package hu.bbara.purefin.client +package hu.bbara.purefin.core.data.client -import android.media.MediaCodecInfo import android.media.MediaCodecList import android.util.Log diff --git a/app/src/main/java/hu/bbara/purefin/client/JellyfinApiClient.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/client/JellyfinApiClient.kt similarity index 99% rename from app/src/main/java/hu/bbara/purefin/client/JellyfinApiClient.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/client/JellyfinApiClient.kt index c27c5f9..63ccb80 100644 --- a/app/src/main/java/hu/bbara/purefin/client/JellyfinApiClient.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/client/JellyfinApiClient.kt @@ -1,9 +1,9 @@ -package hu.bbara.purefin.client +package hu.bbara.purefin.core.data.client import android.content.Context import android.util.Log import dagger.hilt.android.qualifiers.ApplicationContext -import hu.bbara.purefin.session.UserSessionRepository +import hu.bbara.purefin.core.data.session.UserSessionRepository import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.first import kotlinx.coroutines.withContext diff --git a/app/src/main/java/hu/bbara/purefin/client/JellyfinAuthInterceptor.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/client/JellyfinAuthInterceptor.kt similarity index 89% rename from app/src/main/java/hu/bbara/purefin/client/JellyfinAuthInterceptor.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/client/JellyfinAuthInterceptor.kt index dd670c4..067b883 100644 --- a/app/src/main/java/hu/bbara/purefin/client/JellyfinAuthInterceptor.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/client/JellyfinAuthInterceptor.kt @@ -1,6 +1,6 @@ -package hu.bbara.purefin.client +package hu.bbara.purefin.core.data.client -import hu.bbara.purefin.session.UserSessionRepository +import hu.bbara.purefin.core.data.session.UserSessionRepository import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob diff --git a/app/src/main/java/hu/bbara/purefin/domain/usecase/RefreshHomeDataUseCase.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/domain/usecase/RefreshHomeDataUseCase.kt similarity index 67% rename from app/src/main/java/hu/bbara/purefin/domain/usecase/RefreshHomeDataUseCase.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/domain/usecase/RefreshHomeDataUseCase.kt index f85ebb1..b9e78bd 100644 --- a/app/src/main/java/hu/bbara/purefin/domain/usecase/RefreshHomeDataUseCase.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/domain/usecase/RefreshHomeDataUseCase.kt @@ -1,6 +1,6 @@ -package hu.bbara.purefin.domain.usecase +package hu.bbara.purefin.core.data.domain.usecase -import hu.bbara.purefin.data.MediaRepository +import hu.bbara.purefin.core.data.MediaRepository import javax.inject.Inject class RefreshHomeDataUseCase @Inject constructor( diff --git a/app/src/main/java/hu/bbara/purefin/domain/usecase/UpdateWatchProgressUseCase.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/domain/usecase/UpdateWatchProgressUseCase.kt similarity index 76% rename from app/src/main/java/hu/bbara/purefin/domain/usecase/UpdateWatchProgressUseCase.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/domain/usecase/UpdateWatchProgressUseCase.kt index 56397b0..a079064 100644 --- a/app/src/main/java/hu/bbara/purefin/domain/usecase/UpdateWatchProgressUseCase.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/domain/usecase/UpdateWatchProgressUseCase.kt @@ -1,6 +1,6 @@ -package hu.bbara.purefin.domain.usecase +package hu.bbara.purefin.core.data.domain.usecase -import hu.bbara.purefin.data.MediaRepository +import hu.bbara.purefin.core.data.MediaRepository import java.util.UUID import javax.inject.Inject diff --git a/app/src/main/java/hu/bbara/purefin/image/ImageModule.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/image/ImageModule.kt similarity index 81% rename from app/src/main/java/hu/bbara/purefin/image/ImageModule.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/image/ImageModule.kt index 40863b3..9b132cb 100644 --- a/app/src/main/java/hu/bbara/purefin/image/ImageModule.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/image/ImageModule.kt @@ -1,10 +1,10 @@ -package hu.bbara.purefin.image +package hu.bbara.purefin.core.data.image import dagger.Module import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent -import hu.bbara.purefin.client.JellyfinAuthInterceptor +import hu.bbara.purefin.core.data.client.JellyfinAuthInterceptor import okhttp3.OkHttpClient import javax.inject.Singleton diff --git a/app/src/main/java/hu/bbara/purefin/image/JellyfinImageHelper.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/image/JellyfinImageHelper.kt similarity index 92% rename from app/src/main/java/hu/bbara/purefin/image/JellyfinImageHelper.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/image/JellyfinImageHelper.kt index 0ccb8cd..fea52e1 100644 --- a/app/src/main/java/hu/bbara/purefin/image/JellyfinImageHelper.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/image/JellyfinImageHelper.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.image +package hu.bbara.purefin.core.data.image import org.jellyfin.sdk.model.UUID import org.jellyfin.sdk.model.api.ImageType diff --git a/app/src/main/java/hu/bbara/purefin/data/local/room/CastMemberEntity.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/CastMemberEntity.kt similarity index 91% rename from app/src/main/java/hu/bbara/purefin/data/local/room/CastMemberEntity.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/local/room/CastMemberEntity.kt index 7463def..9c33f32 100644 --- a/app/src/main/java/hu/bbara/purefin/data/local/room/CastMemberEntity.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/CastMemberEntity.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.data.local.room +package hu.bbara.purefin.core.data.local.room import androidx.room.Entity import androidx.room.Index diff --git a/app/src/main/java/hu/bbara/purefin/data/local/room/DatabaseQualifiers.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/DatabaseQualifiers.kt similarity index 95% rename from app/src/main/java/hu/bbara/purefin/data/local/room/DatabaseQualifiers.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/local/room/DatabaseQualifiers.kt index 00ce1c4..99e7508 100644 --- a/app/src/main/java/hu/bbara/purefin/data/local/room/DatabaseQualifiers.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/DatabaseQualifiers.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.data.local.room +package hu.bbara.purefin.core.data.local.room import javax.inject.Qualifier diff --git a/app/src/main/java/hu/bbara/purefin/data/local/room/EpisodeEntity.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/EpisodeEntity.kt similarity index 94% rename from app/src/main/java/hu/bbara/purefin/data/local/room/EpisodeEntity.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/local/room/EpisodeEntity.kt index 36596ab..617fa09 100644 --- a/app/src/main/java/hu/bbara/purefin/data/local/room/EpisodeEntity.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/EpisodeEntity.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.data.local.room +package hu.bbara.purefin.core.data.local.room import androidx.room.Entity import androidx.room.ForeignKey diff --git a/app/src/main/java/hu/bbara/purefin/data/local/room/LibraryEntity.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/LibraryEntity.kt similarity index 82% rename from app/src/main/java/hu/bbara/purefin/data/local/room/LibraryEntity.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/local/room/LibraryEntity.kt index 4216f69..056923c 100644 --- a/app/src/main/java/hu/bbara/purefin/data/local/room/LibraryEntity.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/LibraryEntity.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.data.local.room +package hu.bbara.purefin.core.data.local.room import androidx.room.Entity import androidx.room.PrimaryKey diff --git a/app/src/main/java/hu/bbara/purefin/data/local/room/MediaDatabase.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/MediaDatabase.kt similarity index 63% rename from app/src/main/java/hu/bbara/purefin/data/local/room/MediaDatabase.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/local/room/MediaDatabase.kt index 131b558..4fa7b2b 100644 --- a/app/src/main/java/hu/bbara/purefin/data/local/room/MediaDatabase.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/MediaDatabase.kt @@ -1,14 +1,15 @@ -package hu.bbara.purefin.data.local.room +package hu.bbara.purefin.core.data.local.room import androidx.room.Database import androidx.room.RoomDatabase import androidx.room.TypeConverters -import hu.bbara.purefin.data.local.room.dao.CastMemberDao -import hu.bbara.purefin.data.local.room.dao.EpisodeDao -import hu.bbara.purefin.data.local.room.dao.MovieDao -import hu.bbara.purefin.data.local.room.dao.SeasonDao -import hu.bbara.purefin.data.local.room.dao.SeriesDao -import hu.bbara.purefin.data.local.room.dao.LibraryDao +import hu.bbara.purefin.core.data.local.room.dao.CastMemberDao +import hu.bbara.purefin.core.data.local.room.dao.EpisodeDao +import hu.bbara.purefin.core.data.local.room.dao.LibraryDao +import hu.bbara.purefin.core.data.local.room.dao.MovieDao +import hu.bbara.purefin.core.data.local.room.dao.SeasonDao +import hu.bbara.purefin.core.data.local.room.dao.SeriesDao + @Database( entities = [ MovieEntity::class, diff --git a/app/src/main/java/hu/bbara/purefin/data/local/room/MediaDatabaseModule.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/MediaDatabaseModule.kt similarity index 90% rename from app/src/main/java/hu/bbara/purefin/data/local/room/MediaDatabaseModule.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/local/room/MediaDatabaseModule.kt index c3565a5..f0103d6 100644 --- a/app/src/main/java/hu/bbara/purefin/data/local/room/MediaDatabaseModule.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/MediaDatabaseModule.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.data.local.room +package hu.bbara.purefin.core.data.local.room import android.content.Context import androidx.room.Room @@ -7,12 +7,12 @@ import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent -import hu.bbara.purefin.data.local.room.dao.CastMemberDao -import hu.bbara.purefin.data.local.room.dao.EpisodeDao -import hu.bbara.purefin.data.local.room.dao.LibraryDao -import hu.bbara.purefin.data.local.room.dao.MovieDao -import hu.bbara.purefin.data.local.room.dao.SeasonDao -import hu.bbara.purefin.data.local.room.dao.SeriesDao +import hu.bbara.purefin.core.data.local.room.dao.CastMemberDao +import hu.bbara.purefin.core.data.local.room.dao.EpisodeDao +import hu.bbara.purefin.core.data.local.room.dao.LibraryDao +import hu.bbara.purefin.core.data.local.room.dao.MovieDao +import hu.bbara.purefin.core.data.local.room.dao.SeasonDao +import hu.bbara.purefin.core.data.local.room.dao.SeriesDao import javax.inject.Singleton @Module diff --git a/app/src/main/java/hu/bbara/purefin/data/local/room/MovieEntity.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/MovieEntity.kt similarity index 94% rename from app/src/main/java/hu/bbara/purefin/data/local/room/MovieEntity.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/local/room/MovieEntity.kt index 0cd005d..c1236bb 100644 --- a/app/src/main/java/hu/bbara/purefin/data/local/room/MovieEntity.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/MovieEntity.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.data.local.room +package hu.bbara.purefin.core.data.local.room import androidx.room.Entity import androidx.room.ForeignKey diff --git a/app/src/main/java/hu/bbara/purefin/data/local/room/OfflineMediaDatabase.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/OfflineMediaDatabase.kt similarity index 63% rename from app/src/main/java/hu/bbara/purefin/data/local/room/OfflineMediaDatabase.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/local/room/OfflineMediaDatabase.kt index c6c8e8e..6d61bde 100644 --- a/app/src/main/java/hu/bbara/purefin/data/local/room/OfflineMediaDatabase.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/OfflineMediaDatabase.kt @@ -1,14 +1,14 @@ -package hu.bbara.purefin.data.local.room +package hu.bbara.purefin.core.data.local.room import androidx.room.Database import androidx.room.RoomDatabase import androidx.room.TypeConverters -import hu.bbara.purefin.data.local.room.dao.CastMemberDao -import hu.bbara.purefin.data.local.room.dao.EpisodeDao -import hu.bbara.purefin.data.local.room.dao.MovieDao -import hu.bbara.purefin.data.local.room.dao.SeasonDao -import hu.bbara.purefin.data.local.room.dao.SeriesDao -import hu.bbara.purefin.data.local.room.dao.LibraryDao +import hu.bbara.purefin.core.data.local.room.dao.CastMemberDao +import hu.bbara.purefin.core.data.local.room.dao.EpisodeDao +import hu.bbara.purefin.core.data.local.room.dao.LibraryDao +import hu.bbara.purefin.core.data.local.room.dao.MovieDao +import hu.bbara.purefin.core.data.local.room.dao.SeasonDao +import hu.bbara.purefin.core.data.local.room.dao.SeriesDao @Database( entities = [ diff --git a/app/src/main/java/hu/bbara/purefin/data/local/room/OfflineRoomMediaLocalDataSource.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/OfflineRoomMediaLocalDataSource.kt similarity index 94% rename from app/src/main/java/hu/bbara/purefin/data/local/room/OfflineRoomMediaLocalDataSource.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/local/room/OfflineRoomMediaLocalDataSource.kt index bfc80e9..4a9bb75 100644 --- a/app/src/main/java/hu/bbara/purefin/data/local/room/OfflineRoomMediaLocalDataSource.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/OfflineRoomMediaLocalDataSource.kt @@ -1,23 +1,22 @@ -package hu.bbara.purefin.data.local.room +package hu.bbara.purefin.core.data.local.room import androidx.room.withTransaction -import hu.bbara.purefin.data.local.room.dao.CastMemberDao -import hu.bbara.purefin.data.local.room.dao.EpisodeDao -import hu.bbara.purefin.data.local.room.dao.LibraryDao -import hu.bbara.purefin.data.local.room.dao.MovieDao -import hu.bbara.purefin.data.local.room.dao.SeasonDao -import hu.bbara.purefin.data.local.room.dao.SeriesDao -import hu.bbara.purefin.data.model.CastMember -import hu.bbara.purefin.data.model.Episode -import hu.bbara.purefin.data.model.Library -import hu.bbara.purefin.data.model.Movie -import hu.bbara.purefin.data.model.Season -import hu.bbara.purefin.data.model.Series +import hu.bbara.purefin.core.data.local.room.dao.CastMemberDao +import hu.bbara.purefin.core.data.local.room.dao.EpisodeDao +import hu.bbara.purefin.core.data.local.room.dao.LibraryDao +import hu.bbara.purefin.core.data.local.room.dao.MovieDao +import hu.bbara.purefin.core.data.local.room.dao.SeasonDao +import hu.bbara.purefin.core.data.local.room.dao.SeriesDao +import hu.bbara.purefin.core.model.CastMember +import hu.bbara.purefin.core.model.Episode +import hu.bbara.purefin.core.model.Library +import hu.bbara.purefin.core.model.Movie +import hu.bbara.purefin.core.model.Season +import hu.bbara.purefin.core.model.Series import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map import org.jellyfin.sdk.model.api.CollectionType import java.util.UUID -import javax.inject.Inject import javax.inject.Singleton @Singleton diff --git a/app/src/main/java/hu/bbara/purefin/data/local/room/RoomMediaLocalDataSource.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/RoomMediaLocalDataSource.kt similarity index 94% rename from app/src/main/java/hu/bbara/purefin/data/local/room/RoomMediaLocalDataSource.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/local/room/RoomMediaLocalDataSource.kt index 976ddd1..3d91762 100644 --- a/app/src/main/java/hu/bbara/purefin/data/local/room/RoomMediaLocalDataSource.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/RoomMediaLocalDataSource.kt @@ -1,24 +1,23 @@ -package hu.bbara.purefin.data.local.room +package hu.bbara.purefin.core.data.local.room import androidx.room.withTransaction -import hu.bbara.purefin.data.local.room.dao.CastMemberDao -import hu.bbara.purefin.data.local.room.dao.EpisodeDao -import hu.bbara.purefin.data.local.room.dao.LibraryDao -import hu.bbara.purefin.data.local.room.dao.MovieDao -import hu.bbara.purefin.data.local.room.dao.SeasonDao -import hu.bbara.purefin.data.local.room.dao.SeriesDao -import hu.bbara.purefin.data.model.CastMember -import hu.bbara.purefin.data.model.Episode -import hu.bbara.purefin.data.model.Library -import hu.bbara.purefin.data.model.Movie -import hu.bbara.purefin.data.model.Season -import hu.bbara.purefin.data.model.Series +import hu.bbara.purefin.core.data.local.room.dao.CastMemberDao +import hu.bbara.purefin.core.data.local.room.dao.EpisodeDao +import hu.bbara.purefin.core.data.local.room.dao.LibraryDao +import hu.bbara.purefin.core.data.local.room.dao.MovieDao +import hu.bbara.purefin.core.data.local.room.dao.SeasonDao +import hu.bbara.purefin.core.data.local.room.dao.SeriesDao +import hu.bbara.purefin.core.model.CastMember +import hu.bbara.purefin.core.model.Episode +import hu.bbara.purefin.core.model.Library +import hu.bbara.purefin.core.model.Movie +import hu.bbara.purefin.core.model.Season +import hu.bbara.purefin.core.model.Series import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map import org.jellyfin.sdk.model.api.CollectionType import java.util.UUID import javax.inject.Singleton -import kotlin.collections.map @Singleton class RoomMediaLocalDataSource( diff --git a/app/src/main/java/hu/bbara/purefin/data/local/room/RoomRelations.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/RoomRelations.kt similarity index 94% rename from app/src/main/java/hu/bbara/purefin/data/local/room/RoomRelations.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/local/room/RoomRelations.kt index 2cd99df..6178021 100644 --- a/app/src/main/java/hu/bbara/purefin/data/local/room/RoomRelations.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/RoomRelations.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.data.local.room +package hu.bbara.purefin.core.data.local.room import androidx.room.Embedded import androidx.room.Relation diff --git a/app/src/main/java/hu/bbara/purefin/data/local/room/SeasonEntity.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/SeasonEntity.kt similarity index 93% rename from app/src/main/java/hu/bbara/purefin/data/local/room/SeasonEntity.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/local/room/SeasonEntity.kt index 8601ef06..2cc38fe 100644 --- a/app/src/main/java/hu/bbara/purefin/data/local/room/SeasonEntity.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/SeasonEntity.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.data.local.room +package hu.bbara.purefin.core.data.local.room import androidx.room.Entity import androidx.room.ForeignKey diff --git a/app/src/main/java/hu/bbara/purefin/data/local/room/SeriesEntity.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/SeriesEntity.kt similarity index 93% rename from app/src/main/java/hu/bbara/purefin/data/local/room/SeriesEntity.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/local/room/SeriesEntity.kt index fe28673..f5ff477 100644 --- a/app/src/main/java/hu/bbara/purefin/data/local/room/SeriesEntity.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/SeriesEntity.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.data.local.room +package hu.bbara.purefin.core.data.local.room import androidx.room.Entity import androidx.room.ForeignKey diff --git a/app/src/main/java/hu/bbara/purefin/data/local/room/UuidConverters.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/UuidConverters.kt similarity index 87% rename from app/src/main/java/hu/bbara/purefin/data/local/room/UuidConverters.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/local/room/UuidConverters.kt index aed88e5..d1f8cdb 100644 --- a/app/src/main/java/hu/bbara/purefin/data/local/room/UuidConverters.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/UuidConverters.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.data.local.room +package hu.bbara.purefin.core.data.local.room import androidx.room.TypeConverter import java.util.UUID diff --git a/app/src/main/java/hu/bbara/purefin/data/local/room/dao/CastMemberDao.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/dao/CastMemberDao.kt similarity index 89% rename from app/src/main/java/hu/bbara/purefin/data/local/room/dao/CastMemberDao.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/local/room/dao/CastMemberDao.kt index 71bdd96..ef496b6 100644 --- a/app/src/main/java/hu/bbara/purefin/data/local/room/dao/CastMemberDao.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/dao/CastMemberDao.kt @@ -1,9 +1,9 @@ -package hu.bbara.purefin.data.local.room.dao +package hu.bbara.purefin.core.data.local.room.dao import androidx.room.Dao import androidx.room.Query import androidx.room.Upsert -import hu.bbara.purefin.data.local.room.CastMemberEntity +import hu.bbara.purefin.core.data.local.room.CastMemberEntity import java.util.UUID @Dao diff --git a/app/src/main/java/hu/bbara/purefin/data/local/room/dao/EpisodeDao.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/dao/EpisodeDao.kt similarity index 92% rename from app/src/main/java/hu/bbara/purefin/data/local/room/dao/EpisodeDao.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/local/room/dao/EpisodeDao.kt index cfdd003..30fff42 100644 --- a/app/src/main/java/hu/bbara/purefin/data/local/room/dao/EpisodeDao.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/dao/EpisodeDao.kt @@ -1,9 +1,9 @@ -package hu.bbara.purefin.data.local.room.dao +package hu.bbara.purefin.core.data.local.room.dao import androidx.room.Dao import androidx.room.Query import androidx.room.Upsert -import hu.bbara.purefin.data.local.room.EpisodeEntity +import hu.bbara.purefin.core.data.local.room.EpisodeEntity import kotlinx.coroutines.flow.Flow import java.util.UUID diff --git a/app/src/main/java/hu/bbara/purefin/data/local/room/dao/LibraryDao.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/dao/LibraryDao.kt similarity index 77% rename from app/src/main/java/hu/bbara/purefin/data/local/room/dao/LibraryDao.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/local/room/dao/LibraryDao.kt index 0ca53d1..6293622 100644 --- a/app/src/main/java/hu/bbara/purefin/data/local/room/dao/LibraryDao.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/dao/LibraryDao.kt @@ -1,10 +1,10 @@ -package hu.bbara.purefin.data.local.room.dao +package hu.bbara.purefin.core.data.local.room.dao import androidx.room.Dao import androidx.room.Query import androidx.room.Upsert -import hu.bbara.purefin.data.local.room.LibraryEntity -import hu.bbara.purefin.data.local.room.LibraryWithContent +import hu.bbara.purefin.core.data.local.room.LibraryEntity +import hu.bbara.purefin.core.data.local.room.LibraryWithContent import kotlinx.coroutines.flow.Flow @Dao diff --git a/app/src/main/java/hu/bbara/purefin/data/local/room/dao/MovieDao.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/dao/MovieDao.kt similarity index 88% rename from app/src/main/java/hu/bbara/purefin/data/local/room/dao/MovieDao.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/local/room/dao/MovieDao.kt index ee07a4b..17da509 100644 --- a/app/src/main/java/hu/bbara/purefin/data/local/room/dao/MovieDao.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/dao/MovieDao.kt @@ -1,9 +1,9 @@ -package hu.bbara.purefin.data.local.room.dao +package hu.bbara.purefin.core.data.local.room.dao import androidx.room.Dao import androidx.room.Query import androidx.room.Upsert -import hu.bbara.purefin.data.local.room.MovieEntity +import hu.bbara.purefin.core.data.local.room.MovieEntity import kotlinx.coroutines.flow.Flow import java.util.UUID diff --git a/app/src/main/java/hu/bbara/purefin/data/local/room/dao/SeasonDao.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/dao/SeasonDao.kt similarity index 87% rename from app/src/main/java/hu/bbara/purefin/data/local/room/dao/SeasonDao.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/local/room/dao/SeasonDao.kt index 6eb6118..24129f2 100644 --- a/app/src/main/java/hu/bbara/purefin/data/local/room/dao/SeasonDao.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/dao/SeasonDao.kt @@ -1,9 +1,9 @@ -package hu.bbara.purefin.data.local.room.dao +package hu.bbara.purefin.core.data.local.room.dao import androidx.room.Dao import androidx.room.Query import androidx.room.Upsert -import hu.bbara.purefin.data.local.room.SeasonEntity +import hu.bbara.purefin.core.data.local.room.SeasonEntity import java.util.UUID @Dao diff --git a/app/src/main/java/hu/bbara/purefin/data/local/room/dao/SeriesDao.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/dao/SeriesDao.kt similarity index 83% rename from app/src/main/java/hu/bbara/purefin/data/local/room/dao/SeriesDao.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/local/room/dao/SeriesDao.kt index 25f9102..396dc9e 100644 --- a/app/src/main/java/hu/bbara/purefin/data/local/room/dao/SeriesDao.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/local/room/dao/SeriesDao.kt @@ -1,11 +1,11 @@ -package hu.bbara.purefin.data.local.room.dao +package hu.bbara.purefin.core.data.local.room.dao import androidx.room.Dao import androidx.room.Query import androidx.room.Transaction import androidx.room.Upsert -import hu.bbara.purefin.data.local.room.SeriesEntity -import hu.bbara.purefin.data.local.room.SeriesWithSeasonsAndEpisodes +import hu.bbara.purefin.core.data.local.room.SeriesEntity +import hu.bbara.purefin.core.data.local.room.SeriesWithSeasonsAndEpisodes import kotlinx.coroutines.flow.Flow import java.util.UUID diff --git a/app/src/main/java/hu/bbara/purefin/navigation/EpisodeDto.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/navigation/EpisodeDto.kt similarity index 88% rename from app/src/main/java/hu/bbara/purefin/navigation/EpisodeDto.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/navigation/EpisodeDto.kt index 720fa84..6991a98 100644 --- a/app/src/main/java/hu/bbara/purefin/navigation/EpisodeDto.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/navigation/EpisodeDto.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.navigation +package hu.bbara.purefin.core.data.navigation import kotlinx.serialization.Serializable import org.jellyfin.sdk.model.serializer.UUIDSerializer diff --git a/app/src/main/java/hu/bbara/purefin/navigation/LibraryDto.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/navigation/LibraryDto.kt similarity index 85% rename from app/src/main/java/hu/bbara/purefin/navigation/LibraryDto.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/navigation/LibraryDto.kt index f4f220d..9d33944 100644 --- a/app/src/main/java/hu/bbara/purefin/navigation/LibraryDto.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/navigation/LibraryDto.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.navigation +package hu.bbara.purefin.core.data.navigation import kotlinx.serialization.Serializable import org.jellyfin.sdk.model.UUID diff --git a/app/src/main/java/hu/bbara/purefin/navigation/MovieDto.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/navigation/MovieDto.kt similarity index 82% rename from app/src/main/java/hu/bbara/purefin/navigation/MovieDto.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/navigation/MovieDto.kt index 58c782f..9631879 100644 --- a/app/src/main/java/hu/bbara/purefin/navigation/MovieDto.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/navigation/MovieDto.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.navigation +package hu.bbara.purefin.core.data.navigation import kotlinx.serialization.Serializable import org.jellyfin.sdk.model.serializer.UUIDSerializer diff --git a/app/src/main/java/hu/bbara/purefin/navigation/NavigationManager.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/navigation/NavigationManager.kt similarity index 96% rename from app/src/main/java/hu/bbara/purefin/navigation/NavigationManager.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/navigation/NavigationManager.kt index c535f18..7d9b4a9 100644 --- a/app/src/main/java/hu/bbara/purefin/navigation/NavigationManager.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/navigation/NavigationManager.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.navigation +package hu.bbara.purefin.core.data.navigation import androidx.compose.runtime.ProvidableCompositionLocal import androidx.compose.runtime.staticCompositionLocalOf diff --git a/app/src/main/java/hu/bbara/purefin/navigation/NavigationManagerModule.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/navigation/NavigationManagerModule.kt similarity index 88% rename from app/src/main/java/hu/bbara/purefin/navigation/NavigationManagerModule.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/navigation/NavigationManagerModule.kt index e5c87b0..e143a89 100644 --- a/app/src/main/java/hu/bbara/purefin/navigation/NavigationManagerModule.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/navigation/NavigationManagerModule.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.navigation +package hu.bbara.purefin.core.data.navigation import dagger.Module import dagger.Provides diff --git a/app/src/main/java/hu/bbara/purefin/navigation/Route.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/navigation/Route.kt similarity index 92% rename from app/src/main/java/hu/bbara/purefin/navigation/Route.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/navigation/Route.kt index 2403582..f5bf938 100644 --- a/app/src/main/java/hu/bbara/purefin/navigation/Route.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/navigation/Route.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.navigation +package hu.bbara.purefin.core.data.navigation import androidx.navigation3.runtime.NavKey import kotlinx.serialization.Serializable diff --git a/app/src/main/java/hu/bbara/purefin/navigation/SeriesDto.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/navigation/SeriesDto.kt similarity index 83% rename from app/src/main/java/hu/bbara/purefin/navigation/SeriesDto.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/navigation/SeriesDto.kt index a750f67..9a5fa50 100644 --- a/app/src/main/java/hu/bbara/purefin/navigation/SeriesDto.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/navigation/SeriesDto.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.navigation +package hu.bbara.purefin.core.data.navigation import kotlinx.serialization.Serializable import org.jellyfin.sdk.model.serializer.UUIDSerializer diff --git a/app/src/main/java/hu/bbara/purefin/session/UserSession.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/session/UserSession.kt similarity index 89% rename from app/src/main/java/hu/bbara/purefin/session/UserSession.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/session/UserSession.kt index 3622a00..6dcf94f 100644 --- a/app/src/main/java/hu/bbara/purefin/session/UserSession.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/session/UserSession.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.session +package hu.bbara.purefin.core.data.session import kotlinx.serialization.Serializable import org.jellyfin.sdk.model.serializer.UUIDSerializer diff --git a/app/src/main/java/hu/bbara/purefin/session/UserSessionModule.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/session/UserSessionModule.kt similarity index 96% rename from app/src/main/java/hu/bbara/purefin/session/UserSessionModule.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/session/UserSessionModule.kt index 6e13047..867e826 100644 --- a/app/src/main/java/hu/bbara/purefin/session/UserSessionModule.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/session/UserSessionModule.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.session +package hu.bbara.purefin.core.data.session import android.content.Context import androidx.datastore.core.DataStore diff --git a/app/src/main/java/hu/bbara/purefin/session/UserSessionRepository.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/session/UserSessionRepository.kt similarity index 97% rename from app/src/main/java/hu/bbara/purefin/session/UserSessionRepository.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/session/UserSessionRepository.kt index de57eff..21b4219 100644 --- a/app/src/main/java/hu/bbara/purefin/session/UserSessionRepository.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/session/UserSessionRepository.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.session +package hu.bbara.purefin.core.data.session import androidx.datastore.core.DataStore import kotlinx.coroutines.flow.Flow diff --git a/app/src/main/java/hu/bbara/purefin/session/UserSessionSerializer.kt b/core/data/src/main/java/hu/bbara/purefin/core/data/session/UserSessionSerializer.kt similarity index 95% rename from app/src/main/java/hu/bbara/purefin/session/UserSessionSerializer.kt rename to core/data/src/main/java/hu/bbara/purefin/core/data/session/UserSessionSerializer.kt index 35ac4fa..f3f173e 100644 --- a/app/src/main/java/hu/bbara/purefin/session/UserSessionSerializer.kt +++ b/core/data/src/main/java/hu/bbara/purefin/core/data/session/UserSessionSerializer.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.session +package hu.bbara.purefin.core.data.session import androidx.datastore.core.CorruptionException import androidx.datastore.core.Serializer diff --git a/core/model/build.gradle.kts b/core/model/build.gradle.kts new file mode 100644 index 0000000..f0d118d --- /dev/null +++ b/core/model/build.gradle.kts @@ -0,0 +1,30 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + +plugins { + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.android) +} + +android { + namespace = "hu.bbara.purefin.core.model" + compileSdk = 36 + + defaultConfig { + minSdk = 29 + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } +} + +kotlin { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_11) + } +} + +dependencies { + implementation(libs.jellyfin.core) +} diff --git a/app/src/main/java/hu/bbara/purefin/data/model/CastMember.kt b/core/model/src/main/java/hu/bbara/purefin/core/model/CastMember.kt similarity index 71% rename from app/src/main/java/hu/bbara/purefin/data/model/CastMember.kt rename to core/model/src/main/java/hu/bbara/purefin/core/model/CastMember.kt index e25ace4..92c12b8 100644 --- a/app/src/main/java/hu/bbara/purefin/data/model/CastMember.kt +++ b/core/model/src/main/java/hu/bbara/purefin/core/model/CastMember.kt @@ -1,7 +1,7 @@ -package hu.bbara.purefin.data.model +package hu.bbara.purefin.core.model data class CastMember( val name: String, val role: String, val imageUrl: String? -) \ No newline at end of file +) diff --git a/app/src/main/java/hu/bbara/purefin/data/model/Episode.kt b/core/model/src/main/java/hu/bbara/purefin/core/model/Episode.kt similarity index 91% rename from app/src/main/java/hu/bbara/purefin/data/model/Episode.kt rename to core/model/src/main/java/hu/bbara/purefin/core/model/Episode.kt index ecc84ac..5cb1691 100644 --- a/app/src/main/java/hu/bbara/purefin/data/model/Episode.kt +++ b/core/model/src/main/java/hu/bbara/purefin/core/model/Episode.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.data.model +package hu.bbara.purefin.core.model import java.util.UUID diff --git a/app/src/main/java/hu/bbara/purefin/data/model/Library.kt b/core/model/src/main/java/hu/bbara/purefin/core/model/Library.kt similarity index 94% rename from app/src/main/java/hu/bbara/purefin/data/model/Library.kt rename to core/model/src/main/java/hu/bbara/purefin/core/model/Library.kt index 399a359..1c36060 100644 --- a/app/src/main/java/hu/bbara/purefin/data/model/Library.kt +++ b/core/model/src/main/java/hu/bbara/purefin/core/model/Library.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.data.model +package hu.bbara.purefin.core.model import org.jellyfin.sdk.model.api.CollectionType import java.util.UUID diff --git a/app/src/main/java/hu/bbara/purefin/data/model/Media.kt b/core/model/src/main/java/hu/bbara/purefin/core/model/Media.kt similarity index 93% rename from app/src/main/java/hu/bbara/purefin/data/model/Media.kt rename to core/model/src/main/java/hu/bbara/purefin/core/model/Media.kt index 20c19aa..adc42c5 100644 --- a/app/src/main/java/hu/bbara/purefin/data/model/Media.kt +++ b/core/model/src/main/java/hu/bbara/purefin/core/model/Media.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.data.model +package hu.bbara.purefin.core.model import org.jellyfin.sdk.model.api.BaseItemKind import java.util.UUID diff --git a/app/src/main/java/hu/bbara/purefin/data/MediaRepositoryState.kt b/core/model/src/main/java/hu/bbara/purefin/core/model/MediaRepositoryState.kt similarity index 85% rename from app/src/main/java/hu/bbara/purefin/data/MediaRepositoryState.kt rename to core/model/src/main/java/hu/bbara/purefin/core/model/MediaRepositoryState.kt index db6132d..63ec393 100644 --- a/app/src/main/java/hu/bbara/purefin/data/MediaRepositoryState.kt +++ b/core/model/src/main/java/hu/bbara/purefin/core/model/MediaRepositoryState.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.data +package hu.bbara.purefin.core.model sealed interface MediaRepositoryState { data object Loading : MediaRepositoryState diff --git a/app/src/main/java/hu/bbara/purefin/data/model/Movie.kt b/core/model/src/main/java/hu/bbara/purefin/core/model/Movie.kt similarity index 91% rename from app/src/main/java/hu/bbara/purefin/data/model/Movie.kt rename to core/model/src/main/java/hu/bbara/purefin/core/model/Movie.kt index e62cd6c..74eb21a 100644 --- a/app/src/main/java/hu/bbara/purefin/data/model/Movie.kt +++ b/core/model/src/main/java/hu/bbara/purefin/core/model/Movie.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.data.model +package hu.bbara.purefin.core.model import java.util.UUID diff --git a/app/src/main/java/hu/bbara/purefin/data/model/Season.kt b/core/model/src/main/java/hu/bbara/purefin/core/model/Season.kt similarity index 84% rename from app/src/main/java/hu/bbara/purefin/data/model/Season.kt rename to core/model/src/main/java/hu/bbara/purefin/core/model/Season.kt index 85f9b44..b01a43f 100644 --- a/app/src/main/java/hu/bbara/purefin/data/model/Season.kt +++ b/core/model/src/main/java/hu/bbara/purefin/core/model/Season.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.data.model +package hu.bbara.purefin.core.model import java.util.UUID @@ -10,5 +10,4 @@ data class Season( val unwatchedEpisodeCount: Int, val episodeCount: Int, val episodes: List -) { -} +) diff --git a/app/src/main/java/hu/bbara/purefin/data/model/Series.kt b/core/model/src/main/java/hu/bbara/purefin/core/model/Series.kt similarity index 88% rename from app/src/main/java/hu/bbara/purefin/data/model/Series.kt rename to core/model/src/main/java/hu/bbara/purefin/core/model/Series.kt index 2b6b3a9..4a0a9d3 100644 --- a/app/src/main/java/hu/bbara/purefin/data/model/Series.kt +++ b/core/model/src/main/java/hu/bbara/purefin/core/model/Series.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.data.model +package hu.bbara.purefin.core.model import java.util.UUID @@ -13,5 +13,4 @@ data class Series( val seasonCount: Int, val seasons: List, val cast: List -) { -} +) diff --git a/core/player/build.gradle.kts b/core/player/build.gradle.kts new file mode 100644 index 0000000..d176a9f --- /dev/null +++ b/core/player/build.gradle.kts @@ -0,0 +1,42 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + +plugins { + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.android) + alias(libs.plugins.kotlin.serialization) + alias(libs.plugins.hilt) + alias(libs.plugins.ksp) +} + +android { + namespace = "hu.bbara.purefin.core.player" + compileSdk = 36 + + defaultConfig { + minSdk = 29 + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } +} + +kotlin { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_11) + } +} + +dependencies { + implementation(project(":core:model")) + implementation(project(":core:data")) + implementation(libs.hilt) + ksp(libs.hilt.compiler) + implementation(libs.medi3.exoplayer) + implementation(libs.media3.datasource.okhttp) + implementation(libs.datastore) + implementation(libs.kotlinx.serialization.json) + implementation(libs.jellyfin.core) + implementation(libs.okhttp) +} diff --git a/app/src/main/java/hu/bbara/purefin/player/data/PlayerMediaRepository.kt b/core/player/src/main/java/hu/bbara/purefin/core/player/data/PlayerMediaRepository.kt similarity index 97% rename from app/src/main/java/hu/bbara/purefin/player/data/PlayerMediaRepository.kt rename to core/player/src/main/java/hu/bbara/purefin/core/player/data/PlayerMediaRepository.kt index ce76df0..d90ac58 100644 --- a/app/src/main/java/hu/bbara/purefin/player/data/PlayerMediaRepository.kt +++ b/core/player/src/main/java/hu/bbara/purefin/core/player/data/PlayerMediaRepository.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.player.data +package hu.bbara.purefin.core.player.data import android.util.Log import androidx.annotation.OptIn @@ -9,9 +9,9 @@ import androidx.media3.common.MediaMetadata import androidx.media3.common.MimeTypes import androidx.media3.common.util.UnstableApi import dagger.hilt.android.scopes.ViewModelScoped -import hu.bbara.purefin.client.JellyfinApiClient -import hu.bbara.purefin.image.JellyfinImageHelper -import hu.bbara.purefin.session.UserSessionRepository +import hu.bbara.purefin.core.data.client.JellyfinApiClient +import hu.bbara.purefin.core.data.image.JellyfinImageHelper +import hu.bbara.purefin.core.data.session.UserSessionRepository import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.first import kotlinx.coroutines.withContext diff --git a/app/src/main/java/hu/bbara/purefin/player/manager/PlayerManager.kt b/core/player/src/main/java/hu/bbara/purefin/core/player/manager/PlayerManager.kt similarity index 96% rename from app/src/main/java/hu/bbara/purefin/player/manager/PlayerManager.kt rename to core/player/src/main/java/hu/bbara/purefin/core/player/manager/PlayerManager.kt index 73e0f4e..ba2e996 100644 --- a/app/src/main/java/hu/bbara/purefin/player/manager/PlayerManager.kt +++ b/core/player/src/main/java/hu/bbara/purefin/core/player/manager/PlayerManager.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.player.manager +package hu.bbara.purefin.core.player.manager import androidx.annotation.OptIn import androidx.media3.common.C @@ -9,14 +9,13 @@ import androidx.media3.common.TrackSelectionOverride import androidx.media3.common.Tracks import androidx.media3.common.util.UnstableApi import dagger.hilt.android.scopes.ViewModelScoped -import hu.bbara.purefin.player.model.QueueItemUi -import hu.bbara.purefin.player.model.TrackOption -import hu.bbara.purefin.player.model.TrackType -import hu.bbara.purefin.player.preference.AudioTrackProperties -import hu.bbara.purefin.player.preference.SubtitleTrackProperties -import hu.bbara.purefin.player.preference.TrackMatcher -import hu.bbara.purefin.player.preference.TrackPreferencesRepository -import javax.inject.Inject +import hu.bbara.purefin.core.player.model.QueueItemUi +import hu.bbara.purefin.core.player.model.TrackOption +import hu.bbara.purefin.core.player.model.TrackType +import hu.bbara.purefin.core.player.preference.AudioTrackProperties +import hu.bbara.purefin.core.player.preference.SubtitleTrackProperties +import hu.bbara.purefin.core.player.preference.TrackMatcher +import hu.bbara.purefin.core.player.preference.TrackPreferencesRepository import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob @@ -29,6 +28,7 @@ import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.flow.update import kotlinx.coroutines.isActive import kotlinx.coroutines.launch +import javax.inject.Inject /** * Encapsulates the Media3 [Player] wiring and exposes reactive updates for the UI layer. diff --git a/app/src/main/java/hu/bbara/purefin/player/manager/ProgressManager.kt b/core/player/src/main/java/hu/bbara/purefin/core/player/manager/ProgressManager.kt similarity index 96% rename from app/src/main/java/hu/bbara/purefin/player/manager/ProgressManager.kt rename to core/player/src/main/java/hu/bbara/purefin/core/player/manager/ProgressManager.kt index 5c2cb94..8597b1b 100644 --- a/app/src/main/java/hu/bbara/purefin/player/manager/ProgressManager.kt +++ b/core/player/src/main/java/hu/bbara/purefin/core/player/manager/ProgressManager.kt @@ -1,9 +1,9 @@ -package hu.bbara.purefin.player.manager +package hu.bbara.purefin.core.player.manager import android.util.Log import dagger.hilt.android.scopes.ViewModelScoped -import hu.bbara.purefin.client.JellyfinApiClient -import hu.bbara.purefin.domain.usecase.UpdateWatchProgressUseCase +import hu.bbara.purefin.core.data.client.JellyfinApiClient +import hu.bbara.purefin.core.data.domain.usecase.UpdateWatchProgressUseCase import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job diff --git a/app/src/main/java/hu/bbara/purefin/player/manager/TrackMapper.kt b/core/player/src/main/java/hu/bbara/purefin/core/player/manager/TrackMapper.kt similarity index 97% rename from app/src/main/java/hu/bbara/purefin/player/manager/TrackMapper.kt rename to core/player/src/main/java/hu/bbara/purefin/core/player/manager/TrackMapper.kt index 3941afc..6747807 100644 --- a/app/src/main/java/hu/bbara/purefin/player/manager/TrackMapper.kt +++ b/core/player/src/main/java/hu/bbara/purefin/core/player/manager/TrackMapper.kt @@ -1,12 +1,12 @@ -package hu.bbara.purefin.player.manager +package hu.bbara.purefin.core.player.manager import androidx.annotation.OptIn import androidx.media3.common.C import androidx.media3.common.Format import androidx.media3.common.Tracks import androidx.media3.common.util.UnstableApi -import hu.bbara.purefin.player.model.TrackOption -import hu.bbara.purefin.player.model.TrackType +import hu.bbara.purefin.core.player.model.TrackOption +import hu.bbara.purefin.core.player.model.TrackType import javax.inject.Inject data class TrackSelectionState( diff --git a/app/src/main/java/hu/bbara/purefin/player/model/PlayerUiModels.kt b/core/player/src/main/java/hu/bbara/purefin/core/player/model/PlayerUiModels.kt similarity index 97% rename from app/src/main/java/hu/bbara/purefin/player/model/PlayerUiModels.kt rename to core/player/src/main/java/hu/bbara/purefin/core/player/model/PlayerUiModels.kt index c96592d..a35868e 100644 --- a/app/src/main/java/hu/bbara/purefin/player/model/PlayerUiModels.kt +++ b/core/player/src/main/java/hu/bbara/purefin/core/player/model/PlayerUiModels.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.player.model +package hu.bbara.purefin.core.player.model data class PlayerUiState( val isPlaying: Boolean = false, diff --git a/app/src/main/java/hu/bbara/purefin/player/model/VideoItem.kt b/core/player/src/main/java/hu/bbara/purefin/core/player/model/VideoItem.kt similarity index 78% rename from app/src/main/java/hu/bbara/purefin/player/model/VideoItem.kt rename to core/player/src/main/java/hu/bbara/purefin/core/player/model/VideoItem.kt index e788408..4c45990 100644 --- a/app/src/main/java/hu/bbara/purefin/player/model/VideoItem.kt +++ b/core/player/src/main/java/hu/bbara/purefin/core/player/model/VideoItem.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.player.model +package hu.bbara.purefin.core.player.model import android.net.Uri import androidx.media3.common.MediaItem diff --git a/app/src/main/java/hu/bbara/purefin/player/module/VideoPlayerModule.kt b/core/player/src/main/java/hu/bbara/purefin/core/player/module/VideoPlayerModule.kt similarity index 98% rename from app/src/main/java/hu/bbara/purefin/player/module/VideoPlayerModule.kt rename to core/player/src/main/java/hu/bbara/purefin/core/player/module/VideoPlayerModule.kt index aa7b141..9386701 100644 --- a/app/src/main/java/hu/bbara/purefin/player/module/VideoPlayerModule.kt +++ b/core/player/src/main/java/hu/bbara/purefin/core/player/module/VideoPlayerModule.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.player.module +package hu.bbara.purefin.core.player.module import android.app.Application import androidx.annotation.OptIn diff --git a/app/src/main/java/hu/bbara/purefin/player/preference/TrackMatcher.kt b/core/player/src/main/java/hu/bbara/purefin/core/player/preference/TrackMatcher.kt similarity index 95% rename from app/src/main/java/hu/bbara/purefin/player/preference/TrackMatcher.kt rename to core/player/src/main/java/hu/bbara/purefin/core/player/preference/TrackMatcher.kt index 1def1b0..975730d 100644 --- a/app/src/main/java/hu/bbara/purefin/player/preference/TrackMatcher.kt +++ b/core/player/src/main/java/hu/bbara/purefin/core/player/preference/TrackMatcher.kt @@ -1,7 +1,7 @@ -package hu.bbara.purefin.player.preference +package hu.bbara.purefin.core.player.preference -import hu.bbara.purefin.player.model.TrackOption -import hu.bbara.purefin.player.model.TrackType +import hu.bbara.purefin.core.player.model.TrackOption +import hu.bbara.purefin.core.player.model.TrackType import javax.inject.Inject class TrackMatcher @Inject constructor() { diff --git a/app/src/main/java/hu/bbara/purefin/player/preference/TrackPreference.kt b/core/player/src/main/java/hu/bbara/purefin/core/player/preference/TrackPreference.kt similarity index 93% rename from app/src/main/java/hu/bbara/purefin/player/preference/TrackPreference.kt rename to core/player/src/main/java/hu/bbara/purefin/core/player/preference/TrackPreference.kt index 2f1b5b4..df255e6 100644 --- a/app/src/main/java/hu/bbara/purefin/player/preference/TrackPreference.kt +++ b/core/player/src/main/java/hu/bbara/purefin/core/player/preference/TrackPreference.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.player.preference +package hu.bbara.purefin.core.player.preference import kotlinx.serialization.Serializable diff --git a/app/src/main/java/hu/bbara/purefin/player/preference/TrackPreferencesModule.kt b/core/player/src/main/java/hu/bbara/purefin/core/player/preference/TrackPreferencesModule.kt similarity index 96% rename from app/src/main/java/hu/bbara/purefin/player/preference/TrackPreferencesModule.kt rename to core/player/src/main/java/hu/bbara/purefin/core/player/preference/TrackPreferencesModule.kt index 7f46b71..cce6e26 100644 --- a/app/src/main/java/hu/bbara/purefin/player/preference/TrackPreferencesModule.kt +++ b/core/player/src/main/java/hu/bbara/purefin/core/player/preference/TrackPreferencesModule.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.player.preference +package hu.bbara.purefin.core.player.preference import android.content.Context import androidx.datastore.core.DataStore diff --git a/app/src/main/java/hu/bbara/purefin/player/preference/TrackPreferencesRepository.kt b/core/player/src/main/java/hu/bbara/purefin/core/player/preference/TrackPreferencesRepository.kt similarity index 97% rename from app/src/main/java/hu/bbara/purefin/player/preference/TrackPreferencesRepository.kt rename to core/player/src/main/java/hu/bbara/purefin/core/player/preference/TrackPreferencesRepository.kt index bc810a0..93b3937 100644 --- a/app/src/main/java/hu/bbara/purefin/player/preference/TrackPreferencesRepository.kt +++ b/core/player/src/main/java/hu/bbara/purefin/core/player/preference/TrackPreferencesRepository.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.player.preference +package hu.bbara.purefin.core.player.preference import androidx.datastore.core.DataStore import kotlinx.coroutines.flow.Flow diff --git a/app/src/main/java/hu/bbara/purefin/player/preference/TrackPreferencesSerializer.kt b/core/player/src/main/java/hu/bbara/purefin/core/player/preference/TrackPreferencesSerializer.kt similarity index 95% rename from app/src/main/java/hu/bbara/purefin/player/preference/TrackPreferencesSerializer.kt rename to core/player/src/main/java/hu/bbara/purefin/core/player/preference/TrackPreferencesSerializer.kt index 6e58bc1..02435e3 100644 --- a/app/src/main/java/hu/bbara/purefin/player/preference/TrackPreferencesSerializer.kt +++ b/core/player/src/main/java/hu/bbara/purefin/core/player/preference/TrackPreferencesSerializer.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.player.preference +package hu.bbara.purefin.core.player.preference import androidx.datastore.core.CorruptionException import androidx.datastore.core.Serializer diff --git a/core/player/src/main/java/hu/bbara/purefin/core/player/stream/MediaSourceSelector.kt b/core/player/src/main/java/hu/bbara/purefin/core/player/stream/MediaSourceSelector.kt new file mode 100644 index 0000000..c8503e7 --- /dev/null +++ b/core/player/src/main/java/hu/bbara/purefin/core/player/stream/MediaSourceSelector.kt @@ -0,0 +1,4 @@ +package hu.bbara.purefin.core.player.stream + +class MediaSourceSelector { +} \ No newline at end of file diff --git a/app/src/main/java/hu/bbara/purefin/player/viewmodel/PlayerViewModel.kt b/core/player/src/main/java/hu/bbara/purefin/core/player/viewmodel/PlayerViewModel.kt similarity index 94% rename from app/src/main/java/hu/bbara/purefin/player/viewmodel/PlayerViewModel.kt rename to core/player/src/main/java/hu/bbara/purefin/core/player/viewmodel/PlayerViewModel.kt index 9e30a7c..667beac 100644 --- a/app/src/main/java/hu/bbara/purefin/player/viewmodel/PlayerViewModel.kt +++ b/core/player/src/main/java/hu/bbara/purefin/core/player/viewmodel/PlayerViewModel.kt @@ -1,16 +1,16 @@ -package hu.bbara.purefin.player.viewmodel +package hu.bbara.purefin.core.player.viewmodel import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import hu.bbara.purefin.player.data.PlayerMediaRepository -import hu.bbara.purefin.data.MediaRepository -import hu.bbara.purefin.player.manager.MediaContext -import hu.bbara.purefin.player.manager.PlayerManager -import hu.bbara.purefin.player.manager.ProgressManager -import hu.bbara.purefin.player.model.PlayerUiState -import hu.bbara.purefin.player.model.TrackOption +import hu.bbara.purefin.core.data.MediaRepository +import hu.bbara.purefin.core.player.data.PlayerMediaRepository +import hu.bbara.purefin.core.player.manager.MediaContext +import hu.bbara.purefin.core.player.manager.PlayerManager +import hu.bbara.purefin.core.player.manager.ProgressManager +import hu.bbara.purefin.core.player.model.PlayerUiState +import hu.bbara.purefin.core.player.model.TrackOption import kotlinx.coroutines.Job import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow diff --git a/feature/download/build.gradle.kts b/feature/download/build.gradle.kts new file mode 100644 index 0000000..f64d614 --- /dev/null +++ b/feature/download/build.gradle.kts @@ -0,0 +1,39 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + +plugins { + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.android) + alias(libs.plugins.hilt) + alias(libs.plugins.ksp) +} + +android { + namespace = "hu.bbara.purefin.feature.download" + compileSdk = 36 + + defaultConfig { + minSdk = 29 + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } +} + +kotlin { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_11) + } +} + +dependencies { + implementation(project(":core:model")) + implementation(project(":core:data")) + implementation(libs.hilt) + ksp(libs.hilt.compiler) + implementation(libs.medi3.exoplayer) + implementation(libs.media3.datasource.okhttp) + implementation(libs.okhttp) + implementation(libs.jellyfin.core) +} diff --git a/app/src/main/java/hu/bbara/purefin/download/DownloadModule.kt b/feature/download/src/main/java/hu/bbara/purefin/feature/download/DownloadModule.kt similarity index 98% rename from app/src/main/java/hu/bbara/purefin/download/DownloadModule.kt rename to feature/download/src/main/java/hu/bbara/purefin/feature/download/DownloadModule.kt index f2884ab..42073a3 100644 --- a/app/src/main/java/hu/bbara/purefin/download/DownloadModule.kt +++ b/feature/download/src/main/java/hu/bbara/purefin/feature/download/DownloadModule.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.download +package hu.bbara.purefin.feature.download import android.content.Context import androidx.annotation.OptIn diff --git a/app/src/main/java/hu/bbara/purefin/download/DownloadState.kt b/feature/download/src/main/java/hu/bbara/purefin/feature/download/DownloadState.kt similarity index 85% rename from app/src/main/java/hu/bbara/purefin/download/DownloadState.kt rename to feature/download/src/main/java/hu/bbara/purefin/feature/download/DownloadState.kt index 4ec0e7d..5a75d53 100644 --- a/app/src/main/java/hu/bbara/purefin/download/DownloadState.kt +++ b/feature/download/src/main/java/hu/bbara/purefin/feature/download/DownloadState.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.download +package hu.bbara.purefin.feature.download sealed class DownloadState { data object NotDownloaded : DownloadState() diff --git a/app/src/main/java/hu/bbara/purefin/download/MediaDownloadManager.kt b/feature/download/src/main/java/hu/bbara/purefin/feature/download/MediaDownloadManager.kt similarity index 93% rename from app/src/main/java/hu/bbara/purefin/download/MediaDownloadManager.kt rename to feature/download/src/main/java/hu/bbara/purefin/feature/download/MediaDownloadManager.kt index bd3709c..c0513d2 100644 --- a/app/src/main/java/hu/bbara/purefin/download/MediaDownloadManager.kt +++ b/feature/download/src/main/java/hu/bbara/purefin/feature/download/MediaDownloadManager.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.download +package hu.bbara.purefin.feature.download import android.content.Context import android.util.Log @@ -9,13 +9,13 @@ import androidx.media3.exoplayer.offline.Download import androidx.media3.exoplayer.offline.DownloadManager import androidx.media3.exoplayer.offline.DownloadRequest import dagger.hilt.android.qualifiers.ApplicationContext -import hu.bbara.purefin.client.JellyfinApiClient -import hu.bbara.purefin.data.local.room.OfflineRoomMediaLocalDataSource -import hu.bbara.purefin.data.local.room.OfflineDatabase -import hu.bbara.purefin.data.local.room.dao.MovieDao -import hu.bbara.purefin.data.model.Movie -import hu.bbara.purefin.image.JellyfinImageHelper -import hu.bbara.purefin.session.UserSessionRepository +import hu.bbara.purefin.core.data.client.JellyfinApiClient +import hu.bbara.purefin.core.data.image.JellyfinImageHelper +import hu.bbara.purefin.core.data.local.room.OfflineDatabase +import hu.bbara.purefin.core.data.local.room.OfflineRoomMediaLocalDataSource +import hu.bbara.purefin.core.data.local.room.dao.MovieDao +import hu.bbara.purefin.core.data.session.UserSessionRepository +import hu.bbara.purefin.core.model.Movie import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow diff --git a/app/src/main/java/hu/bbara/purefin/download/PurefinDownloadService.kt b/feature/download/src/main/java/hu/bbara/purefin/feature/download/PurefinDownloadService.kt similarity index 97% rename from app/src/main/java/hu/bbara/purefin/download/PurefinDownloadService.kt rename to feature/download/src/main/java/hu/bbara/purefin/feature/download/PurefinDownloadService.kt index 1976a95..3b511d6 100644 --- a/app/src/main/java/hu/bbara/purefin/download/PurefinDownloadService.kt +++ b/feature/download/src/main/java/hu/bbara/purefin/feature/download/PurefinDownloadService.kt @@ -1,9 +1,7 @@ -package hu.bbara.purefin.download +package hu.bbara.purefin.feature.download import android.app.Notification -import android.app.PendingIntent import android.content.Context -import android.content.Intent import androidx.annotation.OptIn import androidx.core.app.NotificationCompat import androidx.media3.common.util.UnstableApi @@ -13,11 +11,10 @@ import androidx.media3.exoplayer.offline.DownloadNotificationHelper import androidx.media3.exoplayer.offline.DownloadRequest import androidx.media3.exoplayer.offline.DownloadService import androidx.media3.exoplayer.scheduler.Scheduler -import dagger.hilt.android.EntryPointAccessors import dagger.hilt.EntryPoint import dagger.hilt.InstallIn +import dagger.hilt.android.EntryPointAccessors import dagger.hilt.components.SingletonComponent -import hu.bbara.purefin.R @OptIn(UnstableApi::class) class PurefinDownloadService : DownloadService( diff --git a/feature/download/src/main/res/drawable/ic_launcher_foreground.xml b/feature/download/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/feature/download/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/feature/download/src/main/res/values/strings.xml b/feature/download/src/main/res/values/strings.xml new file mode 100644 index 0000000..627b05b --- /dev/null +++ b/feature/download/src/main/res/values/strings.xml @@ -0,0 +1,5 @@ + + + Downloads + Media download progress + diff --git a/feature/shared/build.gradle.kts b/feature/shared/build.gradle.kts new file mode 100644 index 0000000..32dc390 --- /dev/null +++ b/feature/shared/build.gradle.kts @@ -0,0 +1,38 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + +plugins { + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.android) + alias(libs.plugins.hilt) + alias(libs.plugins.ksp) +} + +android { + namespace = "hu.bbara.purefin.feature.shared" + compileSdk = 36 + + defaultConfig { + minSdk = 29 + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } +} + +kotlin { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_11) + } +} + +dependencies { + implementation(project(":core:model")) + implementation(project(":core:data")) + implementation(project(":feature:download")) + implementation(libs.hilt) + ksp(libs.hilt.compiler) + implementation(libs.jellyfin.core) + implementation(libs.androidx.lifecycle.viewmodel.compose) +} diff --git a/app/src/main/java/hu/bbara/purefin/app/content/episode/EpisodeModels.kt b/feature/shared/src/main/java/hu/bbara/purefin/feature/shared/content/episode/EpisodeModels.kt similarity index 89% rename from app/src/main/java/hu/bbara/purefin/app/content/episode/EpisodeModels.kt rename to feature/shared/src/main/java/hu/bbara/purefin/feature/shared/content/episode/EpisodeModels.kt index c67463c..b885f61 100644 --- a/app/src/main/java/hu/bbara/purefin/app/content/episode/EpisodeModels.kt +++ b/feature/shared/src/main/java/hu/bbara/purefin/feature/shared/content/episode/EpisodeModels.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.app.content.episode +package hu.bbara.purefin.feature.shared.content.episode import org.jellyfin.sdk.model.UUID diff --git a/app/src/main/java/hu/bbara/purefin/app/content/episode/EpisodeScreenViewModel.kt b/feature/shared/src/main/java/hu/bbara/purefin/feature/shared/content/episode/EpisodeScreenViewModel.kt similarity index 84% rename from app/src/main/java/hu/bbara/purefin/app/content/episode/EpisodeScreenViewModel.kt rename to feature/shared/src/main/java/hu/bbara/purefin/feature/shared/content/episode/EpisodeScreenViewModel.kt index f5295fe..b540b37 100644 --- a/app/src/main/java/hu/bbara/purefin/app/content/episode/EpisodeScreenViewModel.kt +++ b/feature/shared/src/main/java/hu/bbara/purefin/feature/shared/content/episode/EpisodeScreenViewModel.kt @@ -1,11 +1,11 @@ -package hu.bbara.purefin.app.content.episode +package hu.bbara.purefin.feature.shared.content.episode import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import hu.bbara.purefin.data.MediaRepository -import hu.bbara.purefin.data.model.Episode -import hu.bbara.purefin.navigation.NavigationManager +import hu.bbara.purefin.core.data.MediaRepository +import hu.bbara.purefin.core.data.navigation.NavigationManager +import hu.bbara.purefin.core.model.Episode import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow diff --git a/app/src/main/java/hu/bbara/purefin/app/content/movie/MovieModels.kt b/feature/shared/src/main/java/hu/bbara/purefin/feature/shared/content/movie/MovieModels.kt similarity index 89% rename from app/src/main/java/hu/bbara/purefin/app/content/movie/MovieModels.kt rename to feature/shared/src/main/java/hu/bbara/purefin/feature/shared/content/movie/MovieModels.kt index d0a87b2..51cfed7 100644 --- a/app/src/main/java/hu/bbara/purefin/app/content/movie/MovieModels.kt +++ b/feature/shared/src/main/java/hu/bbara/purefin/feature/shared/content/movie/MovieModels.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.app.content.movie +package hu.bbara.purefin.feature.shared.content.movie import org.jellyfin.sdk.model.UUID diff --git a/app/src/main/java/hu/bbara/purefin/app/content/movie/MovieScreenViewModel.kt b/feature/shared/src/main/java/hu/bbara/purefin/feature/shared/content/movie/MovieScreenViewModel.kt similarity index 87% rename from app/src/main/java/hu/bbara/purefin/app/content/movie/MovieScreenViewModel.kt rename to feature/shared/src/main/java/hu/bbara/purefin/feature/shared/content/movie/MovieScreenViewModel.kt index 0bd9755..1d33261 100644 --- a/app/src/main/java/hu/bbara/purefin/app/content/movie/MovieScreenViewModel.kt +++ b/feature/shared/src/main/java/hu/bbara/purefin/feature/shared/content/movie/MovieScreenViewModel.kt @@ -1,14 +1,14 @@ -package hu.bbara.purefin.app.content.movie +package hu.bbara.purefin.feature.shared.content.movie import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import hu.bbara.purefin.data.MediaRepository -import hu.bbara.purefin.data.model.Movie -import hu.bbara.purefin.download.DownloadState -import hu.bbara.purefin.download.MediaDownloadManager -import hu.bbara.purefin.navigation.NavigationManager -import hu.bbara.purefin.navigation.Route +import hu.bbara.purefin.core.data.MediaRepository +import hu.bbara.purefin.core.data.navigation.NavigationManager +import hu.bbara.purefin.core.data.navigation.Route +import hu.bbara.purefin.core.model.Movie +import hu.bbara.purefin.feature.download.DownloadState +import hu.bbara.purefin.feature.download.MediaDownloadManager import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow diff --git a/app/src/main/java/hu/bbara/purefin/app/content/series/SeriesModels.kt b/feature/shared/src/main/java/hu/bbara/purefin/feature/shared/content/series/SeriesModels.kt similarity index 95% rename from app/src/main/java/hu/bbara/purefin/app/content/series/SeriesModels.kt rename to feature/shared/src/main/java/hu/bbara/purefin/feature/shared/content/series/SeriesModels.kt index 6e92b23..fdd4182 100644 --- a/app/src/main/java/hu/bbara/purefin/app/content/series/SeriesModels.kt +++ b/feature/shared/src/main/java/hu/bbara/purefin/feature/shared/content/series/SeriesModels.kt @@ -1,4 +1,4 @@ -package hu.bbara.purefin.app.content.series +package hu.bbara.purefin.feature.shared.content.series data class SeriesEpisodeUiModel( val id: String, diff --git a/app/src/main/java/hu/bbara/purefin/app/content/series/SeriesViewModel.kt b/feature/shared/src/main/java/hu/bbara/purefin/feature/shared/content/series/SeriesViewModel.kt similarity index 84% rename from app/src/main/java/hu/bbara/purefin/app/content/series/SeriesViewModel.kt rename to feature/shared/src/main/java/hu/bbara/purefin/feature/shared/content/series/SeriesViewModel.kt index f5c8295..4101a06 100644 --- a/app/src/main/java/hu/bbara/purefin/app/content/series/SeriesViewModel.kt +++ b/feature/shared/src/main/java/hu/bbara/purefin/feature/shared/content/series/SeriesViewModel.kt @@ -1,13 +1,13 @@ -package hu.bbara.purefin.app.content.series +package hu.bbara.purefin.feature.shared.content.series import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import hu.bbara.purefin.data.MediaRepository -import hu.bbara.purefin.data.model.Series -import hu.bbara.purefin.navigation.EpisodeDto -import hu.bbara.purefin.navigation.NavigationManager -import hu.bbara.purefin.navigation.Route +import hu.bbara.purefin.core.data.MediaRepository +import hu.bbara.purefin.core.data.navigation.EpisodeDto +import hu.bbara.purefin.core.data.navigation.NavigationManager +import hu.bbara.purefin.core.data.navigation.Route +import hu.bbara.purefin.core.model.Series import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted diff --git a/feature/shared/src/main/java/hu/bbara/purefin/feature/shared/home/HomeModels.kt b/feature/shared/src/main/java/hu/bbara/purefin/feature/shared/home/HomeModels.kt new file mode 100644 index 0000000..5c3f136 --- /dev/null +++ b/feature/shared/src/main/java/hu/bbara/purefin/feature/shared/home/HomeModels.kt @@ -0,0 +1,81 @@ +package hu.bbara.purefin.feature.shared.home + +import hu.bbara.purefin.core.model.Episode +import hu.bbara.purefin.core.model.Movie +import hu.bbara.purefin.core.model.Series +import org.jellyfin.sdk.model.UUID +import org.jellyfin.sdk.model.api.BaseItemKind +import org.jellyfin.sdk.model.api.CollectionType + +data class ContinueWatchingItem( + val type: BaseItemKind, + val movie: Movie? = null, + val episode: Episode? = null +) { + val id: UUID = when (type) { + BaseItemKind.MOVIE -> movie!!.id + BaseItemKind.EPISODE -> episode!!.id + else -> throw UnsupportedOperationException("Unsupported item type: $type") + } + val primaryText: String = when (type) { + BaseItemKind.MOVIE -> movie!!.title + BaseItemKind.EPISODE -> episode!!.title + else -> throw UnsupportedOperationException("Unsupported item type: $type") + } + val secondaryText: String = when (type) { + BaseItemKind.MOVIE -> movie!!.year + BaseItemKind.EPISODE -> episode!!.releaseDate + else -> throw UnsupportedOperationException("Unsupported item type: $type") + } + val progress: Double = when (type) { + BaseItemKind.MOVIE -> movie!!.progress ?: 0.0 + BaseItemKind.EPISODE -> episode!!.progress ?: 0.0 + else -> throw UnsupportedOperationException("Unsupported item type: $type") + } +} + +data class NextUpItem( + val episode: Episode +) { + val id: UUID = episode.id + val primaryText: String = episode.title + val secondaryText: String = episode.releaseDate +} + +data class LibraryItem( + val id: UUID, + val name: String, + val type: CollectionType, + val isEmpty: Boolean +) + +data class PosterItem( + val type: BaseItemKind, + val movie: Movie? = null, + val series: Series? = null, + val episode: Episode? = null +) { + val id: UUID = when (type) { + BaseItemKind.MOVIE -> movie!!.id + BaseItemKind.EPISODE -> episode!!.id + BaseItemKind.SERIES -> series!!.id + else -> throw IllegalArgumentException("Invalid type: $type") + } + val title: String = when (type) { + BaseItemKind.MOVIE -> movie!!.title + BaseItemKind.EPISODE -> episode!!.title + BaseItemKind.SERIES -> series!!.name + else -> throw IllegalArgumentException("Invalid type: $type") + } + val imageUrl: String = when (type) { + BaseItemKind.MOVIE -> movie!!.heroImageUrl + BaseItemKind.EPISODE -> episode!!.heroImageUrl + BaseItemKind.SERIES -> series!!.heroImageUrl + else -> throw IllegalArgumentException("Invalid type: $type") + } + fun watched() = when (type) { + BaseItemKind.MOVIE -> movie!!.watched + BaseItemKind.EPISODE -> episode!!.watched + else -> throw IllegalArgumentException("Invalid type: $type") + } +} diff --git a/app/src/main/java/hu/bbara/purefin/app/home/HomePageViewModel.kt b/feature/shared/src/main/java/hu/bbara/purefin/feature/shared/home/HomePageViewModel.kt similarity index 87% rename from app/src/main/java/hu/bbara/purefin/app/home/HomePageViewModel.kt rename to feature/shared/src/main/java/hu/bbara/purefin/feature/shared/home/HomePageViewModel.kt index 9ec07ac..a221647 100644 --- a/app/src/main/java/hu/bbara/purefin/app/home/HomePageViewModel.kt +++ b/feature/shared/src/main/java/hu/bbara/purefin/feature/shared/home/HomePageViewModel.kt @@ -1,24 +1,19 @@ -package hu.bbara.purefin.app.home +package hu.bbara.purefin.feature.shared.home import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import hu.bbara.purefin.app.home.ui.ContinueWatchingItem -import hu.bbara.purefin.app.home.ui.HomeNavItem -import hu.bbara.purefin.app.home.ui.LibraryItem -import hu.bbara.purefin.app.home.ui.NextUpItem -import hu.bbara.purefin.app.home.ui.PosterItem -import hu.bbara.purefin.data.MediaRepository -import hu.bbara.purefin.data.model.Media -import hu.bbara.purefin.domain.usecase.RefreshHomeDataUseCase -import hu.bbara.purefin.image.JellyfinImageHelper -import hu.bbara.purefin.navigation.EpisodeDto -import hu.bbara.purefin.navigation.LibraryDto -import hu.bbara.purefin.navigation.MovieDto -import hu.bbara.purefin.navigation.NavigationManager -import hu.bbara.purefin.navigation.Route -import hu.bbara.purefin.navigation.SeriesDto -import hu.bbara.purefin.session.UserSessionRepository +import hu.bbara.purefin.core.data.MediaRepository +import hu.bbara.purefin.core.model.Media +import hu.bbara.purefin.core.data.domain.usecase.RefreshHomeDataUseCase +import hu.bbara.purefin.core.data.image.JellyfinImageHelper +import hu.bbara.purefin.core.data.navigation.EpisodeDto +import hu.bbara.purefin.core.data.navigation.LibraryDto +import hu.bbara.purefin.core.data.navigation.MovieDto +import hu.bbara.purefin.core.data.navigation.NavigationManager +import hu.bbara.purefin.core.data.navigation.Route +import hu.bbara.purefin.core.data.navigation.SeriesDto +import hu.bbara.purefin.core.data.session.UserSessionRepository import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.map @@ -140,9 +135,9 @@ class HomePageViewModel @Inject constructor( viewModelScope.launch { mediaRepository.ensureReady() } } - fun onLibrarySelected(library : HomeNavItem) { + fun onLibrarySelected(id: UUID, name: String) { viewModelScope.launch { - navigationManager.navigate(Route.LibraryRoute(library = LibraryDto(id = library.id, name = library.label))) + navigationManager.navigate(Route.LibraryRoute(library = LibraryDto(id = id, name = name))) } } diff --git a/app/src/main/java/hu/bbara/purefin/app/library/LibraryViewModel.kt b/feature/shared/src/main/java/hu/bbara/purefin/feature/shared/library/LibraryViewModel.kt similarity index 85% rename from app/src/main/java/hu/bbara/purefin/app/library/LibraryViewModel.kt rename to feature/shared/src/main/java/hu/bbara/purefin/feature/shared/library/LibraryViewModel.kt index e6b59dc..aa746a9 100644 --- a/app/src/main/java/hu/bbara/purefin/app/library/LibraryViewModel.kt +++ b/feature/shared/src/main/java/hu/bbara/purefin/feature/shared/library/LibraryViewModel.kt @@ -1,14 +1,14 @@ -package hu.bbara.purefin.app.library +package hu.bbara.purefin.feature.shared.library import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import hu.bbara.purefin.app.home.ui.PosterItem -import hu.bbara.purefin.data.MediaRepository -import hu.bbara.purefin.navigation.MovieDto -import hu.bbara.purefin.navigation.NavigationManager -import hu.bbara.purefin.navigation.Route -import hu.bbara.purefin.navigation.SeriesDto +import hu.bbara.purefin.feature.shared.home.PosterItem +import hu.bbara.purefin.core.data.MediaRepository +import hu.bbara.purefin.core.data.navigation.MovieDto +import hu.bbara.purefin.core.data.navigation.NavigationManager +import hu.bbara.purefin.core.data.navigation.Route +import hu.bbara.purefin.core.data.navigation.SeriesDto import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow diff --git a/app/src/main/java/hu/bbara/purefin/login/viewmodel/LoginViewModel.kt b/feature/shared/src/main/java/hu/bbara/purefin/feature/shared/login/LoginViewModel.kt similarity index 91% rename from app/src/main/java/hu/bbara/purefin/login/viewmodel/LoginViewModel.kt rename to feature/shared/src/main/java/hu/bbara/purefin/feature/shared/login/LoginViewModel.kt index 07c8eb1..316e22d 100644 --- a/app/src/main/java/hu/bbara/purefin/login/viewmodel/LoginViewModel.kt +++ b/feature/shared/src/main/java/hu/bbara/purefin/feature/shared/login/LoginViewModel.kt @@ -1,10 +1,10 @@ -package hu.bbara.purefin.login.viewmodel +package hu.bbara.purefin.feature.shared.login import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel -import hu.bbara.purefin.client.JellyfinApiClient -import hu.bbara.purefin.session.UserSessionRepository +import hu.bbara.purefin.core.data.client.JellyfinApiClient +import hu.bbara.purefin.core.data.session.UserSessionRepository import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b664bce..13b12b0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -64,6 +64,7 @@ androidx-room-compiler = { module = "androidx.room:room-compiler", version.ref = [plugins] android-application = { id = "com.android.application", version.ref = "agp" } +android-library = { id = "com.android.library", version.ref = "agp" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } diff --git a/settings.gradle.kts b/settings.gradle.kts index 48e45a3..4658f4b 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -21,4 +21,8 @@ dependencyResolutionManagement { rootProject.name = "Purefin" include(":app") - \ No newline at end of file +include(":core:model") +include(":core:data") +include(":feature:download") +include(":core:player") +include(":feature:shared")