Commit graph

1052 commits

Author SHA1 Message Date
Damontecres
a27bb2a962
Option to load from server plugin 2026-05-13 09:44:15 -04:00
Damontecres
f02f66c506
WIP 2026-05-13 08:29:54 -04:00
Damontecres
1614ef7158
Translations 2026-05-11 (#1374)
Update translations as of 2025-05-11

Thank you to all of the contributors!
2026-05-12 13:11:33 -04:00
dudecuda
96f94feac2
libass-android lifecycle issue: Fixes #1049 (much of it) (#1362)
Fixed a bug with libass integration where the background thread
responsible for drawing the ASS subtitles (AssRenderThread) has been
shut down, but ExoPlayer is still actively running and trying to push
video time updates to it. Added fallback for software rendering on older
android versions that can have broken OpenGl implementation.This should
address much of issue #1049.

## Description
Essentially, debug logs showed repeated:
3145 3920 W MessageQueue: Handler (android.os.Handler) {4ba3c72} sending
message to a Handler on a dead thread
3145 3920 W MessageQueue: java.lang.IllegalStateException: Handler
(android.os.Handler) {4ba3c72} sending message to a Handler on a dead
thread

Essentially this was a lifecycle bug where the libass-android thread was
created, but was detaching from the window, shutting down when it does
so. It was still registered to ExoPlayer, but since there was no thread
to send to, it just repeatedly kept failing, never spinning back up to
display any subtitles. It seems just about any ui change can cause this
detachment, but in this case it seems it was right from the moment the
loading spinner shows up (making libass-android fail before video starts
playing).

Fixed by ensuring TextureView's visibility wasn't changed to invisible,
which ends up destroying the canvas that libass-android attaches itself
to. Hid the canvas using graphicsLayer (so the user can't see it, but
it's still alive and active). Also changed resizing logic to prevent
Android from seeing a 0x0 TextureView as "destroyed".

Since I discovered in testing how terribly my TV's OpenGl was handling
this, I added an additional fallback for Android versions < 9. Older
TV's can fallback to software rendering when using libass-android.

### Related issues
#### Issue #1049 : 
**Fixes:**
- the issue where libass-android (when enabled) fails to load any
subtitles in ExoPlayer DirectPlay.

**Not Fixed from issue #1049 :**
- Issues around accented characters.
- Any issues surrounding MPV (I have no way of testing, MPV never worked
on any player for me)
- Fallback mode (libass-android disabled) where subtitles aren't
rendering properly

**Added:**
- While testing, discovered older Android versions have trouble with
reliable OpenGl rendering. Thus I added a fallback for older Android
versions to use libass-android in software rendering mode
(AssRenderType.OVERLAY_CANVAS)

### Testing
- Tested and confirmed flawlessly to work on Android 9 TCL Smart TV
(AssRenderType.OVERLAY_CANVAS)
- Tested on Android 14 Chromecast (AssRenderType.OVERLAY_OPEN_GL).
Slightly less perfect (font not always a match, less fancy shadows) but
most ASS/SSA effects work well. May be worth testing other AssRenderType
options to compare features and performance on other machines.

## AI or LLM usage
Google Gemini Pro in tracing down the cause and fine-tuning the fixes.

---------

Co-authored-by: Damontecres <damontecres@gmail.com>
2026-05-11 17:49:08 -04:00
Damontecres
8b9b0ddec8
Fix two home row focus bugs (#1376)
## Description
1. Fixes when moving from nav drawer to home page content, focus would
sometimes move up a row
2. Fixes when moving up/down between rows, focus would sometimes move to
the later card (usually the last visible)

The second above is fixed by downgrading `tv-material` to
`1.0.1-alpha01`. Switching to
[`1.0.1-beta01`](https://developer.android.com/jetpack/androidx/releases/tv#tv-material-1.1.0-beta01)
or newer causes the bug. Not clear if its a bug in the library or
Wholphin though.

### Related issues
Fixes #1359

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-05-11 17:48:38 -04:00
Damontecres
4928c1156d
Fix cleaning up APKs on debug builds (#1373)
## Description
Directly use "Wholphin" when searching for older APKs to clean up.

On debug builds, the `app_name` string is "Wholphin (Debug)" but the APK
file names is always "Wholphin.apk", so I think the debug build won't
clean them up.

### Related issues
Fixes #1368

### Testing
Testing downloading a few times without this change, applied the change,
and clean up worked

## Screenshots
N/A

## AI or LLM usage
None
2026-05-11 11:12:05 -04:00
tal_sarid
9c41a7200e
Translated using Weblate (Hebrew)
Currently translated at 100.0% (552 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/he/
2026-05-11 14:27:12 +00:00
tal_sarid
278dbe3774
Translated using Weblate (Hebrew)
Currently translated at 100.0% (552 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/he/
2026-05-11 14:27:12 +00:00
tal_sarid
af39b9f596
Translated using Weblate (Hebrew)
Currently translated at 99.2% (548 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/he/
2026-05-11 14:27:12 +00:00
Codeberg Translate
21fd8e0a14
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-05-11 14:27:12 +00:00
tal_sarid
aab0b62e83
Translated using Weblate (Hebrew)
Currently translated at 46.5% (257 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/he/
2026-05-11 14:27:12 +00:00
opakholis
c13d2f4129
Translated using Weblate (Indonesian)
Currently translated at 100.0% (552 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/id/
2026-05-11 14:27:12 +00:00
idezentas
1bf72656c8
Translated using Weblate (Turkish)
Currently translated at 100.0% (552 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/tr/
2026-05-11 14:27:12 +00:00
tal_sarid
47f728f8b1
Translated using Weblate (Hebrew)
Currently translated at 44.0% (243 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/he/
2026-05-11 14:27:11 +00:00
tal_sarid
73cb8c60fe
Translated using Weblate (Hebrew)
Currently translated at 30.6% (169 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/he/
2026-05-11 14:27:11 +00:00
RafaelSoaresP
74698d2d4e
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (552 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pt_BR/
2026-05-11 14:27:11 +00:00
arcker95
fb3f738f50
Translated using Weblate (Italian)
Currently translated at 100.0% (552 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/it/
2026-05-11 14:27:11 +00:00
TheMatrixan
3627d29d33
Translated using Weblate (Polish)
Currently translated at 100.0% (552 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pl/
2026-05-11 14:27:11 +00:00
American_Jesus
7d79bf3d3e
Translated using Weblate (Portuguese)
Currently translated at 100.0% (552 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pt/
2026-05-11 14:27:11 +00:00
Priit Jõerüüt
e8b3203817
Translated using Weblate (Estonian)
Currently translated at 100.0% (552 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/et/
2026-05-11 14:27:11 +00:00
North-DaCoder
95303ac2db
Translated using Weblate (German)
Currently translated at 100.0% (552 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/de/
2026-05-11 14:27:11 +00:00
Outbreak2096
80c4b9e7b7
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (552 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hans/
2026-05-11 14:27:11 +00:00
lednurb
75212e7148
Translated using Weblate (Dutch)
Currently translated at 89.6% (495 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/nl/
2026-05-11 14:27:11 +00:00
SimonHung
cd058b2f37
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (552 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hant/
2026-05-11 14:27:11 +00:00
danpergal84
251b659ad3
Translated using Weblate (Spanish)
Currently translated at 100.0% (552 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/es/
2026-05-11 14:27:11 +00:00
TheMatrixan
c66b41d90d
Translated using Weblate (Polish)
Currently translated at 100.0% (550 of 550 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pl/
2026-05-11 14:27:11 +00:00
MrDog
04f7f1ac79
Translated using Weblate (Slovenian)
Currently translated at 86.5% (476 of 550 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/sl/
2026-05-11 14:27:11 +00:00
randomsoftware
9767e3297e
Translated using Weblate (Arabic)
Currently translated at 29.6% (163 of 550 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/ar/
2026-05-11 14:27:11 +00:00
SimonHung
b0db3ce483
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (550 of 550 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hant/
2026-05-11 14:27:11 +00:00
MrDog
dbe788e7e9
Translated using Weblate (Slovenian)
Currently translated at 42.3% (233 of 550 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/sl/
2026-05-11 14:27:11 +00:00
RafaelSoaresP
aaca10fbea
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (550 of 550 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pt_BR/
2026-05-11 14:27:11 +00:00
Outbreak2096
9afc07e77c
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (550 of 550 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hans/
2026-05-11 14:27:11 +00:00
TheMatrixan
8b92fceeae
Translated using Weblate (Polish)
Currently translated at 100.0% (550 of 550 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pl/
2026-05-11 14:27:11 +00:00
n8llcaster
d7cbc1c926
Translated using Weblate (Slovak)
Currently translated at 94.5% (520 of 550 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/sk/
2026-05-11 14:27:11 +00:00
American_Jesus
2cb44090f6
Translated using Weblate (Portuguese)
Currently translated at 100.0% (550 of 550 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pt/
2026-05-11 14:27:11 +00:00
North-DaCoder
235a782621
Translated using Weblate (German)
Currently translated at 100.0% (550 of 550 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/de/
2026-05-11 14:27:11 +00:00
Brian Gunter
08db2b0efc
Accept digits in the PIN field in addition to l/r/u/d (#1330)
## Description
This enhances the PIN entry system by allowing users to input digits
using the numbers 0-9. This is useful for those using a keyboard or
universal remote with a number pad.

### Testing
Tested on Nvidia Shield Pro and Onn 4k Pro

## Screenshots
<img width="3840" height="2160" alt="Screenshot_20260429_083041"
src="https://github.com/user-attachments/assets/9e603bda-f1d3-4268-a04c-b077297fdfac"
/>

---------

Co-authored-by: Damontecres <damontecres@gmail.com>
2026-05-11 10:23:02 -04:00
Damontecres
cb46aa4159
Rearrange playback controller buttons (#1366)
## Description
- Moves the audio track selection out of the menu as a button
- Combines the settings & more buttons into one dialog

All functionality works the same, this is just UI changes

### Related issues
Related to #528

### Testing
Emulator, it's just UI changes

## Screenshots

### Before
<img width="1280" height="720" alt="controller_before Large"
src="https://github.com/user-attachments/assets/40430408-2108-4eda-9f05-d5f8c22a8b01"
/>

### After
<img width="1280" height="720" alt="controller_update Large"
src="https://github.com/user-attachments/assets/d2623a7c-9c05-4b0f-ae57-fed1c37e6cbc"
/>


## AI or LLM usage
None
2026-05-11 10:22:27 -04:00
Damontecres
df71baccea
Fix remove series from next up (#1369)
## Description
Fixes the "Remove series from next up" context menu item not working at
all.

Looks like after the refactoring in #1302, I missed [adding back the
function
call](https://github.com/damontecres/Wholphin/pull/1302/changes#diff-440f67bfe7be2011418c2f90e3a8ae2af05795a5161edd1a8bda14bc3b962cdcL175).

### Related issues
Fixes #1363

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-05-10 18:00:09 -04:00
Damontecres
dbd17597b2
Show public users when switching users (#1358)
## Description
Show the public users (ie "Hide this user from login screens" is
unchecked) if the server has any. Previously, all users had to be
explicitly added by username or quick connect.

This PR also refactors the server & user pages to use modern state flows
and deletes some unused code.

### Related issues
Closes #600

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-05-10 08:50:08 -04:00
Damontecres
b23d30f94b
Slightly optimize subtitles view & workaround possible crash (#1334)
## Description
Instead of adding/removing the `SubtitleView` from composition
sometimes, instead toggle its visibility. This is technically slightly
more efficient. There's also a couple other minor tweaks that make the
subtitles style a little more efficient.

This should also help prevent crash caused by possible a race condition
in libass-android
(https://github.com/peerless2012/libass-android/issues/75).

### Related issues
I think this fixes #1322

### Testing
Emulator mostly

## Screenshots
N/A

## AI or LLM usage
None
2026-05-06 18:29:26 -04:00
Damontecres
8107a82a6b
Fixes/improves showing delete button (#1353)
## Description
Fixes the delete button not showing on the movie detail page. Also fixes
some edge cases where button may not appear when toggling on the media
management setting.

Adds the delete button to album & artist pages. Previously, it was only
in the context menu.

### Related issues
Fixes #1343

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-05-06 11:49:27 -04:00
Damontecres
461bad1ddd
Fix bug where changing subtitles during playback doesn't work (#1352)
## Description
Fixes an issue when changing subtitles during playback if you had
previously explicitly chosen subtitles for that item but not chosen an
audio track.

### Related issues
I don't think there is a specific issue for this

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-05-06 11:49:13 -04:00
Damontecres
6afcfb469b
Enable large heap (#1337)
## Description
This PR simply enables the `largeHeap` flag to request more memory from
the OS.

I am a bit embarrassed that I haven't added this before now, but I had
read that using `largeHeap` was a bandaid, not a solution. So I assumed
Wholphin was doing something incorrect memory-wise. But after crawling
through many, many heap dumps to analyze Wholphin's memory usage, and
after further research, enabling this does make sense for handling high
bitrate, high resolution videos. Furthermore, many other Jellyfin
clients and other video apps like Plex and Prime Video have this
enabled.

So since I am pretty confident that Wholphin doesn't have any memory
leaks, I feel good about enabling this.

### Related issues
I believe this will fix many of the bug reports about crashes during 4K
playback, but it's not a cure-all since it is up the device & OS to
allocate the max memory.
Fixes #333 
Fixes #826
Fixes #1189

### Testing
Shield 2019, Fire 4k Max

## Screenshots
N/A

## AI or LLM usage
None
2026-05-01 19:12:23 -04:00
Damontecres
d538b8d4f9
Preload grid card images & other minor optimizations (#1328)
## Description
Preload ~6 rows worth of images on library grid pages. So depending on
device CPU & memory, most cards do not show a placeholder image when
scrolling unless you press and hold up/down to scroll as fast as
possible.

There's a couple other minor optimizations on the grid code as well, but
nothing huge.

### Dev notes

This PR makes the `cacheWindow` for pre-rendering cards applicable to
their images. Previously, images would not be fetched until the card is
laid out within the window. This was to get the width/height to pass to
the server request. This PR instead calculates the card widths when the
grid itself is laid out and then passes this width into the cards'
composables.

### Related issues
Related to #1246

### Testing
Tested with emulator, shield, fire stick 4k max

## Screenshots
N/A

## AI or LLM usage
None
2026-04-29 19:45:57 -04:00
Damontecres
b94faceb2f
Choose backend to play media in context menu (#1325)
## Description
Adds a context menu option to choose the player backend or transcoding
to start playback. This allows for temporarily swapping to another
backend without having to updating the settings.

### Related issues
A couple comments have suggested this, but I don't think there's a
specific feature request

### Testing
Emulator

## Screenshots
<img width="1280" height="720" alt="play_with Large"
src="https://github.com/user-attachments/assets/2a75756f-5d7f-45f6-8ea6-a406f3d7f3e1"
/>


## AI or LLM usage
None
2026-04-29 19:45:37 -04:00
Damontecres
c718d903a4
Refactor context menu code (#1302)
## Description
This PR refactors most of the context menu dialog code moving more of
the display into a Composable. This then allows for embedding the
confirm delete or choose version sub-dialogs. This will allow for easier
future expansion of the context menu.

Now instead of the page using a combination of `DiaglogPopup` &
`buildMoreFor` functions, pages create a `ContextMenu` object and pass
it to a composable.

There's no significant user facing changes.

### Related issues
None

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-04-27 18:58:54 -04:00
idezentas
a46cb36735
Translated using Weblate (Turkish)
Currently translated at 100.0% (550 of 550 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/tr/
2026-04-26 21:53:03 +00:00
arcker95
4d81d31e8d
Translated using Weblate (Italian)
Currently translated at 100.0% (550 of 550 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/it/
2026-04-26 21:53:03 +00:00
Priit Jõerüüt
c616d58ce5
Translated using Weblate (Estonian)
Currently translated at 100.0% (550 of 550 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/et/
2026-04-26 21:53:03 +00:00