diff --git a/app/src/main/java/hu/bbara/purefin/client/JellyfinApiClient.kt b/app/src/main/java/hu/bbara/purefin/client/JellyfinApiClient.kt index 7b18ec0..61b4401 100644 --- a/app/src/main/java/hu/bbara/purefin/client/JellyfinApiClient.kt +++ b/app/src/main/java/hu/bbara/purefin/client/JellyfinApiClient.kt @@ -80,26 +80,6 @@ class JellyfinApiClient @Inject constructor( ensureConfigured() } - suspend fun getContinueWatching(): List { - if (!ensureConfigured()) { - return emptyList() - } - val userId = getUserId() - if (userId == null) { - return emptyList() - } - val getResumeItemsRequest = GetResumeItemsRequest( - userId = userId, - fields = listOf(ItemFields.CHILD_COUNT, ItemFields.PARENT_ID, ItemFields.DATE_LAST_REFRESHED), - includeItemTypes = listOf(BaseItemKind.MOVIE, BaseItemKind.EPISODE), - enableUserData = true, - startIndex = 0, - ) - val response: Response = api.itemsApi.getResumeItems(getResumeItemsRequest) - Log.d("getContinueWatching response: {}", response.content.toString()) - return response.content.items - } - suspend fun getLibraries(): List { if (!ensureConfigured()) { return emptyList() @@ -109,7 +89,7 @@ class JellyfinApiClient @Inject constructor( presetViews = listOf(CollectionType.MOVIES, CollectionType.TVSHOWS), includeHidden = false, ) - Log.d("getLibraries response: {}", response.content.toString()) + Log.d("getLibraries", response.content.toString()) val libraries = response.content.items return libraries } @@ -128,10 +108,45 @@ class JellyfinApiClient @Inject constructor( recursive = true, ) val response = api.itemsApi.getItems(getItemsRequest) - Log.d("getLibraryContent response: {}", response.content.toString()) + Log.d("getLibraryContent", response.content.toString()) return response.content.items } + suspend fun getContinueWatching(): List { + if (!ensureConfigured()) { + return emptyList() + } + val userId = getUserId() + if (userId == null) { + return emptyList() + } + val getResumeItemsRequest = GetResumeItemsRequest( + userId = userId, + fields = listOf(ItemFields.CHILD_COUNT, ItemFields.PARENT_ID, ItemFields.DATE_LAST_REFRESHED), + includeItemTypes = listOf(BaseItemKind.MOVIE, BaseItemKind.EPISODE), + enableUserData = true, + startIndex = 0, + ) + val response: Response = api.itemsApi.getResumeItems(getResumeItemsRequest) + Log.d("getContinueWatching", response.content.toString()) + return response.content.items + } + + suspend fun getNextUpEpisodes(mediaId: UUID): List { + if (!ensureConfigured()) { + throw IllegalStateException("Not configured") + } + val getNextUpRequest = GetNextUpRequest( + userId = getUserId(), + fields = listOf(ItemFields.CHILD_COUNT, ItemFields.PARENT_ID, ItemFields.DATE_LAST_REFRESHED), + enableResumable = true, + seriesId = mediaId, + ) + val result = api.tvShowsApi.getNextUp(getNextUpRequest) + Log.d("getNextUpEpisodes", result.content.toString()) + return result.content.items + } + /** * Fetches the latest media items from a specified library including Movie, Episode, Season. * @@ -149,7 +164,7 @@ class JellyfinApiClient @Inject constructor( includeItemTypes = listOf(BaseItemKind.MOVIE, BaseItemKind.EPISODE, BaseItemKind.SEASON), limit = 10 ) - Log.d("getLatestFromLibrary response: {}", response.content.toString()) + Log.d("getLatestFromLibrary", response.content.toString()) return response.content } @@ -161,7 +176,7 @@ class JellyfinApiClient @Inject constructor( itemId = mediaId, userId = getUserId(), ) - Log.d("getItemInfo response: {}", result.content.toString()) + Log.d("getItemInfo", result.content.toString()) return result.content } @@ -175,7 +190,7 @@ class JellyfinApiClient @Inject constructor( fields = listOf(ItemFields.CHILD_COUNT, ItemFields.PARENT_ID, ItemFields.DATE_LAST_REFRESHED), enableUserData = true ) - Log.d("getSeasons response: {}", result.content.toString()) + Log.d("getSeasons", result.content.toString()) return result.content.items } @@ -190,23 +205,10 @@ class JellyfinApiClient @Inject constructor( fields = listOf(ItemFields.CHILD_COUNT, ItemFields.PARENT_ID, ItemFields.DATE_LAST_REFRESHED), enableUserData = true ) - Log.d("getEpisodesInSeason response: {}", result.content.toString()) + Log.d("getEpisodesInSeason", result.content.toString()) return result.content.items } - suspend fun getNextUpEpisode(mediaId: UUID): BaseItemDto { - if (!ensureConfigured()) { - throw IllegalStateException("Not configured") - } - val getNextUpRequest = GetNextUpRequest( - userId = getUserId(), - seriesId = mediaId, - ) - val result = api.tvShowsApi.getNextUp(getNextUpRequest) - Log.d("getNextUpEpisode response: {}", result.content.toString()) - return result.content.items.first() - } - suspend fun getMediaSources(mediaId: UUID): List { val result = api.mediaInfoApi .getPostedPlaybackInfo( @@ -232,7 +234,7 @@ class JellyfinApiClient @Inject constructor( maxStreamingBitrate = 1_000_000_000, ), ) - Log.d("getMediaSources result: {}", result.toString()) + Log.d("getMediaSources", result.toString()) return result.content.mediaSources } @@ -252,11 +254,11 @@ class JellyfinApiClient @Inject constructor( ) //Remove first element as we need only the next episodes val nextUpEpisodes = nextUpEpisodesResult.content.items.drop(1) - Log.d("getNextEpisodeMediaSources response: {}", nextUpEpisodes.toString()) + Log.d("getNextEpisodes", nextUpEpisodes.toString()) return nextUpEpisodes } - suspend fun getMediaPlaybackInfo(mediaId: UUID, mediaSourceId: String? = null): String? { + suspend fun getMediaPlaybackUrl(mediaId: UUID, mediaSourceId: String? = null): String? { if (!ensureConfigured()) { return null } @@ -265,7 +267,7 @@ class JellyfinApiClient @Inject constructor( static = true, mediaSourceId = mediaSourceId, ) - Log.d("getMediaPlaybackInfo response: {}", response.toString()) + Log.d("getMediaPlaybackUrl", response) return response } diff --git a/app/src/main/java/hu/bbara/purefin/player/data/MediaRepository.kt b/app/src/main/java/hu/bbara/purefin/player/data/MediaRepository.kt index 0276e7e..4ad339a 100644 --- a/app/src/main/java/hu/bbara/purefin/player/data/MediaRepository.kt +++ b/app/src/main/java/hu/bbara/purefin/player/data/MediaRepository.kt @@ -4,10 +4,9 @@ import android.net.Uri import androidx.media3.common.MediaItem import androidx.media3.common.MediaMetadata import dagger.hilt.android.scopes.ViewModelScoped -import hu.bbara.purefin.app.content.ContentMockData.episode import hu.bbara.purefin.client.JellyfinApiClient -import javax.inject.Inject import java.util.UUID +import javax.inject.Inject @ViewModelScoped class MediaRepository @Inject constructor( @@ -17,7 +16,7 @@ class MediaRepository @Inject constructor( suspend fun getMediaItem(mediaId: UUID): MediaItem? { val mediaSources = jellyfinApiClient.getMediaSources(mediaId) val selectedMediaSource = mediaSources.firstOrNull() ?: return null - val playbackUrl = jellyfinApiClient.getMediaPlaybackInfo( + val playbackUrl = jellyfinApiClient.getMediaPlaybackUrl( mediaId = mediaId, mediaSourceId = selectedMediaSource.id ) ?: return null @@ -40,7 +39,7 @@ class MediaRepository @Inject constructor( } val mediaSources = jellyfinApiClient.getMediaSources(id) val selectedMediaSource = mediaSources.firstOrNull() ?: return@mapNotNull null - val playbackUrl = jellyfinApiClient.getMediaPlaybackInfo( + val playbackUrl = jellyfinApiClient.getMediaPlaybackUrl( mediaId = id, mediaSourceId = selectedMediaSource.id ) ?: return@mapNotNull null