Ray
fcba1c7444
Customize home page ( #803 )
...
## Description
This PR adds the ability to customize the home page in-app
### Features
- Add, remove, & reorder rows
- Persist the configuration locally
- Save the configuration to the server, allowing to pull down on other
devices
- Adjust view options for rows such as card height, image type,
preferring series images, or aspect ratio (similar to libraries)
- Pull down the web client's home rows (no plugins are supported yet!)
- Preview of the home page which is usable & updated as changes are made
### Row options
These are row types that can be added in-app via the UI:
- Continue watching
- Next up
- Combined continue waiting & next up
- Recently added in a library
- Recently released in a library
- Genres in a library
- Suggestions for a library (movie & TV show libraries only)
- Favorite movies, tv shows, episodes, etc
Additionally, there are more row types that don't have a UI to add them
(yet):
- Simple query to get items from a parent ID such as a collection or
playlist
- Complex query to get arbitrary items via the `/Items` API endpoint
### Dev notes
Settings are loaded in order:
1. Locally saved
2. Remote saved
3. Fallback to default similar to Wholphin's original home rows
The remote saved settings are stored via the display preferences API.
I know some server admins would prefer to push a default setup to their
clients. This PR does not have that ability, but it does define a
straightforward API for defining the settings. Something like the
potential server plugin work started in #625 could be slimmed down to
expose a URL to be added in the load order.
I'm also investigating integration with popular home page plugins to
allow for further customization, but will take more time.
### Related issues
Closes #399
Closes #361
Closes #282
Related to #340
2026-02-12 19:54:51 -05:00
Damontecres
b7679b3aa1
Release v0.4.3
2026-02-12 19:26:19 -05:00
Ray
3f0dedd71e
Fix error pages overlapping with nav drawer ( #887 )
...
## Description
As of #842 , if an error occurred on some pages that display a generic
error message, it would be shown under the nav drawer making it
difficult to read.
This PR fixes that by passing the `modifier` into the `ErrorMessage`
composables ensuring it has proper offset & padding. Also, for
consistency, passes it the `LoadingPage`s.
### Related issues
Caused by #842
### Testing
Threw an exception during home page loading to observe the issue and fix
on the emulator
## Screenshots
N/A
## AI or LLM usage
None
2026-02-12 19:21:16 -05:00
Justin Caveda
11fd780b31
Fix suggestions cache miss handling for missing files ( #880 )
...
## Description
Fix a bug where movie suggestions would get stuck loading when the
on-disk cache file doesn't exist.
### Related issues
Fixes #876
### Testing
Ran unit tests locally.
## Screenshots
N/A
## AI or LLM usage
Used AI to add testing for this scenario to unit test
---------
Co-authored-by: Ray <154766448+damontecres@users.noreply.github.com>
2026-02-12 18:27:59 -05:00
Ray
4161ea418c
Fixes the skip segment button appearance behavior ( #884 )
...
## Description
Fixes the segment (intro, credits, etc) skip button appearance behavior
For the button shown on the video: if the button for a given segment is
clicked, dismissed by the back button, or times out after 10 seconds, it
will never appear again even if you rewind the video.
However, the current non-ignored segment will always show a button on
the playback controls though so it's possible to still use it.
### Related issues
Fixes #875
### Testing
Tested a bunch of scenarios on the emulator
## Screenshots
N/A
## AI or LLM usage
None
2026-02-11 20:06:15 -05:00
voc0der
028553dc91
Add Quick Connect authorization to Settings ( #820 )
...
## Description
- Adding `Quick Connect` drawer to the Settings under the Seer
integration, and before Additional options.
- When interacted with, A inline-dialog appears (after internally
resetting itself), with gutter options Cancel / OK, like existing
dialogs, and when that is completed, where it completes the other side
of `Quick Connect`, e.g. login to your phone Jellyfin app by using
Wholphin.
- Failure and success both are indicated to the user and if success, it
closes the window.
### Related issues
Related to #819
Closes #819
### Testing
Tested on development build from my repo on a Nvidia Shield 2019.
Performed several logout/login, both success and fail to observe dialog
state and function.
## AI or LLM usage
Used Claude Sonnet 4.5 for most of the code, ChatGPT, reviewed it, then
I reviewed it, made a few tweaks.
2026-02-11 20:06:03 -05:00
Ray
83e5a44f37
Fixes glitches when scrolling on the home page ( #882 )
...
## Description
Fixes the possible glitch on some devices when scrolling left-right on
rows on the home page
### Related issues
Fixes #367
Fixes #872
### Testing
Emulator & shield 2019
## Screenshots
N/A
## AI or LLM usage
None
2026-02-11 16:07:22 -05:00
Ray
6e676b9474
Fixes overscrolling on recommended tabs ( #881 )
...
## Description
If the continue watching row is empty on recommended pages, it would
scroll to the first successfully loaded row even if previous ones are
still pending.
This PR fixes that so the page waits until the right first row is ready.
### Related issues
Fixes #839
### Testing
Emulator & shield 2019
## Screenshots
N/A
## AI or LLM usage
None
2026-02-11 16:05:11 -05:00
Damontecres
724d4d0da3
Release v0.4.2
2026-02-10 15:55:45 -05:00
Ray
a9c32edd5d
Update translations 2026-02-10 ( #874 )
...
Updating translations as of 2026-02-10
Many thanks to the contributors!
2026-02-10 15:45:50 -05:00
Damontecres
073f030d20
Fix spanish plurals
2026-02-10 15:14:08 -05:00
American_Jesus
9f2ca8ca18
Translated using Weblate (Portuguese)
...
Currently translated at 100.0% (387 of 387 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pt/
2026-02-10 19:59:42 +00:00
Outbreak2096
f539f69bb6
Translated using Weblate (Chinese (Simplified Han script))
...
Currently translated at 100.0% (387 of 387 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hans/
2026-02-10 19:59:42 +00:00
Fjuro
2cfd130853
Translated using Weblate (Czech)
...
Currently translated at 100.0% (384 of 384 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/cs/
2026-02-10 19:59:42 +00:00
Outbreak2096
c01235d183
Translated using Weblate (Chinese (Simplified Han script))
...
Currently translated at 100.0% (384 of 384 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hans/
2026-02-10 19:59:42 +00:00
arcker95
bdebe38b60
Translated using Weblate (Italian)
...
Currently translated at 100.0% (384 of 384 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/it/
2026-02-10 19:59:42 +00:00
opakholis
b51052acbb
Translated using Weblate (Indonesian)
...
Currently translated at 100.0% (384 of 384 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/id/
2026-02-10 19:59:42 +00:00
Lorixx
05bc8b67d1
Translated using Weblate (German)
...
Currently translated at 92.1% (354 of 384 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/de/
2026-02-10 19:59:41 +00:00
Bliiitz
cd540c621b
Translated using Weblate (French)
...
Currently translated at 99.7% (382 of 383 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/fr/
2026-02-10 19:59:41 +00:00
Priit Jõerüüt
70ea593bd9
Translated using Weblate (Estonian)
...
Currently translated at 100.0% (383 of 383 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/et/
2026-02-10 19:59:41 +00:00
Priit Jõerüüt
a62b34d372
Translated using Weblate (Estonian)
...
Currently translated at 100.0% (383 of 383 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/et/
2026-02-10 19:59:41 +00:00
idezentas
21010df2aa
Translated using Weblate (Turkish)
...
Currently translated at 100.0% (383 of 383 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/tr/
2026-02-10 19:59:41 +00:00
Fjuro
0f33f14972
Translated using Weblate (Czech)
...
Currently translated at 100.0% (383 of 383 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/cs/
2026-02-10 19:59:41 +00:00
Sathen
bdac869402
Translated using Weblate (Ukrainian)
...
Currently translated at 100.0% (383 of 383 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/uk/
2026-02-10 19:59:41 +00:00
Outbreak2096
03f57f4679
Translated using Weblate (Chinese (Simplified Han script))
...
Currently translated at 100.0% (383 of 383 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hans/
2026-02-10 19:59:41 +00:00
arcker95
a96b0b428d
Translated using Weblate (Italian)
...
Currently translated at 100.0% (383 of 383 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/it/
2026-02-10 19:59:41 +00:00
SimonHung
f5e0607ae9
Translated using Weblate (Chinese (Traditional Han script))
...
Currently translated at 100.0% (383 of 383 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hant/
2026-02-10 19:59:41 +00:00
idezentas
735d413a74
Translated using Weblate (Turkish)
...
Currently translated at 94.2% (361 of 383 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/tr/
2026-02-10 19:59:41 +00:00
efko
eea6003ffb
Translated using Weblate (Greek)
...
Currently translated at 46.7% (179 of 383 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/el/
2026-02-10 19:59:41 +00:00
ictu
a8ac91ecd1
Translated using Weblate (Polish)
...
Currently translated at 63.1% (242 of 383 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pl/
2026-02-10 19:59:41 +00:00
SimonHung
24cd367204
Translated using Weblate (Chinese (Traditional Han script))
...
Currently translated at 94.7% (363 of 383 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hant/
2026-02-10 19:59:41 +00:00
oyvhov
01bc279ecf
Translated using Weblate (Norwegian Bokmål)
...
Currently translated at 83.2% (319 of 383 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/nb_NO/
2026-02-10 19:59:41 +00:00
damontecres
2a264f31e6
Translated using Weblate (Spanish)
...
Currently translated at 94.2% (361 of 383 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/es/
2026-02-10 19:59:41 +00:00
Outbreak2096
231dc4e6df
Translated using Weblate (Chinese (Simplified Han script))
...
Currently translated at 100.0% (364 of 364 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hans/
2026-02-10 19:59:41 +00:00
arcker95
dd61bab8d1
Translated using Weblate (Italian)
...
Currently translated at 100.0% (364 of 364 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/it/
2026-02-10 19:59:41 +00:00
idezentas
47f12b8735
Translated using Weblate (Turkish)
...
Currently translated at 100.0% (362 of 362 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/tr/
2026-02-10 19:59:41 +00:00
subatomic9345
4b8ee5f5de
Translated using Weblate (German)
...
Currently translated at 94.4% (342 of 362 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/de/
2026-02-10 19:59:41 +00:00
idezentas
1a4daf8078
Added translation using Weblate (Turkish)
2026-02-10 19:59:40 +00:00
opakholis
4155556c05
Translated using Weblate (Indonesian)
...
Currently translated at 100.0% (362 of 362 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/id/
2026-02-10 19:59:40 +00:00
SimonHung
1c9afd0408
Translated using Weblate (Chinese (Traditional Han script))
...
Currently translated at 100.0% (362 of 362 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hant/
2026-02-10 19:59:40 +00:00
danyrd92
4dd6e3a6c0
Translated using Weblate (Spanish)
...
Currently translated at 100.0% (362 of 362 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/es/
2026-02-10 19:59:40 +00:00
damontecres
8605fcafa8
Translated using Weblate (Spanish)
...
Currently translated at 100.0% (362 of 362 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/es/
2026-02-10 19:59:40 +00:00
haldq
404a883eb4
Translated using Weblate (German)
...
Currently translated at 94.1% (341 of 362 strings)
Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/de/
2026-02-10 19:59:40 +00:00
Damontecres
f7efbf9f87
Don't show directed by line if director is unknown
2026-02-10 14:59:27 -05:00
Ray
df2f03cf83
Update dependencies ( #866 )
...
## Description
Update dependencies
### Related issues
Just updating some of the dependencies in #858 that don't require AGP 9
### Testing
Emulator
## Screenshots
N/A
## AI or LLM usage
None
2026-02-10 00:26:11 -05:00
renovate[bot]
6b068079fe
Update dependency python to 3.14 ( #861 )
2026-02-09 20:47:07 -05:00
renovate[bot]
c279d9c9f7
Update Gradle to v8.14.4 ( #862 )
2026-02-09 20:46:47 -05:00
renovate[bot]
6d5726a582
Update Github Actions (major) ( #857 )
...
This PR contains the following updates:
| Package | Type | Update | Change |
|---|---|---|---|
| [actions/cache](https://redirect.github.com/actions/cache ) | action |
major | `v4` → `v5` |
| [actions/checkout](https://redirect.github.com/actions/checkout ) |
action | major | `v5` → `v6` |
|
[actions/setup-python](https://redirect.github.com/actions/setup-python )
| action | major | `v5` → `v6` |
|
[actions/upload-artifact](https://redirect.github.com/actions/upload-artifact )
| action | major | `v5` → `v6` |
---
### Release Notes
<details>
<summary>actions/cache (actions/cache)</summary>
### [`v5`](https://redirect.github.com/actions/cache/compare/v4...v5 )
[Compare
Source](https://redirect.github.com/actions/cache/compare/v4...v5 )
</details>
<details>
<summary>actions/checkout (actions/checkout)</summary>
### [`v6`](https://redirect.github.com/actions/checkout/compare/v5...v6 )
[Compare
Source](https://redirect.github.com/actions/checkout/compare/v5...v6 )
</details>
<details>
<summary>actions/setup-python (actions/setup-python)</summary>
###
[`v6`](https://redirect.github.com/actions/setup-python/compare/v5...v6 )
[Compare
Source](https://redirect.github.com/actions/setup-python/compare/v5...v6 )
</details>
<details>
<summary>actions/upload-artifact (actions/upload-artifact)</summary>
###
[`v6`](https://redirect.github.com/actions/upload-artifact/compare/v5...v6 )
[Compare
Source](https://redirect.github.com/actions/upload-artifact/compare/v5...v6 )
</details>
---
### Configuration
📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions ) if
that's undesired.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/ ).
View the [repository job
log](https://developer.mend.io/github/damontecres/Wholphin ).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi45Ny4wIiwidXBkYXRlZEluVmVyIjoiNDIuOTcuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-09 18:29:27 -05:00
Ray
6954d821ed
Fix two UI issues ( #856 )
...
## Description
Fixes UI issues:
- Showing unplayed corner text on multi-part movies
- Fix duplicate or missing rating info on discover movie & series pages
### Related issues
N/A
### Testing
Emulator
## Screenshots
N/A
## AI or LLM usage
None
2026-02-09 18:27:10 -05:00
renovate[bot]
6ec10b9b82
Update dependency com.google.devtools.ksp to v2.3.5 ( #855 )
...
This PR contains the following updates:
| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/ ) |
[Confidence](https://docs.renovatebot.com/merge-confidence/ ) |
|---|---|---|---|
| [com.google.devtools.ksp](https://goo.gle/ksp )
([source](https://redirect.github.com/google/ksp )) | `2.3.0` → `2.3.5` |

|

|
---
### Release Notes
<details>
<summary>google/ksp (com.google.devtools.ksp)</summary>
###
[`v2.3.5`](https://redirect.github.com/google/ksp/releases/tag/2.3.5 )
[Compare
Source](https://redirect.github.com/google/ksp/compare/2.3.4...2.3.5 )
#### What's Changed
- KSPCoreEnvironment.instance\_prop leaks memory when used
programmatically
[#​2742](https://redirect.github.com/google/ksp/issues/2742 )
- Missing first annotation argument when toByte is used
[#​2672](https://redirect.github.com/google/ksp/issues/2672 )
- Fix circular dependency between KSP and KAPT in AGP 9.0
[#​2743](https://redirect.github.com/google/ksp/issues/2743 )
#### Contributors
- Thanks to everyone who reported bugs and participated in discussions!
**Full Changelog**:
<https://github.com/google/ksp/compare/2.3.4...2.3.5 >
###
[`v2.3.4`](https://redirect.github.com/google/ksp/releases/tag/2.3.4 )
[Compare
Source](https://redirect.github.com/google/ksp/compare/2.3.3...2.3.4 )
#### What's Changed
- KSP ignores sources in Kotlin directory
[#​2730](https://redirect.github.com/google/ksp/issues/2730 )
- Avoid recording Java symbol lookups in non-incremental builds
[#​2728](https://redirect.github.com/google/ksp/issues/2728 )
- Clean up ThreadLocals when processing is done
[#​2709](https://redirect.github.com/google/ksp/issues/2709 )
#### Contributors
- Thanks to everyone who reported bugs and participated in discussions!
**Full Changelog**:
<https://github.com/google/ksp/compare/2.3.3...2.3.4 >
###
[`v2.3.3`](https://redirect.github.com/google/ksp/releases/tag/2.3.3 )
[Compare
Source](https://redirect.github.com/google/ksp/compare/2.3.2...2.3.3 )
#### What's Changed
- Migrate away from a deprecated compilerOptions KGP API
[#​2703](https://redirect.github.com/google/ksp/issues/2703 )
#### Contributors
- Thanks to everyone who reported bugs and participated in discussions!
**Full Changelog**:
<https://github.com/google/ksp/compare/2.3.2...2.3.3 >
###
[`v2.3.2`](https://redirect.github.com/google/ksp/releases/tag/2.3.2 )
[Compare
Source](https://redirect.github.com/google/ksp/compare/2.3.1...2.3.2 )
#### What's Changed
**Note:** This release is a hotfix for a regression introduced in 2.3.1
- Fixed an issue where KSP incorrectly processed specific nullable
annotations from Java interfaces, leading to incorrect nullability in
the generated Kotlin code
[#​2696](https://redirect.github.com/google/ksp/issues/2696 )
- Fixed a regression introduced in
[#​2656](https://redirect.github.com/google/ksp/issues/2656 ) that
caused runtime failures for projects using AGP 8.8.0 and older due to an
incompatible, version-specific type check.
[#​2694](https://redirect.github.com/google/ksp/issues/2694 )
#### Contributors
Thanks to everyone who reported bugs and participated in discussions!
**Full Changelog**:
<https://github.com/google/ksp/compare/2.3.1...2.3.2 >
###
[`v2.3.1`](https://redirect.github.com/google/ksp/releases/tag/2.3.1 )
[Compare
Source](https://redirect.github.com/google/ksp/compare/2.3.0...2.3.1 )
#### What's Changed
- Added support for AGP 9.0 and built-in Kotlin
[#​2674](https://redirect.github.com/google/ksp/issues/2674 )
- Fixed a bug in getJvmCheckedException that incorrectly handled nested
classes.
[#​2584](https://redirect.github.com/google/ksp/issues/2584 )
- Removed incorrect caching for KSValueArgumentLiteImpl that wrongly
merged arguments with different parents, origins, or locations
[#​2677](https://redirect.github.com/google/ksp/issues/2677 )
#### Contributors
Thanks to everyone who reported bugs and participated in discussions!
**Full Changelog**:
<https://github.com/google/ksp/compare/2.3.0...2.3.1 >
</details>
---
### Configuration
📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/ ).
View the [repository job
log](https://developer.mend.io/github/damontecres/Wholphin ).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi45Ny4wIiwidXBkYXRlZEluVmVyIjoiNDIuOTcuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-09 17:51:49 -05:00