1414 Commits

Author SHA1 Message Date
Bond-009
046023b9dd
Merge pull request #16380 from LTe/fix-subtitle-extraction-setting
Respect EnableSubtitleExtraction setting in subtitle delivery
2026-04-11 11:37:17 +02:00
Lasath Fernando
553f38a237 Fix language display for ISO 639-2-only codes (e.g. mul, und)
LoadCultures() in LocalizationManager skipped all iso6392.txt entries
without a two-letter ISO 639-1 code, dropping 302 of 496 languages
including mul (Multiple languages), und (Undetermined), mis (Uncoded
languages), zxx, and many real languages like Achinese, Akkadian, etc.
This caused FindLanguageInfo() to return null for these codes, which
meant:
- ExternalPathParser could not recognize them as valid language codes
  in subtitle filenames, so the Language field was never set
- DisplayTitle fell back to the raw code string (e.g. "Mul")

Fix by allowing entries without two-letter codes to be loaded with an
empty TwoLetterISOLanguageName. Also set LocalizedLanguage in
ProbeResultNormalizer for ffprobe-detected streams (the DB repository
path was already handled on master).
2026-04-08 12:38:24 -05:00
Joshua M. Boniface
a2dcaa9521
Merge pull request #15902 from ZeusCraft10/fix/udp-discovery-cross-subnet-ipv6 2026-04-04 01:53:59 -04:00
Bond_009
a6da575785 Only set IsAvc for video streams
Also enables nullable for MediaStreamInfo
Makes more properties nullable that aren't always present
2026-03-29 14:27:49 +02:00
upscaylman
ea206f43a2
recognize underscore and dot separators for multi-version grouping (#16465)
* Add underscore and dot as multi-version file separators

Extend IsEligibleForMultiVersion to recognize _ and . as valid
separators between the base movie name and the version suffix.

Common naming patterns like 'Movie_4K.mkv' or 'Movie.UHD.mkv'
are now correctly grouped as alternate versions during library scan.

* Address review: remove comment, add 3D recognition assertions

---------

Co-authored-by: aimarshall615-creator <aimarshall615@gmail.com>
2026-03-29 12:42:36 +02:00
Bond-009
6a20f948f4
Merge pull request #16222 from tyage/fix/filename-truncation-bracketed-tags
Fix filename truncation when bracketed tags appear mid-filename
2026-03-27 19:21:43 +01:00
Bond-009
4eead536a9
Merge pull request #16368 from redinsch/fix/image-language-priority
Fix remote image language priority to prefer English over no-language
2026-03-13 20:25:36 +01:00
Piotr Niełacny
37983c943a Respect EnableSubtitleExtraction setting in subtitle delivery
Wire up EnableSubtitleExtraction config to MediaEncoder.CanExtractSubtitles
so the setting is actually respected. Gate subtitle extraction check behind
PlayMethod.Transcode since DirectPlay has no competing ffmpeg process.

Add parameterized tests for StreamBuilder.GetSubtitleProfile covering
text and graphical codecs, profile format matching, and extraction
setting behavior. Remove misplaced SubtitleEncoder extraction test.
2026-03-13 16:34:44 +01:00
Bond_009
946c6b9981 Return BadRequest when an invalid set of filters is given 2026-03-11 21:22:48 +01:00
redinsch
3b29375179 Use file-scoped namespace in EnumerableExtensionsTests 2026-03-08 12:02:08 +01:00
redinsch
ebb6949ea7 Fix remote image language priority to prefer English over no-language
Previously, images with no language were ranked higher (score 3) than
English images (score 2), causing poorly rated languageless images to
be selected over well-rated English alternatives for posters and logos.

Swap the priority so English is preferred over no-language images.
Backdrop images are unaffected as they have their own dedicated sorting.

Add unit tests for OrderByLanguageDescending.

Fixes #13310
2026-03-08 11:29:54 +01:00
NoFear0411
d87fe973f3
Fix StyleCop and xUnit analyzer errors
- Add missing param and returns XML doc tags (SA1611, SA1615)
- Remove trailing alignment whitespace in test attributes (SA1025)
- Use nullable string parameter for null test case (xUnit1012)
2026-03-01 18:51:27 +04:00
NoFear0411
bc316b3dc8
Fix near-1:1 SAR values falsely flagged as anamorphic
Encoders sometimes produce sample aspect ratios like 3201:3200
(0.03% off square) for content that has effectively square pixels.
The exact string comparison against "1:1" marks these as anamorphic,
which triggers unnecessary transcoding on clients that require
non-anamorphic video.

Parse the SAR ratio numerically and treat values within 1% of 1:1
as square pixels. This threshold is well clear of the nearest real
anamorphic SAR (PAL 4:3 at 16:15 = 6.67% off).
2026-03-01 00:00:05 +04:00
Cosmin Dumitru
37b50fe13c Fix malformed query string in StreamInfo.ToUrl() causing 500 error via proxies
StreamInfo.ToUrl() generated URLs like `/master.m3u8?&DeviceId=...` (note `?&`)
because `?` was appended to the path and all parameters started with `&`. When
the first optional parameter (DeviceProfileId) was null, the result was a
malformed query string.

This is harmless when clients hit Jellyfin directly (ASP.NET Core tolerates `?&`),
but when accessed through a reverse proxy that parses and re-serializes the URL
(e.g. Home Assistant ingress via aiohttp/yarl), `?&` becomes `?=&` — introducing
an empty-key query parameter. ParseStreamOptions then crashes on `param.Key[0]`
with IndexOutOfRangeException.

Changes:
- StreamInfo.ToUrl(): Track query start position and replace the first `&` with
  `?` after all parameters are appended, producing valid query strings
- ParseStreamOptions: Guard against empty query parameter keys
- Tests: Remove .Replace("?&", "?") workaround that masked the bug

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 21:08:35 +01:00
tyage
1c2f08bc17
Fix filename truncation when bracketed tags appear mid-filename 2026-02-12 00:23:44 +09:00
Bond-009
909e2142d6
Merge pull request #14927 from nileshp87/patch-1
Add curly brace and parentheses support for parsing attribute values
2026-02-02 20:54:06 +01:00
Bond-009
8083ab78b5
Fix tests 2026-02-02 20:46:28 +01:00
theguymadmax
0c274af72c Backport pull request #16077 from jellyfin/release-10.11.z
Revert hidden directory ignore pattern

Original-merge: 644327eb762a907328c68ab9f5d61a151cd96897

Merged-by: crobibero <cody@robibe.ro>

Backported-by: Bond_009 <bond.009@outlook.com>
2026-01-28 12:11:28 -05:00
theguymadmax
c9b7c5bb56 Backport pull request #16029 from jellyfin/release-10.11.z
Skip hidden directories and .ignore paths in library monitoring

Original-merge: 2cb7fb52d2221d9daa39206089b578c2c0fcb549

Merged-by: crobibero <cody@robibe.ro>

Backported-by: Bond_009 <bond.009@outlook.com>
2026-01-18 11:30:43 -05:00
Bond-009
226da3b371
Fix zh-CN subtitle language display (#15947)
The DisplayTitle property was using .NET's CultureInfo.GetCultures(NeutralCultures)
to resolve language display names. Since zh-CN is a specific culture (not neutral),
it would fall back to the base 'zh' code, resulting in generic 'Chinese' instead
of 'Chinese (Simplified)'.

This change adds a LocalizedLanguage property to MediaStream that gets populated
via LocalizationManager.FindLanguageInfo() when streams are retrieved from the
database. This leverages Jellyfin's existing iso6392.txt mappings which correctly
map zh-CN to 'Chinese (Simplified)'.

The same pattern is already used for other localized strings like LocalizedDefault
and LocalizedExternal.
2026-01-18 12:19:31 +01:00
Abitofevrything
8d052a6cb1
Merge pull request #15926 from abitofevrything/feat/accurate_hls_seeking
Refactor HLS transcode seeking
2026-01-18 12:17:06 +01:00
Bond_009
098e8c6fed Replace AlphanumericComparator with new CompareOptions.NumericOrdering 2026-01-14 18:55:47 +01:00
Bond_009
1ba8e2c93c Fix tests 2026-01-14 18:55:47 +01:00
Bond_009
9e480f6efb Update to .NET 10.0 2026-01-14 18:55:47 +01:00
Bond-009
185849b68a
Merge pull request #15956 from ZeusCraft10/fix/issue-15945-unknown-type-deserialization
fix: Handle unknown item types gracefully in DeserializeBaseItem
2026-01-09 18:40:59 +01:00
ZeusCraft10
244757c92c Fix KeyNotFoundException in CryptographyProvider.Verify
When a password hash is missing the 'iterations' parameter, Verify now
throws a descriptive FormatException instead of KeyNotFoundException.

- Extract GetIterationsParameter() helper method to avoid code duplication
- Provide distinct error messages for missing vs invalid parameters
- Add comprehensive unit tests for CryptographyProvider
2026-01-05 23:03:22 -05:00
ZeusCraft10
0ff869dfcd fix: Handle unknown item types gracefully in DeserializeBaseItem
When querying items with recursive=true, items with types from removed
plugins would cause a 500 error. Now these items are skipped with a
warning log instead of throwing an exception.

Fixes #15945
2026-01-05 21:08:26 -05:00
ZeusCraft10
9039077286 Fix zh-CN subtitle language display
The DisplayTitle property was using .NET's CultureInfo.GetCultures(NeutralCultures)
to resolve language display names. Since zh-CN is a specific culture (not neutral),
it would fall back to the base 'zh' code, resulting in generic 'Chinese' instead
of 'Chinese (Simplified)'.

This change adds a LocalizedLanguage property to MediaStream that gets populated
via LocalizationManager.FindLanguageInfo() when streams are retrieved from the
database. This leverages Jellyfin's existing iso6392.txt mappings which correctly
map zh-CN to 'Chinese (Simplified)'.

The same pattern is already used for other localized strings like LocalizedDefault
and LocalizedExternal.
2026-01-05 06:22:44 -05:00
ZeusCraft10
72b4faa00b Fix UDP Auto-Discovery returning IPv6 for cross-subnet IPv4 requests
Fixes #15898

When a UDP discovery request is relayed from a different IPv4 subnet,
GetBindAddress() now correctly returns an IPv4 address instead of
incorrectly falling back to ::1.

Changes:
- Loopback fallback now prefers address family matching the source IP
- Interface fallback now prefers interfaces matching source address family
- Added test case for cross-subnet IPv4 request scenario
2025-12-30 17:34:05 -05:00
gnattu
88acd51ee2 Backport pull request #15807 from jellyfin/release-10.11.z
Enforce more strict webm check

Original-merge: 8379b4634aeaf9827d07a41cf9ba8fd80c8c323e

Merged-by: crobibero <cody@robibe.ro>

Backported-by: Bond_009 <bond.009@outlook.com>
2025-12-28 07:22:31 -05:00
Shadowghost
3c802a7505 Backport pull request #15793 from jellyfin/release-10.11.z
Prefer US rating on fallback

Original-merge: 156761405e7fd5308474a7e6301839ae7c694dfa

Merged-by: crobibero <cody@robibe.ro>

Backported-by: Bond_009 <bond.009@outlook.com>
2025-12-28 07:22:30 -05:00
Shadowghost
b9cf26db2f Backport pull request #15746 from jellyfin/release-10.11.z
Skip invalid ignore rules

Original-merge: 6e60634c9f078cc01e343b07a0a6b2a5c230478c

Merged-by: crobibero <cody@robibe.ro>

Backported-by: Bond_009 <bond.009@outlook.com>
2025-12-28 07:22:20 -05:00
Nilesh Patel
acb9da6f93 Add curly brace and parentheses support for parsing attribute values from paths 2025-12-10 12:23:05 -08:00
audrey-inglish
8fd59d6f33
Merge pull request #14879 from audrey-inglish/master
Fix: normalize punctuation when computing CleanName so searches without punctuation match (closes #1674)
2025-12-08 18:43:37 +01:00
Niels van Velzen
8c02c3be93
Merge pull request #14824 from CodyEngel/fix-numeric-titles
Fix TV Series parsing containing only numbers.
2025-11-27 16:32:11 +01:00
Niels van Velzen
19c232809e
Merge pull request #14950 from nielsvanvelzen/security-remove-has-password
Deprecate HasPassword property on UserDto
2025-11-27 16:31:05 +01:00
JPVenson
74c9629372 Backport pull request #15413 from jellyfin/release-10.11.z
Fixed missing sort argument

Original-merge: 91c3b1617e06283c88f36bc63046b99c993cb774

Merged-by: crobibero <cody@robibe.ro>

Backported-by: Bond_009 <bond.009@outlook.com>
2025-11-17 14:08:55 -05:00
theguymadmax
6c5f448787 Backport pull request #15404 from jellyfin/release-10.11.z
Improve season folder parsing

Original-merge: 2e5ced50986c37b19b5f4ef34d730fc56a51535a

Merged-by: crobibero <cody@robibe.ro>

Backported-by: Bond_009 <bond.009@outlook.com>
2025-11-17 14:08:54 -05:00
Shadowghost
87b02b1316 Backport pull request #15326 from jellyfin/release-10.11.z
Skip too large extracted season numbers

Original-merge: e7dbb3afec3282c556e4fe35d9376ecaa4417171

Merged-by: crobibero <cody@robibe.ro>

Backported-by: Joshua M. Boniface <joshua@boniface.me>
2025-11-02 21:58:45 -05:00
theguymadmax
3c4dc16003 Backport pull request #15102 from jellyfin/release-10.11.z
Make season paths case-insensitive

Original-merge: 305b0fdca323833653dd26c642b2c465890143dc

Merged-by: crobibero <cody@robibe.ro>

Backported-by: Bond_009 <bond.009@outlook.com>
2025-10-27 15:43:12 -04:00
Niels van Velzen
d43db230fa Add back UpdateUserPassword_Empty_RemoveSetPassword test 2025-10-19 09:45:55 +02:00
KGT1
e28d547006 add test for new uniqueid nfo key normalisation 2025-10-08 15:32:30 +00:00
Niels van Velzen
0fb6d930e1 Deprecate HasPassword property on UserDto 2025-10-05 11:10:36 +02:00
Cody Robibero
ff0a1b999f
Handle xx as TMDb no language for backdrops (#14941) 2025-10-04 21:04:35 +02:00
Cody Engel
bd9a44ce7d
remove explicit ‘-‘ support in series name 2025-09-20 18:00:44 -06:00
Cody Engel
da31d0c6a6
support series that are numeric only
updates SeriesResolver to handle series names that only contain numbers such as 1923.
2025-09-20 14:04:00 -06:00
JPVenson
a0b3e2b071
Optimize internal querying of UserData, other fixes (#14795) 2025-09-16 13:08:04 -06:00
theguymadmax
e043f93a72
Preserve 3D format on metadata refresh (#14742) 2025-09-06 11:38:00 -06:00
Joshua M. Boniface
1262ac31dc
Merge pull request #14410 from dyphire/language
Further refinement of BCP 47 language labeling support
2025-08-03 17:29:40 -04:00
dyphire
2007815fa6 Further refinement of BCP 47 language labeling support 2025-07-30 22:15:37 +08:00