Commit graph

1094 commits

Author SHA1 Message Date
Ray
36b7390c4e
Fix crash when screensaver networks errors out (#1279)
## Description
Fixes a crash if there is a network error when starting the screensaver.

Instead, a black screen with an error message shows. The error message
fades in/out to different parts of the screen. This applies to both
in-app and OS screensavers.

### Related issues
Fixes #1247

### Testing
Emulator w/ simulated errors

## Screenshots
N/A

## AI or LLM usage
None
2026-04-20 17:30:56 -04:00
Ray
61afe6ba86
Port two changes to ExoPlayer device profile from the official app (#1263)
## Description
Ports two changes in the official jellyfin android TV app here:
- https://github.com/jellyfin/jellyfin-androidtv/pull/5240
- https://github.com/jellyfin/jellyfin-androidtv/pull/5186

The code changes are copied under GPL-2.0 from the above pull requests.

### Related issues
Closes #1260

### Testing
Emulator mostly

## Screenshots
N/A

## AI or LLM usage
None

---------

Co-authored-by: Niels van Velzen <git@ndat.nl>
Co-authored-by: clams4shoes <prestidgeandrew@gmail.com>
2026-04-19 15:20:46 -04:00
Ray
08836e3c5d
Update ExoPlayer with better audio configuration (#1258)
## Description
Makes some changes when building ExoPlayer to help improve pass through
audio.

The major changes are enabled constant bitrate seeking and audio
offloading.

Documentation is thin on these features, but [this blog
post](https://www.qualcomm.com/developer/blog/2023/08/audio-offload-support-exoplayer)
while focused on ExoPlayer2 and power usage, does explain a bit about
audio offloading.

Small section on constant bitrate seeking:
https://developer.android.com/media/media3/exoplayer/customization#enabling-constant-bitrate-seeking

### Related issues
N/A

### Testing
Emulator, nvidia shield w/ AVR to check pass through

## Screenshots
N/A

## AI or LLM usage
None
2026-04-19 15:10:15 -04:00
Ray
790069d818
Add support for external player playback (#1256)
## Description
Adds a new playback "backend" to play media in another app such as VLC.

By default, Wholphin will use the system default app. Typically if you
haven't chosen one, a dialog will show to pick which app. You can also
set a specific external app to use in Wholphin independent of the system
default.

Currently, this only support single item playback, ie playing next up
episodes is not supported yet.

Also since there is no standardized way to send resume position,
external subtitle info, etc, Wholphin makes a best effort. VLC,
mpv-android, & MX-Player are specifically tested/supported.

### Related issues
Closes #85

### Testing
Emulator & nvidia shield w/ VLC, mpv-android, & MX-player

## Screenshots
<img width="543" height="407" alt="image"
src="https://github.com/user-attachments/assets/ab37d41e-2909-40ed-b537-191ebb54d979"
/>

## AI or LLM usage
None
2026-04-19 14:41:54 -04:00
dudecuda
5050b087e1
Fix trickplay image grid Y-coordinate calculation (#943) (#1259)
## Description
Issue 943 where trickplay images were misaligned with seek preview
mages. I made a post in issues but figured i'd go ahead and make the
pull request.

per gemini:
In SeekPreviewImage.kt, the code calculates which tile in the grid to
display based on the current timestamp:

val x = (tileIndex % trickPlayInfo.tileWidth) // x position within tile
grid
val y = (tileIndex / trickPlayInfo.tileHeight) // y position <-- BUG IS
HERE
To find the correct row (y) in a grid, you are supposed to divide the
current index by the width of the row (the number of columns), not the
height.

Why this breaks: Let's assume a standard trickplay grid that is 10
images wide (tileWidth = 10) and 5 images tall (tileHeight = 5).

If you are looking at the 12th image (tileIndex = 11), it should be on
Row 1 (the second row).

The code calculates y = 11 / 5 = 2. It skips to Row 2!

Because it divides by the smaller height value, the y coordinate
increases much faster than it should. This causes the preview to
visually "jump" down to future rows prematurely, and then snap back as
the x coordinate resets, causing the exact "flashing back and forth" you
saw with the credits and intros.

### Related issue
Fixes #943

### Testing
Tested in Android TV (Android 9) and it does indeed display proper seek
previews using trickplay images.


## AI or LLM usage
Gemini Pro was used to find and fix this bug.
2026-04-18 17:07:18 -04:00
Ray
b3d630f272
Add option to never show next up episodes (#1257)
## Description
Adds an option to never show next up. This means when an episode
completes, the app always returns to the previous page instead of
suggesting the next episode.

### Related issues
Closes #1100

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-04-16 17:28:02 -04:00
Ray
b5422fe82b
Show last played date on overview dialog (#1248)
## Description
Adds a line to the overview/media info dialog with the date when the
item was last played.

### Related issues
N/A

### Testing
Emulator

## Screenshots
<img width="1280" height="720" alt="last_played Large"
src="https://github.com/user-attachments/assets/1c38141d-1000-43d0-bf28-a0845edfacc2"
/>

## AI or LLM usage
None
2026-04-16 00:26:57 -04:00
Ray
b18416c954
Integrate with libass-android to support SSA/ASS subtitles in ExoPlayer (#1052)
## Description
Add better ASS/SSA support to ExoPlayer by using
[`libass-android`](https://github.com/peerless2012/libass-android).

This is enabled with the "Use libass for ASS subtitles" advanced
settings for ExoPlayer. It is enabled by default.

### Related issues
Related to #22
Replaces reverted #569
Fixes #1107
2026-04-15 17:50:34 -04:00
Ray
95859be3c6
Add a small glow effect to the segment skip button (#1228)
## Description
Adds a small glow to the border of the segment skip buttons, ie "Skip
Intro", etc. Since this button appears as focused immediately, there's
no contrast and it can be missed sometimes. So this glowing border draws
the eye a bit better.

Also a small change to reduce the minimum skip forward amount to 5
seconds .

### Related issues
Skip forward: #1203

### Testing
Emulator. But this needs some "real world" testing on a TV, too, so this
may need tweaking

## Screenshots


https://github.com/user-attachments/assets/5488d468-aee4-4448-a823-6326ccb003da

## AI or LLM usage
None
2026-04-15 17:49:54 -04:00
Ray
ae5dd1f3a9
Translations 2026-04-11 (#1232)
Update translations as of 2025-04-11. Adds a new language translation:
Thai

Thanks to all of the contributors!
2026-04-12 08:42:31 -04:00
SimonHung
9037527d2a
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (538 of 538 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hant/
2026-04-11 22:25:36 -04:00
Ray
287a7b0c69
Create FireTV specific app variant (#1230)
## Description
Adds a variant of Wholphin targeted for the Amazon Fire TV App store.

### Related issues
See #1192 for more details

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-04-11 19:30:23 -04:00
Damontecres
2a9f8a27af
Fix formatting 2026-04-11 13:40:20 -04:00
idezentas
acf4eab1d9
Translated using Weblate (Turkish)
Currently translated at 100.0% (538 of 538 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/tr/
2026-04-10 18:56:49 +00:00
Outbreak2096
89dc42871e
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (538 of 538 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hans/
2026-04-10 18:56:49 +00:00
Chosnuk
1f7b7c8b24
Translated using Weblate (Polish)
Currently translated at 55.0% (296 of 538 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pl/
2026-04-10 18:56:49 +00:00
Priit Jõerüüt
9a4bf6eaa8
Translated using Weblate (Estonian)
Currently translated at 100.0% (538 of 538 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/et/
2026-04-10 18:56:49 +00:00
danpergal84
e18a4ebfe2
Translated using Weblate (Spanish)
Currently translated at 100.0% (538 of 538 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/es/
2026-04-10 18:56:49 +00:00
idezentas
7718eca0c4
Translated using Weblate (Turkish)
Currently translated at 100.0% (534 of 534 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/tr/
2026-04-10 18:56:49 +00:00
Alan700
a8a906b81f
Translated using Weblate (French)
Currently translated at 100.0% (534 of 534 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/fr/
2026-04-10 18:56:49 +00:00
Outbreak2096
a5a0d3f349
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (534 of 534 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hans/
2026-04-10 18:56:49 +00:00
Alan700
cadbf04b4f
Translated using Weblate (French)
Currently translated at 100.0% (534 of 534 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/fr/
2026-04-10 18:56:49 +00:00
danpergal84
c539ba1bf6
Translated using Weblate (Spanish)
Currently translated at 100.0% (534 of 534 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/es/
2026-04-10 18:56:49 +00:00
Codeberg Translate
c2b620f15a
Update translation files
Updated by "Remove blank strings" add-on in Weblate.

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/
2026-04-10 18:56:49 +00:00
SimonHung
a700b37007
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 99.2% (530 of 534 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hans/
2026-04-10 18:56:49 +00:00
SimonHung
4e63f528fa
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (534 of 534 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hant/
2026-04-10 18:56:49 +00:00
lednurb
9674f8e8b5
Translated using Weblate (Dutch)
Currently translated at 90.9% (483 of 531 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/nl/
2026-04-10 18:56:49 +00:00
Priit Jõerüüt
1e1af85196
Translated using Weblate (Estonian)
Currently translated at 100.0% (531 of 531 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/et/
2026-04-10 18:56:49 +00:00
North-DaCoder
90ef9fda2e
Translated using Weblate (German)
Currently translated at 100.0% (531 of 531 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/de/
2026-04-10 18:56:49 +00:00
idezentas
664e7edb12
Translated using Weblate (Turkish)
Currently translated at 100.0% (531 of 531 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/tr/
2026-04-10 18:56:49 +00:00
lednurb
d4f1de461d
Translated using Weblate (Dutch)
Currently translated at 90.9% (483 of 531 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/nl/
2026-04-10 18:56:49 +00:00
arcker95
a442fd21b8
Translated using Weblate (Italian)
Currently translated at 100.0% (531 of 531 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/it/
2026-04-10 18:56:49 +00:00
danpergal84
cae9f8d25d
Translated using Weblate (Spanish)
Currently translated at 100.0% (531 of 531 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/es/
2026-04-10 18:56:49 +00:00
Codeberg Translate
f53b0dd507
Update translation files
Updated by "Remove blank strings" add-on in Weblate.

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/
2026-04-10 18:56:49 +00:00
jbrek
7f1ccc6146
Translated using Weblate (Thai)
Currently translated at 98.8% (524 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/th/
2026-04-10 18:56:48 +00:00
jbrek
278d2cc3e6
Translated using Weblate (Thai)
Currently translated at 29.2% (155 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/th/
2026-04-10 18:56:48 +00:00
opakholis
ac0e42320f
Translated using Weblate (Indonesian)
Currently translated at 100.0% (530 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/id/
2026-04-10 18:56:48 +00:00
jbrek
9e2df5660a
Added translation using Weblate (Thai) 2026-04-10 18:56:48 +00:00
idezentas
81a0ae39f0
Translated using Weblate (Turkish)
Currently translated at 100.0% (530 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/tr/
2026-04-10 18:56:48 +00:00
Chosnuk
d055ba4ab4
Translated using Weblate (Polish)
Currently translated at 49.8% (264 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pl/
2026-04-10 18:56:48 +00:00
lednurb
ffb7293368
Translated using Weblate (Dutch)
Currently translated at 91.1% (483 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/nl/
2026-04-10 18:56:48 +00:00
Pwnisher
36d2926ff7
Translated using Weblate (Romanian)
Currently translated at 63.9% (339 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/ro/
2026-04-10 18:56:48 +00:00
Outbreak2096
97690bdb7b
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (530 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hans/
2026-04-10 18:56:48 +00:00
Chosnuk
bfbcfe9678
Translated using Weblate (Polish)
Currently translated at 48.8% (259 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pl/
2026-04-10 18:56:48 +00:00
lednurb
a29cdae0a4
Translated using Weblate (Dutch)
Currently translated at 74.3% (394 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/nl/
2026-04-10 18:56:48 +00:00
arcker95
32258407df
Translated using Weblate (Italian)
Currently translated at 100.0% (530 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/it/
2026-04-10 18:56:48 +00:00
opakholis
0f165d1dbf
Translated using Weblate (Indonesian)
Currently translated at 95.8% (508 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/id/
2026-04-10 18:56:48 +00:00
Ray
97e10f57ca
Few UI improvments & fixes (#1229)
## Description
- Add indicator to mark the chosen version on the choose version dialog
- Add an option for album's context menu to add it to the now playing
queue
- Fix how season cards refresh on the series detail page so the images
don't glitch

### Related issues
Related to #1220

### Testing
Emulator mostly

## Screenshots

The indicator shows which version will play, whether explicitly chosen
by the user or implicitly picked by Wholphin.
![choose_version_indicator
Large](https://github.com/user-attachments/assets/7440ee1a-b9eb-4b34-ac39-86206c2eca09)

## AI or LLM usage
None
2026-04-10 14:56:43 -04:00
Ray
4eabaa9a52
Add option to remove item from Continue Watching and Next Up rows (#1140)
## Description
Adds context menu options for "Remove from continue watching" and
"Remove series from next up"

### Remove from continue watching

This marks the item as unplayed so it will not be shown on the Continue
Watching row anymore. It may still show on a Next Up or combined row
though.

### Remove series from next up

This first does the same as "Remove from continue watching" above. But
it also stores the series' ID in your display preferences as removed.
Wholphin will filter out this series from appearing in the Next Up row
until you watch _any_ episode in the series in the future.

This only works for Wholphin clients!

There's a dialog to view which series have been removed and to re-add
them manually. Settings->Customize Home->Settings->View removed next up

### Related issues
Closes #906

### Testing
Mostly emulator testing

## Screenshots

## AI or LLM usage
None
2026-04-07 16:04:21 -04:00
Ray
ade564d907
Add studio tab & filtering to TV show libraries (#1211)
## Description
Adds a tab for Studios (TV networks) to TV libraries. This displays a
grid of all of the studios. Clicking one displays the series produced by
the studio.

Additionally, adds a filter to the library tab to filter by studio. You
can select multiple studios, but its not the best UX since there will
likely be many studios (I have almost 200).

Finally, you can add a home row for studios in a library.

### Related issues
Closes #1002

### Testing
Mostly manual testing via emulator

## Screenshots
### Studios tab for a library
![studios_grid
Large](https://github.com/user-attachments/assets/d51e6d20-3768-4bd5-8a09-45cd491064b2)
### Filter drop down for studios
![filter_by_studios
Large](https://github.com/user-attachments/assets/7dbd4c13-4194-4674-b272-d42257368ce2)
### Updates series details
Shows the studio above the genres
![series_details_studio
Large](https://github.com/user-attachments/assets/745caa9b-838c-4e8b-b0f8-69d5f316287a)


## AI or LLM usage
None
2026-04-07 16:03:58 -04:00