From b816a2d4607c8c2a830cec3ce94ff07105a0901b Mon Sep 17 00:00:00 2001 From: Jarne Demeulemeester Date: Sat, 13 May 2023 21:34:05 +0200 Subject: [PATCH] perf: only request stream url when preparing player items --- .../main/java/dev/jdtech/jellyfin/utils/DownloaderImpl.kt | 2 +- .../main/java/dev/jdtech/jellyfin/models/FindroidSource.kt | 5 +++-- .../dev/jdtech/jellyfin/repository/JellyfinRepository.kt | 2 +- .../dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt | 5 +++-- .../jellyfin/repository/JellyfinRepositoryOfflineImpl.kt | 2 +- .../java/dev/jdtech/jellyfin/viewmodels/PlayerViewModel.kt | 4 ++-- 6 files changed, 11 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/dev/jdtech/jellyfin/utils/DownloaderImpl.kt b/core/src/main/java/dev/jdtech/jellyfin/utils/DownloaderImpl.kt index a571bdba..c8b4239e 100644 --- a/core/src/main/java/dev/jdtech/jellyfin/utils/DownloaderImpl.kt +++ b/core/src/main/java/dev/jdtech/jellyfin/utils/DownloaderImpl.kt @@ -43,7 +43,7 @@ class DownloaderImpl( storageIndex: Int, ): Pair { try { - val source = jellyfinRepository.getMediaSources(item.id).first { it.id == sourceId } + val source = jellyfinRepository.getMediaSources(item.id, true).first { it.id == sourceId } val intro = jellyfinRepository.getIntroTimestamps(item.id) val trickPlayManifest = jellyfinRepository.getTrickPlayManifest(item.id) val trickPlayData = if (trickPlayManifest != null) { diff --git a/data/src/main/java/dev/jdtech/jellyfin/models/FindroidSource.kt b/data/src/main/java/dev/jdtech/jellyfin/models/FindroidSource.kt index f5e8eed1..ad2e2b7f 100644 --- a/data/src/main/java/dev/jdtech/jellyfin/models/FindroidSource.kt +++ b/data/src/main/java/dev/jdtech/jellyfin/models/FindroidSource.kt @@ -19,12 +19,13 @@ data class FindroidSource( suspend fun MediaSourceInfo.toFindroidSource( jellyfinRepository: JellyfinRepository, - itemId: UUID + itemId: UUID, + includePath: Boolean = false, ): FindroidSource { val path = when (protocol) { MediaProtocol.FILE -> { try { - jellyfinRepository.getStreamUrl(itemId, id.orEmpty()) + if (includePath) jellyfinRepository.getStreamUrl(itemId, id.orEmpty()) else "" } catch (e: Exception) { "" } diff --git a/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepository.kt b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepository.kt index be30d9ad..e447bf31 100644 --- a/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepository.kt +++ b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepository.kt @@ -80,7 +80,7 @@ interface JellyfinRepository { offline: Boolean = false ): List - suspend fun getMediaSources(itemId: UUID): List + suspend fun getMediaSources(itemId: UUID, includePath: Boolean = false): List suspend fun getStreamUrl(itemId: UUID, mediaSourceId: String): String diff --git a/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt index c75c411a..d21d41a6 100644 --- a/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt +++ b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt @@ -282,7 +282,7 @@ class JellyfinRepositoryImpl( } } - override suspend fun getMediaSources(itemId: UUID): List = + override suspend fun getMediaSources(itemId: UUID, includePath: Boolean): List = withContext(Dispatchers.IO) { val sources = mutableListOf() sources.addAll( @@ -325,7 +325,8 @@ class JellyfinRepositoryImpl( ).content.mediaSources.map { it.toFindroidSource( this@JellyfinRepositoryImpl, - itemId + itemId, + includePath, ) } ) diff --git a/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryOfflineImpl.kt b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryOfflineImpl.kt index e10aea68..7bc98a2a 100644 --- a/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryOfflineImpl.kt +++ b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryOfflineImpl.kt @@ -168,7 +168,7 @@ class JellyfinRepositoryOfflineImpl( database.getEpisodesBySeasonId(seasonId).map { it.toFindroidEpisode(database, jellyfinApi.userId!!) } } - override suspend fun getMediaSources(itemId: UUID): List = + override suspend fun getMediaSources(itemId: UUID, includePath: Boolean): List = withContext(Dispatchers.IO) { database.getSources(itemId).map { it.toFindroidSource(database) } } diff --git a/player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerViewModel.kt b/player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerViewModel.kt index 5d2c2017..5ea0a18a 100644 --- a/player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerViewModel.kt +++ b/player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerViewModel.kt @@ -137,9 +137,9 @@ class PlayerViewModel @Inject internal constructor( playbackPosition: Long ): PlayerItem { val mediaSource = if (mediaSourceIndex == null) { - repository.getMediaSources(id).firstOrNull { it.type == FindroidSourceType.LOCAL } ?: repository.getMediaSources(id)[0] + repository.getMediaSources(id, true).firstOrNull { it.type == FindroidSourceType.LOCAL } ?: repository.getMediaSources(id, true)[0] } else { - repository.getMediaSources(id)[mediaSourceIndex] + repository.getMediaSources(id, true)[mediaSourceIndex] } val externalSubtitles = mediaSource.mediaStreams .filter { mediaStream ->