mirror of
https://github.com/bbara04/Purefin.git
synced 2026-03-31 17:10:08 +02:00
update JellyfinApiClient methods and logging
- Rename `getNextUpEpisode` to `getNextUpEpisodes` and update it to return a list of episodes with expanded request fields. - Rename `getMediaPlaybackInfo` to `getMediaPlaybackUrl` and update its usages in `MediaRepository`. - Simplify logging format by removing curly brace placeholders across multiple API call methods. - Reorder `getContinueWatching` and `getLibraryContent` for better class organization. - Remove unused `episode` import in `MediaRepository`.
This commit is contained in:
@@ -80,26 +80,6 @@ class JellyfinApiClient @Inject constructor(
|
||||
ensureConfigured()
|
||||
}
|
||||
|
||||
suspend fun getContinueWatching(): List<BaseItemDto> {
|
||||
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<BaseItemDtoQueryResult> = api.itemsApi.getResumeItems(getResumeItemsRequest)
|
||||
Log.d("getContinueWatching response: {}", response.content.toString())
|
||||
return response.content.items
|
||||
}
|
||||
|
||||
suspend fun getLibraries(): List<BaseItemDto> {
|
||||
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<BaseItemDto> {
|
||||
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<BaseItemDtoQueryResult> = api.itemsApi.getResumeItems(getResumeItemsRequest)
|
||||
Log.d("getContinueWatching", response.content.toString())
|
||||
return response.content.items
|
||||
}
|
||||
|
||||
suspend fun getNextUpEpisodes(mediaId: UUID): List<BaseItemDto> {
|
||||
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<MediaSourceInfo> {
|
||||
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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user