366 Commits

Author SHA1 Message Date
Patrick
8ff66448ad New translations en.json (Hebrew) 2026-04-16 05:15:04 +02:00
Patrick
6085e11046 New translations en.json (Finnish) 2026-04-16 05:15:03 +02:00
Patrick
97e684ea30 New translations en.json (Greek) 2026-04-16 05:15:02 +02:00
Patrick
c19d411677 New translations en.json (German) 2026-04-16 05:15:00 +02:00
Patrick
1786591380 New translations en.json (Danish) 2026-04-16 05:14:59 +02:00
Patrick
2d1eb06048 New translations en.json (Czech) 2026-04-16 05:14:58 +02:00
Patrick
ca18e54097 New translations en.json (Catalan) 2026-04-16 05:14:56 +02:00
Patrick
6ac842b2d0 New translations en.json (Arabic) 2026-04-16 05:14:55 +02:00
Patrick
23d7213bc2 New translations en.json (Afrikaans) 2026-04-16 05:14:54 +02:00
Patrick
fcdea48ba8 New translations en.json (Spanish) 2026-04-16 05:14:53 +02:00
Patrick
9f75dbfefe New translations en.json (French) 2026-04-16 05:14:52 +02:00
Patrick
3ac9aa3bdf New translations en.json (Romanian) 2026-04-16 05:14:50 +02:00
kingchenc
75ac9d6e2e fix: resolve "undefined" server display on Samsung TVs and add mDNS (.local) warning
Fixes #319 — Server appears as "undefined" on Samsung TV after network interruptions
when using mDNS (.local) hostnames.

Root cause:
The injected jellyfin_credentials in localStorage were missing the `Name` property.
When the TV couldn't reach the server (mDNS resolution failure), Jellyfin Web had
no cached server name to display, resulting in literal "undefined".

Changes:
- Add `Name` property to injected auto-login credentials using the real ServerName
  from /System/Info/Public, with fallback to the server URL
- Store JellyfinServerName in AppSettings (fetched during server validation and
  authentication, cleared on logout)
- Add the server's LocalAddress (IP-based) as a fallback entry in config.json so
  the TV can still connect when mDNS resolution fails
- Add a visible warning banner in the UI when a .local hostname is detected,
  advising users to use a direct IP address instead
- Add lblMdnsWarning localization key to all 28 language files (translated for
  da, nl, en, fr, de, pt, tr — English fallback for remaining languages)
2026-04-16 04:51:00 +02:00
Patrick
912bc84687 Update AppSettings.cs 2026-04-11 20:04:53 +02:00
PatrickSt1991
bafcc8721b Merge branch 'beta' of https://github.com/PatrickSt1991/Samsung-Jellyfin-Installer into beta 2026-04-11 14:08:03 +02:00
PatrickSt1991
d7424138c6 Clear CustomWgt path after install 2026-04-11 14:06:56 +02:00
Patrick Stel
3f45b55f02 Single call instead of double preventing connection drop 2026-04-10 15:50:38 +02:00
Patrick Stel
d822bd2e9f Feature: Save NetworkInterface
Improvement: Subnet check and IP Search
2026-04-10 11:27:58 +02:00
dependabot[bot]
32b95a72cf Bump the nuget group with 1 update
Bumps Tmds.DBus.Protocol from 0.21.2 to 0.21.3

---
updated-dependencies:
- dependency-name: Tmds.DBus.Protocol
  dependency-version: 0.21.3
  dependency-type: direct:production
  dependency-group: nuget
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-09 16:51:20 +00:00
Patrick
404496e818 Update FileHelper.cs
Removed obsolete file copy for custom WGT and TPK files
2026-04-09 18:49:00 +02:00
PatrickSt1991
d02526c1d6 Merge branch 'beta' of https://github.com/PatrickSt1991/Samsung-Jellyfin-Installer into beta 2026-04-05 20:18:57 +02:00
PatrickSt1991
56486c1ec8 Changed IsEnbaled for settings to ServerIpSet 2026-04-05 20:18:48 +02:00
Patrick
a46a352359 New Crowdin updates (#305) 2026-03-30 13:18:45 +02:00
PatrickSt1991
753fda3407 version bump 2026-03-28 07:39:21 +01:00
Patrick
387c2b501f feat(V17): trailer fallback for non-English metadata languages via TMDB + DuckDuckGo Lite (#304)
Fixes a long-standing Jellyfin upstream bug (jellyfin/jellyfin#12817)
where movies configured with non-English metadata languages (German,
Spanish, French, etc.) show no trailer button because TMDB returns empty
video data for non-English language queries.

## Problem

When Jellyfin fetches metadata with e.g. language=de, TMDB returns 0
trailers even though English trailers exist in their database. Jellyfin
makes no fallback to English. The issue was closed upstream as "not
planned" — unfixed for 2-3 years, affecting every non-English Jellyfin
user.

## Solution

Client-side trailer fallback system built into the existing YouTube fix
(V16 -> V17). No Jellyfin server changes required.

When a movie detail page has no trailer button:

1. TMDB: search for trailer in user's language (via
include_video_language parameter)
2. DuckDuckGo Lite: search "{title} Trailer {language}
site:youtube.com", match by title
3. TMDB: English trailer (cached from step 1, no extra API call)
4. DuckDuckGo Lite: English fallback (cached from step 2, no extra API
call)

Max 2 external HTTP requests (1x TMDB + 1x DDG). Steps 3+4 use cached
results.

## Why DuckDuckGo Lite instead of Google/YouTube search

Google and YouTube aggressively block automated requests with CAPTCHAs,
rate limiting, and bot detection. DuckDuckGo Lite (lite.duckduckgo.com)
returns plain HTML with no JavaScript, no API key required, no CAPTCHAs,
and no bot blocking. DDG Lite has been stable for years with minimal
changes to its HTML structure, making it a reliable fallback for trailer
discovery.

## Technical details

- Language detected from Jellyfin user settings
(document.documentElement.lang), not TV system language
- TMDB API key extracted at runtime from Jellyfin server plugin
configuration (GET /Plugins -> GET /Plugins/{id}/Configuration), falls
back to Jellyfin's default key from TmdbUtils.cs
- DDG results parsed with title extraction: language-matched results
prioritized, non-matched results cached as English fallback
- Trailer button injected as native Jellyfin UI element (same CSS
classes, Material Icons)
- Fullscreen overlay player reuses existing player.html bridge
- Closable via Tizen back button, Escape, Backspace, or video end
- httpsGet helper with 8s timeout and double-callback guard
- 22 non-English languages supported in DDG language map

## Fallback flow

```
Movie detail page loaded
  |
  +-- Trailer button exists? -> Yes -> normal existing fix (CustomPlayer)
  |
  +-- No -> Service: /trailer?tmdbId=X&lang={Jellyfin language}&tmdbKey={runtime key}
              |
              +-- 1. TMDB: trailer in user's language?
              |     -> Found -> play with CustomPlayer
              |
              +-- 2. DDG Lite: "{title} Trailer {language} site:youtube.com"
              |     -> Language matched in title? -> play with CustomPlayer
              |
              +-- 3. TMDB: English trailer (cached from step 1, no extra call)
              |     -> Found -> play with CustomPlayer
              |
              +-- 4. DDG Lite: English fallback (cached from step 2, no extra call)
              |     -> Found -> play with CustomPlayer
              |
              +-- Nothing found -> no trailer available
```

# Pull Request Template

## Branch
- [x] I branched off beta (not master) to develop this feature/fix

## Description

Please include a summary of the change and which issue is fixed. Also
include relevant motivation and context.

Fixes # (issue number, if applicable)

---

## Type of Change

- [x] Bug fix (non-breaking change)
- [x] New feature (non-breaking change)
- [x] Breaking change (fix or feature that would cause existing
functionality to change)
- [-] Documentation update
- [-] Other (please describe):

---

## Checklist

- [x] My code follows the existing project structure and style  
- [-] I have tested my changes manually  
- [-] I have added necessary documentation (if applicable)  
- [-] I have verified that the installer still works with the underlying
CLI
2026-03-28 07:36:55 +01:00
Patrick
016f17ab04 New translations en.json (Portuguese, Brazilian) 2026-03-26 09:43:56 +01:00
Patrick
8e971fc6aa New translations en.json (Vietnamese) 2026-03-26 09:43:55 +01:00
Patrick
ac423c7c04 New translations en.json (English) 2026-03-26 09:43:54 +01:00
Patrick
ec2b9293ee New translations en.json (Chinese Simplified) 2026-03-26 09:43:52 +01:00
Patrick
8cee7d4b97 New translations en.json (Ukrainian) 2026-03-26 09:43:51 +01:00
Patrick
8ecf4a9b8a New translations en.json (Turkish) 2026-03-26 09:43:50 +01:00
Patrick
2e20e6f7b7 New translations en.json (Swedish) 2026-03-26 09:43:49 +01:00
Patrick
eb4ca257f1 New translations en.json (Serbian (Cyrillic)) 2026-03-26 09:43:48 +01:00
Patrick
e6845eebdd New translations en.json (Russian) 2026-03-26 09:43:46 +01:00
Patrick
ebb4995748 New translations en.json (Portuguese) 2026-03-26 09:43:44 +01:00
Patrick
505a2d3be4 New translations en.json (Polish) 2026-03-26 09:43:43 +01:00
Patrick
e31beed93f New translations en.json (Norwegian) 2026-03-26 09:43:42 +01:00
Patrick
dc682cfc5f New translations en.json (Dutch) 2026-03-26 09:43:41 +01:00
Patrick
56f77379c7 New translations en.json (Korean) 2026-03-26 09:43:40 +01:00
Patrick
e09155e9d2 New translations en.json (Japanese) 2026-03-26 09:43:38 +01:00
Patrick
641c2d0f5f New translations en.json (Italian) 2026-03-26 09:43:37 +01:00
Patrick
3a98bc6cf9 New translations en.json (Hungarian) 2026-03-26 09:43:36 +01:00
Patrick
e8491798a5 New translations en.json (Hebrew) 2026-03-26 09:43:35 +01:00
Patrick
bb1bda5051 New translations en.json (Finnish) 2026-03-26 09:43:34 +01:00
Patrick
d6a8d28fbb New translations en.json (Greek) 2026-03-26 09:43:33 +01:00
Patrick
79b1d68643 New translations en.json (German) 2026-03-26 09:43:32 +01:00
Patrick
e852cbc4f1 New translations en.json (Danish) 2026-03-26 09:43:30 +01:00
Patrick
3dcf9a2878 New translations en.json (Czech) 2026-03-26 09:43:29 +01:00
Patrick
6012413efb New translations en.json (Catalan) 2026-03-26 09:43:28 +01:00
Patrick
2aeb46c718 New translations en.json (Arabic) 2026-03-26 09:43:27 +01:00