From f91315fbd448bb76845242cf85466e065a8ab559 Mon Sep 17 00:00:00 2001 From: Secon-ary Date: Sat, 20 Jun 2026 16:26:56 +0700 Subject: [PATCH 1/5] fix: allow codec field to be optional Hi, thank you for the works. The extension is working great, but I encounter missing codec field error in some of my library. I tried to check said library using ffmpeg, turn out it did miss some audio codec. Though the movie and its audio is working fine. So, this change is just to make codec filed to be optional. Take a note that I don't fully understand how Jellyfin nor video component work. So, I don't know whether this change will break other code or not. Please forgive my English, it's not my first language. Thanks! --- .../kanade/tachiyomi/animeextension/all/jellyfin/dto/ItemDto.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 6120ac6..2ea7e39 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 @@ -262,7 +262,7 @@ data class MediaDto( ) { @Serializable data class MediaStreamDto( - val codec: String, + val codec: String? = null, val index: Int, val type: String, val supportsExternalStream: Boolean, From 8e43cac0e7e6a005b149e7370a303faf4b13cce2 Mon Sep 17 00:00:00 2001 From: Secon-ary Date: Mon, 22 Jun 2026 22:22:17 +0700 Subject: [PATCH 2/5] refactor: add codec field null check --- .../kanade/tachiyomi/animeextension/all/jellyfin/Jellyfin.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 b15f343..65b6823 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 @@ -515,7 +515,9 @@ class Jellyfin(private val suffix: String) : Source(), UnmeteredSource { addPathSegment("Subtitles") addPathSegment(media.index.toString()) addPathSegment("0") - addPathSegment("Stream.${media.codec}") + if (media.codec != null) { + addPathSegment("Stream.${media.codec}") + } }.build().toString() if (media.isExternal) { From 4838fa3cadf2b07bb32cd1a88f8117215536fa04 Mon Sep 17 00:00:00 2001 From: Secon-ary Date: Mon, 22 Jun 2026 22:23:52 +0700 Subject: [PATCH 3/5] chore: bump version code --- src/all/jellyfin/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/all/jellyfin/build.gradle b/src/all/jellyfin/build.gradle index efc6eef..b5602da 100644 --- a/src/all/jellyfin/build.gradle +++ b/src/all/jellyfin/build.gradle @@ -1,7 +1,7 @@ ext { extName = 'Jellyfin' extClass = '.JellyfinFactory' - extVersionCode = 31 + extVersionCode = 32 extNames = ["Jellyfin (1)", "Jellyfin (2)", "Jellyfin (3)"] } From 8e57b71768950360bfb833b487f96b5ac7d611c2 Mon Sep 17 00:00:00 2001 From: Secon-ary Date: Tue, 23 Jun 2026 13:13:52 +0700 Subject: [PATCH 4/5] refactor: skip subtitles entirely if codec is null Co-authored-by: Secozzi <49240133+Secozzi@users.noreply.github.com> --- .../tachiyomi/animeextension/all/jellyfin/Jellyfin.kt | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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 65b6823..f5d983c 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 @@ -517,7 +517,15 @@ class Jellyfin(private val suffix: String) : Source(), UnmeteredSource { addPathSegment("0") if (media.codec != null) { addPathSegment("Stream.${media.codec}") - } + if (media.supportsExternalStream && media.codec != null) { + val subtitleUrl = baseUrl.toHttpUrl().newBuilder().apply { + addPathSegment("Videos") + addPathSegment(itemId) + addPathSegment(mediaSource.id!!) + addPathSegment("Subtitles") + addPathSegment(media.index.toString()) + addPathSegment("0") + addPathSegment("Stream.${media.codec}") }.build().toString() if (media.isExternal) { From ef0daae412fda720216420313ba3d5ccffe0b19e Mon Sep 17 00:00:00 2001 From: Secon-ary Date: Tue, 23 Jun 2026 13:26:20 +0700 Subject: [PATCH 5/5] refactor: fix format --- .../animeextension/all/jellyfin/Jellyfin.kt | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) 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 f5d983c..1b12dc4 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 @@ -507,18 +507,8 @@ class Jellyfin(private val suffix: String) : Source(), UnmeteredSource { } "Subtitle" -> { - if (media.supportsExternalStream) { + if (media.supportsExternalStream && media.codec != null) { val subtitleUrl = baseUrl.toHttpUrl().newBuilder().apply { - addPathSegment("Videos") - addPathSegment(itemId) - addPathSegment(mediaSource.id!!) - addPathSegment("Subtitles") - addPathSegment(media.index.toString()) - addPathSegment("0") - if (media.codec != null) { - addPathSegment("Stream.${media.codec}") - if (media.supportsExternalStream && media.codec != null) { - val subtitleUrl = baseUrl.toHttpUrl().newBuilder().apply { addPathSegment("Videos") addPathSegment(itemId) addPathSegment(mediaSource.id!!)