From 4259bce6d658cd712530c0b22f460b78ae15c7bc Mon Sep 17 00:00:00 2001 From: Secozzi Date: Fri, 3 Jul 2026 22:41:44 +0200 Subject: [PATCH] Improve handling of remote videos --- src/all/jellyfin/build.gradle | 2 +- .../animeextension/all/jellyfin/Jellyfin.kt | 70 ++++++++++--------- .../all/jellyfin/dto/ItemDto.kt | 1 + 3 files changed, 40 insertions(+), 33 deletions(-) diff --git a/src/all/jellyfin/build.gradle b/src/all/jellyfin/build.gradle index b5602da..9999a1a 100644 --- a/src/all/jellyfin/build.gradle +++ b/src/all/jellyfin/build.gradle @@ -1,7 +1,7 @@ ext { extName = 'Jellyfin' extClass = '.JellyfinFactory' - extVersionCode = 32 + extVersionCode = 33 extNames = ["Jellyfin (1)", "Jellyfin (2)", "Jellyfin (3)"] } diff --git a/src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/Jellyfin.kt b/src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/Jellyfin.kt index 1b12dc4..8917151 100644 --- a/src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/Jellyfin.kt +++ b/src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/Jellyfin.kt @@ -536,6 +536,28 @@ class Jellyfin(private val suffix: String) : Source(), UnmeteredSource { } } + val videoHeaders = headersBuilder() + .add("Authorization", getAuthHeader(deviceInfo, preferences.apiKey)) + .build() + + if (mediaSource.isRemote && mediaSource.path != null && preferences.useRemote) { + return listOf( + Video( + videoTitle = buildString { + append("Source (Remote)") + mediaSource.name?.let { append("\n$it") } + append("\n${mediaSource.path}") + }, + videoUrl = mediaSource.path, + bitrate = Int.MAX_VALUE, + preferred = mediaSource.bitrate == preferences.quality.toInt(), + subtitleTracks = externalSubtitleList, + initialized = true, + ), + ) + } + + val videoBitrate = mediaSource.bitrate!!.toLong().formatBytes().replace("B", "b") val sessionData = getSessionData( videoBitrate = Int.MAX_VALUE, audioBitrate = Int.MAX_VALUE, @@ -545,39 +567,23 @@ class Jellyfin(private val suffix: String) : Source(), UnmeteredSource { subtitleStreamIndex = subtitleTrackIndex?.toString(), ) - val videoBitrate = mediaSource.bitrate!!.toLong().formatBytes().replace("B", "b") - val videoHeaders = headersBuilder() - .add("Authorization", getAuthHeader(deviceInfo, preferences.apiKey)) - .build() + val staticUrl = baseUrl.toHttpUrl().newBuilder().apply { + addPathSegment("Videos") + addPathSegment(itemId) + addPathSegment("stream") + addQueryParameter("static", "True") + addQueryParameter("PlaySessionId", sessionData.playSessionId) + }.build().toString() - val staticVideo = if (mediaSource.isRemote && mediaSource.path != null && preferences.useRemote) { - Video( - videoTitle = "Source - ${videoBitrate}ps (Remote)", - videoUrl = mediaSource.path, - bitrate = Int.MAX_VALUE, - preferred = mediaSource.bitrate == preferences.quality.toInt(), - subtitleTracks = externalSubtitleList, - initialized = true, - ) - } else { - val staticUrl = baseUrl.toHttpUrl().newBuilder().apply { - addPathSegment("Videos") - addPathSegment(itemId) - addPathSegment("stream") - addQueryParameter("static", "True") - addQueryParameter("PlaySessionId", sessionData.playSessionId) - }.build().toString() - - Video( - videoTitle = "Source - ${videoBitrate}ps", - videoUrl = staticUrl, - bitrate = Int.MAX_VALUE, - headers = videoHeaders, - preferred = mediaSource.bitrate == preferences.quality.toInt(), - subtitleTracks = externalSubtitleList, - initialized = true, - ) - } + val staticVideo = Video( + videoTitle = "Source - ${videoBitrate}ps", + videoUrl = staticUrl, + bitrate = Int.MAX_VALUE, + headers = videoHeaders, + preferred = mediaSource.bitrate == preferences.quality.toInt(), + subtitleTracks = externalSubtitleList, + initialized = true, + ) val sessionMediaSource = sessionData.mediaSources.firstOrNull() ?: return emptyList() diff --git a/src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/dto/ItemDto.kt b/src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/dto/ItemDto.kt index 2ea7e39..50f213b 100644 --- a/src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/dto/ItemDto.kt +++ b/src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/dto/ItemDto.kt @@ -256,6 +256,7 @@ data class MediaDto( val transcodingUrl: String? = null, val isRemote: Boolean = false, val path: String? = null, + val name: String? = null, val supportsTranscoding: Boolean, val supportsDirectStream: Boolean, val mediaStreams: List,