Commit graph

1107 commits

Author SHA1 Message Date
true-seeker
ac98dd4a2b
Translated using Weblate (Russian)
Currently translated at 62.8% (338 of 538 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/ru/
2026-04-26 21:53:00 +00:00
ymir
1d55073ccd
Translated using Weblate (French)
Currently translated at 100.0% (538 of 538 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/fr/
2026-04-26 21:53:00 +00:00
North-DaCoder
f57954cf4f
Translated using Weblate (German)
Currently translated at 100.0% (538 of 538 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/de/
2026-04-26 21:53:00 +00:00
Damontecres
5571654a22
Show overlay for extra items (#1320)
## Description
Shows the overlay (watched, progress bar) for extras appearing as single
items. Grouped extras individually show the overlay when clicking into.
If all of the grouped are played, the group is show with the watched
indicator.

Also very slightly optimizations the UI by offloading the
title/subtitle/imageUrl to object creation time instead of when they're
shown on screen.

### Related issues
Closes #1311

### Testing
Shield testing with different extras

## Screenshots
N/A

## AI or LLM usage
None
2026-04-26 17:52:57 -04:00
Damontecres
8cf99900e5
Fix index error on home page refresh with empty rows (#1318)
## Description
Fixes an bug caused when the home page has an empty row before the last
row and there are non-empty rows later, an `IndexOutOfBoundsException`
would be thrown.

Also removes the loading indicator if an unknown error occurs during a
refresh.

### Related issues
Fixes #1314

### Testing
Emulator & shield

## Screenshots
N/A

## AI or LLM usage
None
2026-04-26 16:09:19 -04:00
Damontecres
edb37f5d69
Add support for cinema mode (#1305)
## Description
Adds support for cinema mode, which is enabled by default.

When enabled and if starting playback from the beginning, the server is
queried for any "intros", ie prerolls or trailers, to play first. These
are shown in the queue and can be skipped if desired.

The server has to provide the intros, so a plugin like
https://github.com/jellyfin/jellyfin-plugin-intros or
https://github.com/CherryFloors/jellyfin-plugin-cinemamode is required
server-side.

### Related issues
Closes #418
Closes #1180

### Testing
Emulator and server w/
https://github.com/CherryFloors/jellyfin-plugin-cinemamode

## Screenshots
N/A

## AI or LLM usage
None
2026-04-26 10:16:26 -04:00
Damontecres
3f0613f5f4
Fix play/shuffle buttons on music library tabs (#1307)
## Description
Fixes the play & shuffle buttons on music library tabs.

They previously attempted to play the audio via the video playback
method. This PR adds the ability to override the buttons and does so for
music libraries.

### Related issues
Fixes #1304

### Testing
Emulator, compared results against the web UI

## Screenshots
N/A

## AI or LLM usage
None
2026-04-25 10:35:12 -04:00
Damontecres
50174db22e
Updates to the playback debug overlay (#1290)
## Description
Lots of minor changes to the debug overlay

- Adjusts the size and layout 
- Smaller font size
- Only shows selected tracks by default
- Expanding tracks are scrollable and don't cover controls
- Show (estimated) network bitrate
- Show heap memory usage
- Better controls/chapters/queue animations
- Minor optimizations

Dev note: There's lots of code reorganization too

### Related issues
Related to #1216
Related to https://github.com/damontecres/Wholphin/issues/528

### Testing
Emulator & nvidia shield

## Screenshots
### Selected tracks
<img width="1280" height="720" alt="overlay1 Large"
src="https://github.com/user-attachments/assets/e6ef71f5-73ef-4947-8b2a-0f41f64ef019"
/>

### Expanded tracks, scrolled down
<img width="1280" height="720" alt="overlay2 Large"
src="https://github.com/user-attachments/assets/2e655f7e-7331-42dd-a572-0173b06563a8"
/>

### Transcode info
<img width="1280" height="720" alt="overlay3 Large"
src="https://github.com/user-attachments/assets/3081e2ec-bb9e-422c-b833-c22785c649bf"
/>

## AI or LLM usage
None
2026-04-24 15:51:43 -04:00
Damontecres
8dd396b777
Move skip segments settings to their own page (#1306)
## Description
Moves the five skip segment settings to their own page. So there's now a
single "Skip behavior" that you click to bring up the settings for the
five. I doubt many people change these frequently, so moving them to a
new page de-clutters the settings page.

### Related issues
N/A

### Testing
Emulator

## Screenshots

### Advanced settings
<img width="1280" height="720" alt="single_setting Large"
src="https://github.com/user-attachments/assets/673555d5-109c-4c43-9073-f51572bb949d"
/>

### Skip segment specific settings
<img width="1280" height="720" alt="skip_settings Large"
src="https://github.com/user-attachments/assets/dae9d0bd-7340-4731-b561-b7b4e74d9d4f"
/>

## AI or LLM usage
None
2026-04-24 14:50:23 -04:00
Damontecres
ab5c884072
External player follow up fixes (#1294)
## Description
Fixes some issues when using an external player:
- Send playback started before launching so the last played date is
updated
- Only use VLC's position if >0 since it returns 0 when playback
completes

### Related issues
Follow up to #1256 

### Testing
Emulator & nvidia shield

## Screenshots
N/A

## AI or LLM usage
None
2026-04-23 15:08:25 -04:00
Damontecres
0e37084a16
Fix always listing next up/continue watching rows first (#1288)
## Description
Previously the home page always tried to load the "watching rows" (Next
up, Continue watching, or combined) first. This meant that even if the
user's customized home page did not put these rows at the top, they
would always be listed first anyway.

This PR fixes this so rows on the home page are always listed in the
right order.

### Related issues
Fixes #1275

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-04-22 13:34:43 -04:00
Damontecres
c9cab7a5c2
Show season extras row on series overview (#1286)
## Description
Adds a row for season level extras on the series overview page below the
people rows. The extras will update when switching between season tabs.

Like elsewhere in the app, an single extra of a type is show inline and
multiple extras of the same type open a grid when clicked.

### Related issues
Closes #504

### Testing
Emulator

## Screenshots
<img width="1280" height="720" alt="season_extras Large"
src="https://github.com/user-attachments/assets/bc62bef4-66c8-4412-9eca-ec0105d0d0fa"
/>


## AI or LLM usage
None
2026-04-21 17:34:38 -04:00
Ray
d373b32da5
Fix crash when OS screensaver started before opening Wholphin (#1285)
## Description
If the Wholphin OS screensaver starts before Wholphin (the app) is
opened, a default image loader is used. Then when Wholphin is opened, it
will crash when trying to set the app's image loader.

This PR adds configuring the image loader to the screensaver as well. It
is safe to do this multiple times. It's only an error to try to replace
the default image loader.

### Related issues
None

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-04-20 17:41:24 -04:00
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