Commit graph

548 commits

Author SHA1 Message Date
Ray
fd1feddab3
Improvements to overview/media info dialog (#580)
## Description
* Splits video details into two columns
* Show index number if multiple streams of the same type
* Different font color for media section titles
* Adjustments to spacing
* Add hearing impaired flag to & remove AVC from subtitle info

### Related issues
Closes #549
2025-12-27 12:47:01 -05:00
Ray
a797bd8267
Further improvements to resuming the app (#577)
## Description
Fixes issues when the app is resumed, such as after the screensaver is
dismissed.

For example, if you pause during playback and the screensaver starts,
Wholphin will stop playback and go back to the previous page. But with
this PR, instead of focus being lost and defaulting to teh nav drawer,
focus will restore on the play button or episode card.

### Related issues
Related to #552 &
https://github.com/damontecres/Wholphin/issues/552#issuecomment-3690614491
2025-12-26 15:40:52 -05:00
Ray
bdec72752d
Use backdrop images for genre cards (#578)
## Description
Uses backdrop instead of thumb images for the genre cards since the
backdrops tend to have little text to distract from the card title

### Related issues
Closes #574
2025-12-26 15:40:43 -05:00
Damontecres
5d1f4b6154
Merge branch 'release/v0.3.9' 2025-12-25 08:57:20 -05:00
Damontecres
5d3ad335cb
Release v0.3.9 2025-12-25 08:50:46 -05:00
Damontecres
c00c7b8aa9
Catch exceptions during app startup 2025-12-25 08:49:57 -05:00
Damontecres
72f910582f
Only clear backdrop on home for full reloads 2025-12-25 08:49:33 -05:00
Damontecres
13370db48d
Only clear backdrop on home for full reloads 2025-12-24 18:15:17 -05:00
Ray
2ecc3f262d
Optimize series data loading speed (#567)
## Description
Optimizes how both series pages are loaded. If the series has a lot of
seasons and/or lots of episodes per season, the pages load much faster.

This is a combination of reducing queried information, optimizing
finding the right data to display first, and lazy loading seasons.

Note: Series that don't have episode numbers, like daily TV shows, are
not as optimized yet

### Rough speed-ups
These numbers are from my (beefy) server, so it will vary based on your
server

Series details page (one with seasons row) w/ ~50 seasons: 5s->300ms,
~13x faster

Series overview page (one with episode row) w/ ~50 seasons & 25
episodes: 6s->1.1s, ~5x faster

### Related issues
Related to #562
2025-12-24 16:47:17 -05:00
Ray
b671e14826
Better restoration for auto sign in (#566)
## Description
Improves how the app restores state when auto sign in is enabled. If
auto sign in is enabled, the app will restore back to the last page.

#538 altered the app start up logic. This caused the app to reset state
more often when it goes into the background.

### Related issues
Related to #552
2025-12-24 16:44:41 -05:00
Justin Caveda
bcc7e660ea
Allow debug builds to to be installed alongside the stable app (#565)
## Description

This PR updates the debug build config to allow side by side
installation with the mainline/stable release by changing the app name
and app ID.

This is a convenience change to allow contributors to test debug builds
on their personal devices without overwriting the existing stable
version of the app
2025-12-24 13:31:06 -05:00
Damontecres
86e5e5ab54
Release v0.3.8 2025-12-23 12:43:20 -05:00
Ray
2b53a53155
Prevent quick details from using more veritical space if not enough horizontal space (#544)
## Description
Prevents the quick details (the dot separated details) from using more
vertical space if there is not enough horizontal space. Instead, the row
will be clipped at the total width.

This PR also gives more horizontal space to the details header on grid
pages. This matches the home page now.

### Related issues
Fixes #542
2025-12-22 19:16:12 -05:00
Ray
9a08cf3f25
Don't use saved library info for genre grids (#540)
## Description
The filtering & sorting for the genre results grid is now independent
from the actual library.

This prevents having a filter saved on the actual library that conflicts
with the Genre grid.

Also shows the genre name in the title of the page

### Related issues
Fixes #536
2025-12-22 15:44:08 -05:00
Ray
af54e777dc
Fix settings changes requiring an app restart (#539)
## Description
- Ensures settings changes take effect immediately instead of requiring
an app restart
- Add conditional & catch when checking for app updates

### Related issues
Fixes issues introduced in #538
2025-12-22 15:28:21 -05:00
Ray
eb4e9b93be
Add setting to toggle automatic sign in (#538)
## Description
The major user facing change in this PR is adding back the setting to
toggle automatic sign in on or off. This controls whether to restore the
app to where you left off or go the user selection page.

If enabled: re-opening the app will restore the previous user's session

If disabled: re-opening the app will always start with the user
selection page for the most recent server, or if there isn't a recent
server, the server selection page

This also separate this setting from the PIN protection settings in
previous PRs.

### Dev changes

This PR refactors the "setup" UI (server & user selection) to be
separate from the "app" UI (the actually app content). There is now a
`NavDisplay` for the setup flow which ends with displaying the
`ApplicationContent`'s `NavDisplay`. Most of the logic is moved out of
Compose code and into a `ViewModel`.

This means to switch users/server, the `SetupNavigationManager` must be
used instead of `NavigationManager`.


### Related issues
Closes #396
Fixes #376
2025-12-22 14:52:09 -05:00
Ray
20fe5e2626
Move MPV init & destroy to looper thread (#534)
## Description
No user facing changes in this PR

This is a continuation of #481 to move initializing and tearing down
`libmpv` onto the looper thread to prevent main thread blocking.

~The only function left that runs on the main thread is
`setVideoSurfaceView`. Since this has to directly interact with the UI,
I need to read the docs and ExoPlayer code a bit more to see how this
can safely done multi-threaded.~ It is safe/correct to attach on another
thread.
2025-12-22 10:40:42 -05:00
Ray
60838c2a86
Fixes a few bugs (#535)
## Description

A few minor bug fixes across the app

- Fix the language not showing after search on the subtitle search &
download dialog
- Clear the backdrop whenever the home page is reloading from scratch
- Enable pressing a remote's play (or play/pause) button on the series
page to play the focused episode

### Related issues
Play button follow up from #424
2025-12-21 21:31:01 -05:00
Ray
925a4b9d82
Add multi-part videos to playback queue (#520)
## Description
When playing media with multiple parts, the additional parts will be
added to the playback queue. This means a multi-part movie or episode
will be play all of the parts in order before the next item in the
queue.

This only affects the playback queue. There's no UI changes and no
indication that a movie or episode has multiple parts. I'll work on that
in a separate PR.

### Related issues
Related to #455
2025-12-21 21:30:00 -05:00
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