1764 Commits

Author SHA1 Message Date
mani
782106e44a Merge remote-tracking branch 'upstream/master'
Some checks failed
Build JellyCon / build (py2) (push) Has been cancelled
Build JellyCon / build (py3) (push) Has been cancelled
CodeQL Analysis / analyze (python, 3.9) (push) Has been cancelled
Release Drafter / Update release draft (push) Has been cancelled
Test JellyCon / test (3.9) (push) Has been cancelled
2026-01-15 00:24:50 +01:00
mani
0e0a8b853f Revert "Fix WebSocket session flapping with ForceKeepAlive protocol"
This reverts commit d5920a381e.
2026-01-14 17:02:55 +01:00
mcarlton00
8c716130a3 Merge pull request #402 from jellyfin/prepare-0.9.1
Prepare for release v0.9.1
2026-01-12 18:04:05 -05:00
jellyfin-bot
dfc9be33d7 bump version to 0.9.1 2026-01-12 23:02:26 +00:00
mcarlton00
9b592cf761 Merge pull request #401 from mcarlton00/websocket-fix
Implement proper keepalives for websocket
2026-01-12 18:01:26 -05:00
mcarlton00
d3122416cf Implement proper keepalives for websocket 2026-01-10 16:37:18 -05:00
mani
a6af9d856b Add SDH indicator to subtitle track display
Some checks failed
Build JellyCon / build (py2) (push) Has been cancelled
Build JellyCon / build (py3) (push) Has been cancelled
CodeQL Analysis / analyze (python, 3.9) (push) Has been cancelled
Release Drafter / Update release draft (push) Has been cancelled
Test JellyCon / test (3.9) (push) Has been cancelled
Show "SDH" (Subtitles for Deaf and Hard of Hearing) label in subtitle
selection dialog when track has IsHearingImpaired flag set.
2026-01-06 01:20:33 +01:00
mani
51aaa1f603 Remove remaining problematic module-level addon access
Some checks failed
Build JellyCon / build (py2) (push) Has been cancelled
Build JellyCon / build (py3) (push) Has been cancelled
CodeQL Analysis / analyze (python, 3.9) (push) Has been cancelled
Release Drafter / Update release draft (push) Has been cancelled
Test JellyCon / test (3.9) (push) Has been cancelled
- Remove module-level addon variable in kodi_utils.py
- Load addon locally in add_menu_directory_item() where needed
- Load addon locally in SHOW_SETTINGS mode in functions.py
- Keep __addon__ fallback in functions.py for non-critical uses (__addondir__, addon_id, PLUGINPATH) which have safe fallback values
- loghandler.py already has proper exception handling around __pluginpath__ usage
2026-01-06 01:15:50 +01:00
mani
a71efe14c1 Properly fix intermittent installation failures
Some checks failed
Build JellyCon / build (py2) (push) Has been cancelled
Build JellyCon / build (py3) (push) Has been cancelled
CodeQL Analysis / analyze (python, 3.9) (push) Has been cancelled
Release Drafter / Update release draft (push) Has been cancelled
Test JellyCon / test (3.9) (push) Has been cancelled
Instead of setting addon variables to None (which causes issues),
fix the root cause by removing unnecessary module-level initialization:

- Remove module-level user_details loading in functions.py
- Load user_details locally in functions where actually needed
- Wrap remaining module-level addon access in try/except in:
  - service.py (log_timing_data)
  - default.py (log_timing_data)
  - kodi_utils.py (addon variable)
  - functions.py (__addon__ and related variables)

This prevents crashes during installation/update while avoiding
None-related issues during normal operation.
2026-01-06 01:12:59 +01:00
mani
1879a8ed01 Fix intermittent installation/update failures
Some checks failed
Build JellyCon / build (py2) (push) Has been cancelled
Build JellyCon / build (py3) (push) Has been cancelled
CodeQL Analysis / analyze (python, 3.9) (push) Has been cancelled
Release Drafter / Update release draft (push) Has been cancelled
Test JellyCon / test (3.9) (push) Has been cancelled
Add exception handling for addon and settings initialization during
installation/update when addon may not be fully registered yet:
- Wrap __addon__ and __pluginpath__ initialization in try/except
- Handle settings access failures in LogHandler.__init__()
- Protect formatException() and _gen_rel_path() from missing __pluginpath__
2026-01-06 01:07:20 +01:00
mani
7d6ee45263 Fix installation failure when Kodi logging is disabled
Some checks failed
Build JellyCon / build (py2) (push) Has been cancelled
Build JellyCon / build (py3) (push) Has been cancelled
CodeQL Analysis / analyze (python, 3.9) (push) Has been cancelled
Release Drafter / Update release draft (push) Has been cancelled
Test JellyCon / test (3.9) (push) Has been cancelled
Add exception handling in LogHandler.emit() to prevent crashes
when xbmc.log() fails due to globally disabled logging in Kodi.
2026-01-06 01:03:53 +01:00
mani
44ad891242 Change cache defaults to disabled
Some checks failed
Build JellyCon / build (py2) (push) Has been cancelled
Build JellyCon / build (py3) (push) Has been cancelled
CodeQL Analysis / analyze (python, 3.9) (push) Has been cancelled
Release Drafter / Update release draft (push) Has been cancelled
Test JellyCon / test (3.9) (push) Has been cancelled
- Set disable_disk_cache to true by default (RAM only mode)
- Set use_cache to false by default (disable cache requests)
2026-01-06 01:01:22 +01:00
mani
a94575f83c Add audio track title to stream selection display
Some checks failed
Build JellyCon / build (py2) (push) Has been cancelled
Build JellyCon / build (py3) (push) Has been cancelled
CodeQL Analysis / analyze (python, 3.9) (push) Has been cancelled
Release Drafter / Update release draft (push) Has been cancelled
Test JellyCon / test (3.9) (push) Has been cancelled
Display track title in audio stream selection dialog when available.
Format: "index - language - codec layout - title"
2026-01-06 00:58:58 +01:00
mani
1c75b09824 Fix context menu implementation for track selection
Some checks failed
Build JellyCon / build (py2) (push) Has been cancelled
Build JellyCon / build (py3) (push) Has been cancelled
CodeQL Analysis / analyze (python, 3.9) (push) Has been cancelled
Release Drafter / Update release draft (push) Has been cancelled
Test JellyCon / test (3.9) (push) Has been cancelled
- Remove incorrect addContextMenuItems() from item_functions.py as JellyCon uses custom context menu system
- Add "Play with track selection" entry to JellyCon's ActionMenu in show_menu() for Movies and Episodes
- Add handler for play_with_track_selection action that sets force_track_selection parameter
2026-01-06 00:55:13 +01:00
mani
ebd59760ae Fix context menu import causing movies not to load
Some checks failed
Build JellyCon / build (py2) (push) Has been cancelled
Build JellyCon / build (py3) (push) Has been cancelled
CodeQL Analysis / analyze (python, 3.9) (push) Has been cancelled
Release Drafter / Update release draft (push) Has been cancelled
Test JellyCon / test (3.9) (push) Has been cancelled
- Fix incorrect import: change 'from . import translation' to
  'from .utils import translate_string'
- Add try/except block to prevent context menu errors from breaking playback
- Add defensive check for item_details.id existence
- Add error logging for debugging context menu issues

This fixes the critical bug where the movie menu would not load
due to the incorrect translation import.
2026-01-06 00:46:21 +01:00
mani
3184fa6f89 Replace subtitle codec boolean with dropdown preference
Some checks failed
Build JellyCon / build (py2) (push) Has been cancelled
Build JellyCon / build (py3) (push) Has been cancelled
CodeQL Analysis / analyze (python, 3.9) (push) Has been cancelled
Release Drafter / Update release draft (push) Has been cancelled
Test JellyCon / test (3.9) (push) Has been cancelled
- Replace prefer_srt_over_pgs boolean with subtitle_codec_preference dropdown
  Options: 0=Prefer PGS (default), 1=Prefer SRT, 2=No preference

- More intuitive UI with descriptive labels:
  - PGS bevorzugt (bessere Qualität beim Brennen)
  - SRT bevorzugt (flexibel, kann gestreamt werden)
  - Keine Präferenz

- Update scoring logic to handle three states instead of two
- Clarify that only_forced filter applies only during auto-selection
  Manual selection via dialog still shows all subtitles
2026-01-06 00:36:25 +01:00
mani
32f2b12708 Change subtitle preferences to prefer forced-only and PGS
Some checks failed
Build JellyCon / build (py2) (push) Has been cancelled
Build JellyCon / build (py3) (push) Has been cancelled
CodeQL Analysis / analyze (python, 3.9) (push) Has been cancelled
Release Drafter / Update release draft (push) Has been cancelled
Test JellyCon / test (3.9) (push) Has been cancelled
- Change prefer_srt_over_pgs default from true to false
  PGS has better quality when burned in during transcoding

- Add only_forced_subtitles setting (default: true)
  When enabled, only forced subtitles are selected
  Regular subtitles are skipped even if they match the language

- Skip non-forced subtitles in auto-selection when only_forced is enabled
  Prevents selecting regular German subs when watching German content
  Only shows forced subs for foreign language parts

This is useful for native language content where only foreign
language parts need subtitles (forced), not the entire movie.
2026-01-06 00:34:19 +01:00
mani
b9a6b5056a Add language-based track selection and context menu
Context Menu Integration:
- Add 'Play with track selection' option to video context menus
- Available for movies and episodes via long-press/context menu
- Forces manual track selection dialog even when auto-selection is configured

Language Selection Improvements:
- Add dropdown selectors for preferred audio/subtitle languages
- Support German, English, French, Spanish, Italian, Japanese, Russian
- Add comprehensive language matching (e.g., 'ger' matches 'deu', 'deutsch', 'german')
- Add setting to auto-select 'No subtitles' when no matching subtitle found

Track Selection Scoring System:
- Audio tracks: Language match (+100), default flag (+50),
  channel count (+5-40), codec quality (+10-30), exclude commentary (-100)
- Subtitle tracks: Language match (+100), forced flag (+50),
  SRT preference (+30), default flag (+10)

Implementation Details:
- Add force_track_selection parameter throughout playback chain
- Preserve server/remote control track selections when not forcing manual selection
- Add extensive debug logging for track selection decisions
- Respect user preferences while allowing manual override via context menu
2026-01-06 00:32:44 +01:00
mani
238d30ab94 Improve audio track selection with scoring system
Some checks failed
Build JellyCon / build (py2) (push) Has been cancelled
Build JellyCon / build (py3) (push) Has been cancelled
CodeQL Analysis / analyze (python, 3.9) (push) Has been cancelled
Release Drafter / Update release draft (push) Has been cancelled
Test JellyCon / test (3.9) (push) Has been cancelled
- Add intelligent scoring for multiple audio tracks in same language
- Score based on: default flag (+50), channel count (+5-40),
  codec quality (+10-30), and exclude commentary (-100)
- Prevents selecting commentary or low-quality tracks when better
  options are available in the same language
- Prioritizes default track while considering quality factors
2026-01-06 00:15:46 +01:00
mani
7d26589cf6 Add automatic audio and subtitle track selection
- Add preferred audio language setting (default: ger)
- Add preferred subtitle language setting (default: ger)
- Add auto-select default audio track option
- Add prefer forced subtitles option
- Add prefer SRT over PGS/image subtitles option

Implements intelligent scoring system for subtitle selection:
- Language match: +100 points
- Forced subtitle: +50 points (if enabled)
- SRT codec: +30 points (if enabled)
- Default track: +10 points

Auto-selection only happens when no track is pre-selected.
Falls back to manual dialog selection if no match is found.
2026-01-06 00:13:17 +01:00
mani
10857e39b1 Fix incomplete transcode target codec implementation
Some checks failed
Build JellyCon / build (py2) (push) Has been cancelled
Build JellyCon / build (py3) (push) Has been cancelled
CodeQL Analysis / analyze (python, 3.9) (push) Has been cancelled
Release Drafter / Update release draft (push) Has been cancelled
Test JellyCon / test (3.9) (push) Has been cancelled
- Add transcode target codec logic to get_play_url function
- Add debug logging to track codec selection
- Remove redundant enable="true" attributes in settings.xml

The get_play_url function was still using hardcoded h264, which caused
the transcode target codec setting to not take effect for direct
transcode URLs.
2026-01-05 23:41:16 +01:00
mani
30a07327bc Add option to disable disk caching (RAM only mode)
Some checks failed
Build JellyCon / build (py2) (push) Has been cancelled
Build JellyCon / build (py3) (push) Has been cancelled
CodeQL Analysis / analyze (python, 3.9) (push) Has been cancelled
Release Drafter / Update release draft (push) Has been cancelled
Test JellyCon / test (3.9) (push) Has been cancelled
Adds new advanced setting to disable disk-based caching, keeping data only in RAM. When enabled, prevents writing .pickle cache files and disables artwork preloading. Significantly reduces SD card wear on devices like Raspberry Pi while maintaining performance through RAM caching.
2026-01-05 18:50:26 +01:00
mani
50f2f1ac3c Add configurable transcode target video codec support
Adds new playback options to select transcode target codec (H.264, H.265/HEVC, AV1) and force H.264 transcoding. This enables optimal codec selection for client hardware, especially useful for devices with H.265 hardware decoding like Raspberry Pi 5. Target codec and source codec filtering now work independently for maximum flexibility.
2026-01-05 18:47:29 +01:00
mani
8041a0b9d8 Improve subtitle track display with codec information
Subtitle tracks now display both language and codec type (e.g., 'English (SRT)', 'German (PGS)'). Adds friendly names for common subtitle codecs like SRT, PGS, VobSub, and ASS. Improves user experience when selecting subtitle tracks.
2026-01-05 18:47:04 +01:00
mani
d5920a381e Fix WebSocket session flapping with ForceKeepAlive protocol
Implements Jellyfin's ForceKeepAlive/KeepAlive mechanism to prevent constant reconnects every 2 minutes. WebSocketApp is now recreated for each connection attempt to avoid memory leaks. Removed problematic ping_timeout and reconnect parameters that caused instability.
2026-01-05 18:46:25 +01:00
daryhanif
36b2891353 Translated using Weblate (Indonesian)
Currently translated at 98.3% (297 of 302 strings)

Translation: Jellycon/Jellycon
Translate-URL: https://translate.jellyfin.org/projects/jellycon/jellycon/id/
2026-01-05 12:25:56 +00:00
rimasx
4fa6d7d643 Translated using Weblate (Estonian)
Currently translated at 100.0% (302 of 302 strings)

Translation: Jellycon/Jellycon
Translate-URL: https://translate.jellyfin.org/projects/jellycon/jellycon/et/
2026-01-05 12:25:56 +00:00
rimasx
90151c2958 Translated using Weblate (Estonian)
Currently translated at 100.0% (302 of 302 strings)

Translation: Jellycon/Jellycon
Translate-URL: https://translate.jellyfin.org/projects/jellycon/jellycon/et/
2026-01-05 08:00:55 +00:00
rimasx
4133c03759 Translated using Weblate (Estonian)
Currently translated at 100.0% (302 of 302 strings)

Translation: Jellycon/Jellycon
Translate-URL: https://translate.jellyfin.org/projects/jellycon/jellycon/et/
2026-01-05 07:40:44 +00:00
Levente Suli
aab694c302 Translated using Weblate (Hungarian)
Currently translated at 100.0% (302 of 302 strings)

Translation: Jellycon/Jellycon
Translate-URL: https://translate.jellyfin.org/projects/jellycon/jellycon/hu/
2026-01-04 21:05:53 +00:00
mcarlton00
c963176bba Merge pull request #398 from jellyfin/prepare-0.9.0
Some checks failed
CodeQL Analysis / analyze (python, 3.9) (push) Has been cancelled
Release Drafter / Update release draft (push) Has been cancelled
Test JellyCon / test (3.9) (push) Has been cancelled
Build JellyCon / build (py2) (push) Has been cancelled
Build JellyCon / build (py3) (push) Has been cancelled
Prepare for release v0.9.0
v0.9.0
2026-01-02 10:54:04 -05:00
jellyfin-bot
06ffff3031 bump version to 0.9.0 2026-01-02 15:14:54 +00:00
ittelicra
2021f76dfd Translated using Weblate (Italian)
Currently translated at 100.0% (302 of 302 strings)

Translation: Jellycon/Jellycon
Translate-URL: https://translate.jellyfin.org/projects/jellycon/jellycon/it/
2026-01-02 12:03:37 +00:00
Stelios Karakapzoudis
112e244fbc Translated using Weblate (Greek)
Currently translated at 94.3% (285 of 302 strings)

Translation: Jellycon/Jellycon
Translate-URL: https://translate.jellyfin.org/projects/jellycon/jellycon/el/
2025-12-31 00:05:53 +00:00
mcarlton00
a655d49ce3 Merge pull request #396 from manuelschneider/websocket-renderer-issue
Fix websocket reconnects
2025-12-29 12:23:00 -05:00
mcarlton00
ddb47065bb Merge pull request #395 from mcarlton00/prioritize-filtered-limits
Ensure the filtered limit takes precedence over page limit
2025-12-29 11:45:37 -05:00
Spillutvikler
e94873c011 Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (302 of 302 strings)

Translation: Jellycon/Jellycon
Translate-URL: https://translate.jellyfin.org/projects/jellycon/jellycon/nb_NO/
2025-12-29 13:05:53 +00:00
ilker
8f07d44a4d Translated using Weblate (Turkish)
Currently translated at 100.0% (302 of 302 strings)

Translation: Jellycon/Jellycon
Translate-URL: https://translate.jellyfin.org/projects/jellycon/jellycon/tr/
2025-12-29 13:05:52 +00:00
Gargotaire
d63b4321c2 Translated using Weblate (Catalan)
Currently translated at 100.0% (302 of 302 strings)

Translation: Jellycon/Jellycon
Translate-URL: https://translate.jellyfin.org/projects/jellycon/jellycon/ca/
2025-12-23 08:05:53 +00:00
rimasx
b1c9f3877b Translated using Weblate (Estonian)
Currently translated at 96.0% (290 of 302 strings)

Translation: Jellycon/Jellycon
Translate-URL: https://translate.jellyfin.org/projects/jellycon/jellycon/et/
2025-12-23 08:05:52 +00:00
Gallyam Biktashev
d49eac5666 Translated using Weblate (Russian)
Currently translated at 100.0% (302 of 302 strings)

Translation: Jellycon/Jellycon
Translate-URL: https://translate.jellyfin.org/projects/jellycon/jellycon/ru/
2025-12-23 08:05:52 +00:00
Manuel Schneider
a24f921804 use libs reconnect functionality 2025-12-20 17:15:29 +01:00
Stefano Mazzoleni
f1d86743f3 Translated using Weblate (Italian)
Currently translated at 98.6% (298 of 302 strings)

Translation: Jellycon/Jellycon
Translate-URL: https://translate.jellyfin.org/projects/jellycon/jellycon/it/
2025-12-20 09:55:08 +00:00
pol busquets
0b6c14b540 Translated using Weblate (Catalan)
Currently translated at 100.0% (302 of 302 strings)

Translation: Jellycon/Jellycon
Translate-URL: https://translate.jellyfin.org/projects/jellycon/jellycon/ca/
2025-12-18 13:55:10 +00:00
Antti Pikkuaho
10c6b116da Translated using Weblate (Finnish)
Currently translated at 100.0% (302 of 302 strings)

Translation: Jellycon/Jellycon
Translate-URL: https://translate.jellyfin.org/projects/jellycon/jellycon/fi/
2025-12-18 13:55:09 +00:00
pol busquets
17c3ed2625 Translated using Weblate (Spanish)
Currently translated at 100.0% (302 of 302 strings)

Translation: Jellycon/Jellycon
Translate-URL: https://translate.jellyfin.org/projects/jellycon/jellycon/es/
2025-12-18 13:55:09 +00:00
Fjuro
296acefb09 Translated using Weblate (Czech)
Currently translated at 100.0% (302 of 302 strings)

Translation: Jellycon/Jellycon
Translate-URL: https://translate.jellyfin.org/projects/jellycon/jellycon/cs/
2025-12-15 22:55:10 +00:00
Kityn
2bb737bfd9 Translated using Weblate (Polish)
Currently translated at 100.0% (302 of 302 strings)

Translation: Jellycon/Jellycon
Translate-URL: https://translate.jellyfin.org/projects/jellycon/jellycon/pl/
2025-12-15 22:55:09 +00:00
kscop-n1
053eb71967 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (302 of 302 strings)

Translation: Jellycon/Jellycon
Translate-URL: https://translate.jellyfin.org/projects/jellycon/jellycon/uk/
2025-12-15 22:55:09 +00:00
tct123
ed2190c03d Translated using Weblate (German)
Currently translated at 100.0% (302 of 302 strings)

Translation: Jellycon/Jellycon
Translate-URL: https://translate.jellyfin.org/projects/jellycon/jellycon/de/
2025-12-15 22:55:08 +00:00