Commit graph

529 commits

Author SHA1 Message Date
Ray
6df89fe8c9
Apply combined continue/next up, if enabled, on library recommended tabs (#533)
## Description
Respect the combine Continue Watching & Next Up setting on TV Show
library recommended tabs.

This uses the same implementation on the home screen, but only includes
items for that particular tv show library.

### Related issues
Fixes #532
2025-12-21 19:00:59 -05:00
Ray
11dda19b8a
TV Guide UI followup to #517 (#521)
## Description
- Instead of just replacing newline characters, collapse white-space
into single space characters which is roughly how the web UI does it
with CSS's `white-space: nowrap;`
- Use an actual arrow indicator instead of a `<` character for when a
program begins before the guide start

### Related issues
#517
https://github.com/damontecres/Wholphin/issues/434
https://github.com/damontecres/Wholphin/issues/435
https://github.com/damontecres/Wholphin/issues/436

### Screenshots
<img width="605" height="316" alt="image"
src="https://github.com/user-attachments/assets/6a5227b5-9960-4c6d-a086-a4a9867ea60b"
/>
2025-12-20 14:47:28 -05:00
Ray
a65b93e064
Enforce a minimum aspect ratio (#519)
## Description
When using a server provided aspect, force a minimum value (.666) in
case the server returns unusable data like zero.

Note: I have not been able to reproduce the errors in #451 to verify
that this PR will fix it. And it's not clear to me why #453 did not fix
it either. However, this PR shouldn't impact anything if the server is
sending valid aspect ratios and should at least prevent the crash on the
UI side.

### Related issues
Follow up to #453
Hopefully fixes #451
2025-12-20 14:39:59 -05:00
Ray
13d70e7623
Rework internals of ApiRequestPager (#518)
## Description
Changes how `init()` works for `ApiRequestPager` so that it 1) always
forces updating the total count if needed and 2) propagates errors
during the initial fetch up to the original caller

This means if an error occurs during the initialization of the pager
data, it won't be quietly logged and ignored. Instead, ViewModel code
will catch it and display an error in the UI.

### Related issues
Should fix #492
2025-12-20 14:39:48 -05:00
Ray
5c5db4c1ef
TV Guide title clean up & align start to half hours (#517)
## Description
- Cleans up program titles & subtitles by removing newline characters
- Align the start of the guide to half hour, rounded down, ie 9:52->9:30
or 11:05->11:00
- Add some visual indication that a program has started before the guide
start time
- This is done by adding a `<` prefix to the title and using sharp 90
degree corners at the start instead of rounded

### Related issues
Closes #434
Closes #435
Closes #436
2025-12-20 11:54:41 -05:00
Ray
693398536e
Better images for genre grid (#501)
## Description
Overhauls the genre cards for Movies & TV Show libraries.

Now the cards use a semi-transparent, consistent, generated color using
the same logic as in #478. And a random item from the library with that
genre is show in the background. This is heavily inspired from Plex.

If there are not applicable items for the genre, then just the colored
card is shown.

### Related issues
Fixes #490
2025-12-19 10:46:57 -05:00
Justin Caveda
e60748a0d0
[UI] Add playback overlay dark gradient background (#505)
## Description

This PR adds a background dimming effect behind the playback controls to
fix readability issues against bright video content. It implements a
full-screen vertical gradient that ensures white text and buttons remain
legible.

I added a vertical gradient fading from transparent at the top to ~95%
black at the bottom which adds contrast for UI elements without
obscuring the center of the video.

### Related issues

Solves [#485](https://github.com/damontecres/Wholphin/issues/485)

### Screenshots


<img width="1948" height="1112" alt="playback"
src="https://github.com/user-attachments/assets/f671072c-e37a-491d-b82f-fb6f888a42c7"
/>

<img width="1918" height="1081" alt="no_gradient"
src="https://github.com/user-attachments/assets/30bc2fee-ef5a-4d63-87a6-953e401cd84b"
/>


### AI/LLM usage

This change was developed with the assistance of AI, but was not wholly
generated by AI.

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Damontecres <damontecres@gmail.com>
Co-authored-by: Ray <154766448+damontecres@users.noreply.github.com>
2025-12-19 10:42:34 -05:00
Damontecres
0c823b91cd
Release v0.3.7 2025-12-18 18:26:24 -05:00
Ray
dda1c39dd2
Add Amazon app store link 2025-12-18 18:20:57 -05:00
Ray
c5214d886e
Fix backdrop not clearing on favorite tab changes (#507)
## Description
Fixes the backdrop not being cleared when switching tabs on the
favorites page by ensuring each has a unique view model.

Also clears the backdrop if the view option to show details is turned
off.

### Related issues
#476 
#499
2025-12-18 16:20:24 -05:00
Amar Sandhu
fd260f2709
Add "Ends at" time display. (#475)
Addresses #441 .

---------

Co-authored-by: Damontecres <damontecres@gmail.com>
2025-12-18 15:52:27 -05:00
Ray
1855c4666b
Always show video as Dolby Vision if it has DoVi title (#502)
## Description
Always show the "Dolby Vision" label instead of just HDR if the video
has a Dolby Vision title. This matches the behavior of the official app.

### Related issues
Fixes #491
2025-12-18 14:28:22 -05:00
Ray
644bf51aff
Fix backdrop not clearing between tabs (#500)
## Description
Follow up to #476 to clear the backdrop when switching tabs

### Related issues
Fixes #499
2025-12-18 14:01:21 -05:00
Ray
8b40e89b8a
Update MPV playback threading model (#481)
There's no user facing changes in this PR

This PR updates `MpvPlayer` to use a threading model more similar to
[ExoPlayer's
model](https://developer.android.com/reference/androidx/media3/exoplayer/ExoPlayer#threading-model).

There's now a dedicated thread looper message queue between the UI
interactions on the main thread and calls to `libmpv`. This is necessary
because previously, the main thread would make the calls into `libmpv`.
`libmpv` uses internal mutex locking for some operations which meant
that the main thread would be blocked momentarily.

Now, the UI issues a command (eg seek to X position) and the command is
added to the thread looper queue and processed on that separate thread.
This uses the standard Android Handler/Looper mechanisms.

Related to #235
2025-12-17 18:24:25 -05:00
Ray
7320c12f0c
Merge pull request #497 from damontecres/translations-2025-12-17
Fix merge
2025-12-17 17:19:36 -05:00
Ray
8c0defb772
Add translations as of 2025-12-17 (#495)
Adds another batch of translated strings.

Thank you to all of the contributors!

---------

Co-authored-by: Priit Jõerüüt <jrtcdbrg@noreply.codeberg.org>
Co-authored-by: ymir <ymir@noreply.codeberg.org>
Co-authored-by: ianvm <ianvm@noreply.codeberg.org>
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Outbreak2096 <outbreak2096@noreply.codeberg.org>
Co-authored-by: American_Jesus <american_jesus@noreply.codeberg.org>
Co-authored-by: Vistaus <vistaus@noreply.codeberg.org>
Co-authored-by: Geekice <geekice@noreply.codeberg.org>
Co-authored-by: opakholis <opakholis@noreply.codeberg.org>
Co-authored-by: RabSsS <rabsss@noreply.codeberg.org>
Co-authored-by: arcker95 <arcker95@noreply.codeberg.org>
Co-authored-by: Rand0mB0y <rand0mb0y@noreply.codeberg.org>
Co-authored-by: SimonHung <simonhung@noreply.codeberg.org>
Co-authored-by: efko <efko@noreply.codeberg.org>
Co-authored-by: DragoWing <dragowing@noreply.codeberg.org>
Co-authored-by: oyvhov <oyvhov@noreply.codeberg.org>
2025-12-17 17:01:08 -05:00
Ray
8479d8621d
Bump dependency versions, notably media3 (#496)
## Description
Bumps dependency versions, notably media3/ExoPlayer to `1.9.0`

### Related issues

Fixes #108
Fixes #355
Fixes #479
2025-12-17 17:00:15 -05:00
Priit Jõerüüt
badb56880b
Translated using Weblate (Estonian)
Currently translated at 100.0% (314 of 314 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/et/
2025-12-17 18:25:40 +00:00
oyvhov
e19cf0de2c
Translated using Weblate (Norwegian Nynorsk)
Currently translated at 8.0% (25 of 311 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/nn/
2025-12-17 18:25:40 +00:00
oyvhov
0ed15a3251
Added translation using Weblate (Norwegian Nynorsk) 2025-12-17 18:25:40 +00:00
efko
c94dcbf3dd
Translated using Weblate (Greek)
Currently translated at 57.8% (180 of 311 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/el/
2025-12-17 18:25:40 +00:00
Outbreak2096
461caaa8fd
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (311 of 311 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hans/
2025-12-17 18:25:40 +00:00
DragoWing
5ca5826cb3
Translated using Weblate (Dutch)
Currently translated at 99.3% (309 of 311 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/nl/
2025-12-17 18:25:40 +00:00
Priit Jõerüüt
e816151651
Translated using Weblate (Estonian)
Currently translated at 100.0% (311 of 311 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/et/
2025-12-17 18:25:40 +00:00
arcker95
da12095434
Translated using Weblate (Italian)
Currently translated at 100.0% (311 of 311 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/it/
2025-12-17 18:25:40 +00:00
American_Jesus
5f3a7ebff1
Translated using Weblate (Portuguese)
Currently translated at 100.0% (311 of 311 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pt/
2025-12-17 18:25:40 +00:00
efko
a67bd0f83f
Translated using Weblate (Greek)
Currently translated at 44.6% (139 of 311 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/el/
2025-12-17 18:25:40 +00:00
SimonHung
cb62344e53
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 87.1% (271 of 311 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hant/
2025-12-17 18:25:40 +00:00
ymir
f2e3ae2447
Translated using Weblate (French)
Currently translated at 100.0% (310 of 310 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/fr/
2025-12-17 18:25:40 +00:00
Codeberg Translate
131b44c439
Update translation files
Updated by "Remove blank strings" add-on in Weblate.

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/
2025-12-17 18:25:40 +00:00
Rand0mB0y
7da9189b4d
Translated using Weblate (Greek)
Currently translated at 20.3% (63 of 310 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/el/
2025-12-17 18:25:40 +00:00
Rand0mB0y
1497a0718b
Added translation using Weblate (Greek) 2025-12-17 18:25:40 +00:00
opakholis
6a7a2a5c79
Translated using Weblate (Indonesian)
Currently translated at 98.0% (304 of 310 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/id/
2025-12-17 18:25:40 +00:00
RabSsS
d0000e4811
Translated using Weblate (French)
Currently translated at 98.7% (306 of 310 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/fr/
2025-12-17 18:25:40 +00:00
Outbreak2096
cae07b0acd
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (310 of 310 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hans/
2025-12-17 18:25:40 +00:00
Vistaus
79b84cfe6b
Translated using Weblate (Dutch)
Currently translated at 100.0% (310 of 310 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/nl/
2025-12-17 18:25:40 +00:00
arcker95
a68e9d8eb9
Translated using Weblate (Italian)
Currently translated at 100.0% (310 of 310 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/it/
2025-12-17 18:25:40 +00:00
RabSsS
c0a68c5daa
Translated using Weblate (French)
Currently translated at 98.0% (304 of 310 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/fr/
2025-12-17 18:25:40 +00:00
opakholis
dcd9560113
Translated using Weblate (Indonesian)
Currently translated at 84.1% (261 of 310 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/id/
2025-12-17 18:25:40 +00:00
Priit Jõerüüt
5dbc2049cb
Translated using Weblate (Estonian)
Currently translated at 100.0% (310 of 310 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/et/
2025-12-17 18:25:40 +00:00
American_Jesus
1c38979c48
Translated using Weblate (Portuguese)
Currently translated at 100.0% (310 of 310 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pt/
2025-12-17 18:25:40 +00:00
Outbreak2096
1caa7b32c4
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 91.5% (280 of 306 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hans/
2025-12-17 18:25:40 +00:00
American_Jesus
9fde9c70ed
Translated using Weblate (Portuguese)
Currently translated at 99.6% (305 of 306 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pt/
2025-12-17 18:25:40 +00:00
Geekice
b8891eee35
Translated using Weblate (Italian)
Currently translated at 97.0% (297 of 306 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/it/
2025-12-17 18:25:40 +00:00
Priit Jõerüüt
4b3efc097e
Translated using Weblate (Estonian)
Currently translated at 100.0% (306 of 306 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/et/
2025-12-17 18:25:40 +00:00
American_Jesus
eef886b285
Translated using Weblate (Portuguese)
Currently translated at 99.3% (304 of 306 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pt/
2025-12-17 18:25:40 +00:00
Outbreak2096
1c890f64aa
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (272 of 272 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hans/
2025-12-17 18:25:40 +00:00
Vistaus
8b20c392f3
Translated using Weblate (Dutch)
Currently translated at 100.0% (272 of 272 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/nl/
2025-12-17 18:25:40 +00:00
ymir
56416da486
Translated using Weblate (French)
Currently translated at 100.0% (272 of 272 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/fr/
2025-12-17 18:25:40 +00:00
American_Jesus
ca7c8b2e5f
Translated using Weblate (Portuguese)
Currently translated at 90.0% (245 of 272 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pt/
2025-12-17 18:25:40 +00:00