629 Commits

Author SHA1 Message Date
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
Patrick
fe0b0b7bcb New translations en.json (Afrikaans) 2026-03-26 09:43:26 +01:00
Patrick
2232312f83 New translations en.json (Spanish) 2026-03-26 09:43:25 +01:00
Patrick
f66bfc69cb New translations en.json (French) 2026-03-26 09:43:24 +01:00
Patrick
0ef964e535 New translations en.json (Romanian) 2026-03-26 09:43:23 +01:00
Patrick
6a3e93d4d6 feat: add GitHub PAT authentication for API requests (#302)
# Pull Request Template

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

## Description

Adds optional GitHub Personal Access Token (PAT) authentication to avoid
API rate limiting when fetching releases. The token is resolved from
three sources in priority order:

1. App settings (`GitHubToken`)
2. `GITHUB_TOKEN` environment variable
3. GitHub CLI (`gh auth token`)

Also improves the rate limit error message with hints on how to
configure a PAT, and adds trace logging so users can see which token
source was used in the debug log.

Related issues (all closed, this PR provides a proper long-term fix via
authenticated requests):
- Relates to #287 — Custom WGT option missing when GitHub rate limit is
reached
- Relates to #235 — Initialization failed due to rate limiting
- Relates to #236 — Catch rate limit exception during initialization
- Relates to #170 — Fix Rate Limit

---

## Type of Change

- [ ] Bug fix (non-breaking change)
- [x] New feature (non-breaking change)
- [ ] 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
- [x] I have tested my changes manually
- [ ] I have added necessary documentation (if applicable)
- [x] I have verified that the installer still works with the underlying
CLI

---

## Additional Notes

- Token is only attached to requests targeting `api.github.com`,
`raw.githubusercontent.com`, and `github.com`
- When no token is configured, the app continues to work with
unauthenticated requests (existing behavior)
- Debug logs now show `[GitHubAuth]` entries indicating which token
source was used
2026-03-26 09:08:04 +01:00
kingchenc
84a4e964a3 feat(V17): extract DDG language map to TrailerLanguageMap.cs with full Jellyfin language coverage
Extracts the inline DDG language map from FixYouTube.cs into a dedicated TrailerLanguageMap.cs file
and expands coverage from 22 languages to all 93 Jellyfin-supported locales.

## Changes

- New file: TrailerLanguageMap.cs — static class with all Jellyfin language codes mapped to
  DDG search keywords (English name + native name per language)
- FixYouTube.cs: inline langMap replaced with __LANG_MAP__ placeholder, injected via .Replace()
  from TrailerLanguageMap.JsObject at build time

## Why

Previously, if a user had a language not in the 22-entry inline map (e.g., Hindi, Bengali, Georgian,
Kazakh, etc.), the DDG search would fall back to an empty string — searching just "{title} Trailer
site:youtube.com" with no language qualifier. This made language matching impossible for those users.

Now every Jellyfin-supported language resolves to proper search keywords. For example:
- hi -> "Hindi हिन्दी"
- ka -> "Georgian ქართული"
- bn -> "Bengali বাংলা"
- kk -> "Kazakh Қазақша"
2026-03-25 22:33:17 +01:00
kingchenc
7bdbc061cc feat(V17): trailer fallback for non-English metadata languages via TMDB + DuckDuckGo Lite
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
```
2026-03-25 21:08:02 +01:00
Dávid Balatoni
f6c6ff074c feat: add GitHub PAT input UI to settings 2026-03-25 19:39:49 +01:00
Dávid Balatoni
ee1a9140cd feat: add trace logging for GitHub token resolution source 2026-03-24 10:36:15 +01:00
Dávid Balatoni
4e27791dfe fix: improve rate limit error message with PAT setup hints 2026-03-21 20:39:09 +01:00
Dávid Balatoni
5518f7f20e feat: wire GitHubAuthHandler into HttpClient singleton 2026-03-21 20:39:05 +01:00
Dávid Balatoni
cea2bda15b feat: add GitHubToken setting to AppSettings 2026-03-21 20:38:46 +01:00
Dávid Balatoni
da91012e06 feat: add GitHub auth handler for authenticated API requests 2026-03-21 20:38:11 +01:00
Patrick
1e33f057bf Update README.md 2026-03-21 14:08:31 +01:00
Patrick
eab08e271d Update Crowdin configuration file 2026-03-21 13:41:36 +01:00
PatrickSt1991
b20803cc5b Merge branch 'beta' of https://github.com/PatrickSt1991/Samsung-Jellyfin-Installer into beta 2026-03-21 13:35:23 +01:00
PatrickSt1991
b3eb8d007b removed bom from pt.json
Dynamic Localization to work with transifex
2026-03-21 13:23:44 +01:00
Patrick
35990672d2 Add Transifex configuration for localization 2026-03-21 11:50:16 +01:00
Patrick
cc666e4b68 Set checkout reference to 'beta' in workflow 2026-03-21 11:31:46 +01:00
Patrick
70bdf89b4a Sync master-only docs and workflow into beta (#300)
# Pull Request Template

## Branch
- [ ] 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

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

---

## Checklist

- [ ] 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

---

## Additional Notes

Any other information that reviewers should know, including limitations,
concerns, or context about the change.
2026-03-21 11:26:12 +01:00
Patrick
a6263a2468 Merge branch 'master' into beta 2026-03-21 11:25:59 +01:00
github-actions[bot]
eead46aeb6 chore: update version table in README [skip ci] 2026-03-21 10:13:29 +00:00
PatrickSt1991
b7d1c921d3 Sync master-only docs and workflow into beta 2026-03-21 11:08:23 +01:00
Patrick
8dbb0de4a2 Beta -> Prod (#299)
Added Litefin
2026-03-21 11:02:44 +01:00
github-actions[bot]
868df40a6b chore: update version table in README [skip ci] 2026-03-21 07:01:07 +00:00
Patrick
0b77c32b5e Revise contributor links in README
Updated links and added new contributor information.
2026-03-21 07:59:01 +01:00
Patrick
c0e1f0333f Add LiteFin to the pool (#298)
# Pull Request Template

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

## Description

This includes LiteFin as a new package.

---

## Type of Change

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

---

## Checklist

- [x] My code follows the existing project structure and style  
- [x] I have tested my changes manually  
- [x] I have added necessary documentation (if applicable)  
- [x] I have verified that the installer still works with the underlying
CLI

---
2026-03-21 07:57:14 +01:00
PatrickSt1991
78d0ede171 Added litefin and filter for wgt and tpk in selected releases 2026-03-21 07:56:12 +01:00
Patrick
03647d6360 Update AppSettings.cs 2026-03-21 07:15:32 +01:00
Patrick
f17a8404f3 Update AddLatestRelease.cs
wgt and tpk filter
2026-03-21 07:13:30 +01:00
Patrick
3d0f89e6a8 Add fetch call for LiteFinRelease 2026-03-21 07:02:11 +01:00
Patrick
116351376a Add Moonlite to jellyfinOverrides dictionary 2026-03-21 06:57:38 +01:00
Patrick
7dc7ecc6e3 Add Litefin constant for image URL 2026-03-21 06:55:21 +01:00
Patrick
f663eae6d9 Add LiteFinRelease property to AppSettings 2026-03-21 06:49:52 +01:00