Commit graph

944 commits

Author SHA1 Message Date
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` |
![age](https://developer.mend.io/api/mc/badges/age/maven/com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin/2.3.5?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin/2.3.0/2.3.5?slim=true)
|

---

### 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
[#&#8203;2742](https://redirect.github.com/google/ksp/issues/2742)
- Missing first annotation argument when toByte is used
[#&#8203;2672](https://redirect.github.com/google/ksp/issues/2672)
- Fix circular dependency between KSP and KAPT in AGP 9.0
[#&#8203;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
[#&#8203;2730](https://redirect.github.com/google/ksp/issues/2730)
- Avoid recording Java symbol lookups in non-incremental builds
[#&#8203;2728](https://redirect.github.com/google/ksp/issues/2728)
- Clean up ThreadLocals when processing is done
[#&#8203;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
[#&#8203;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
[#&#8203;2696](https://redirect.github.com/google/ksp/issues/2696)
- Fixed a regression introduced in
[#&#8203;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.
[#&#8203;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
[#&#8203;2674](https://redirect.github.com/google/ksp/issues/2674)
- Fixed a bug in getJvmCheckedException that incorrectly handled nested
classes.
[#&#8203;2584](https://redirect.github.com/google/ksp/issues/2584)
- Removed incorrect caching for KSValueArgumentLiteImpl that wrongly
merged arguments with different parents, origins, or locations
[#&#8203;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
renovate[bot]
4e45502c1c
Update Androidx Media3 to v1.9.2 (#854)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[androidx.media3:media3-effect](https://redirect.github.com/androidx/media)
| `1.9.1` → `1.9.2` |
![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-effect/1.9.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-effect/1.9.1/1.9.2?slim=true)
|
|
[androidx.media3:media3-ui-compose](https://redirect.github.com/androidx/media)
| `1.9.1` → `1.9.2` |
![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-ui-compose/1.9.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-ui-compose/1.9.1/1.9.2?slim=true)
|
|
[androidx.media3:media3-ui](https://redirect.github.com/androidx/media)
| `1.9.1` → `1.9.2` |
![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-ui/1.9.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-ui/1.9.1/1.9.2?slim=true)
|
|
[androidx.media3:media3-exoplayer-dash](https://redirect.github.com/androidx/media)
| `1.9.1` → `1.9.2` |
![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-exoplayer-dash/1.9.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-exoplayer-dash/1.9.1/1.9.2?slim=true)
|
|
[androidx.media3:media3-exoplayer-hls](https://redirect.github.com/androidx/media)
| `1.9.1` → `1.9.2` |
![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-exoplayer-hls/1.9.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-exoplayer-hls/1.9.1/1.9.2?slim=true)
|
|
[androidx.media3:media3-session](https://redirect.github.com/androidx/media)
| `1.9.1` → `1.9.2` |
![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-session/1.9.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-session/1.9.1/1.9.2?slim=true)
|
|
[androidx.media3:media3-exoplayer](https://redirect.github.com/androidx/media)
| `1.9.1` → `1.9.2` |
![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-exoplayer/1.9.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-exoplayer/1.9.1/1.9.2?slim=true)
|
|
[androidx.media3:media3-datasource-okhttp](https://redirect.github.com/androidx/media)
| `1.9.1` → `1.9.2` |
![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-datasource-okhttp/1.9.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-datasource-okhttp/1.9.1/1.9.2?slim=true)
|

---

### Release Notes

<details>
<summary>androidx/media (androidx.media3:media3-effect)</summary>

###
[`v1.9.2`](https://redirect.github.com/androidx/media/blob/HEAD/RELEASENOTES.md#192-2026-02-06)

[Compare
Source](https://redirect.github.com/androidx/media/compare/1.9.1...1.9.2)

This release includes the following changes since
[1.9.1 release](#&#8203;191-2026-01-26):

- ExoPlayer:
- Fix bug where `ProgressiveMediaSource` propagates out-of-date timeline
    info to player and the queued periods unexpectedly get removed

([#&#8203;3016](https://redirect.github.com/androidx/media/issues/3016)).
- Audio:
  - Improve the retry logic of `AudioOutput` initialization in
    `DefaultAudioSink`

([#&#8203;2905](https://redirect.github.com/androidx/media/issues/2905)).
- Session:
- Fix issue where system UI button placement workaround negatively
affects
    other UI surface like Android Auto or manufacturers not needing the
workaround
([#&#8203;3041](https://redirect.github.com/androidx/media/issues/3041)).
- Cast extension:
  - Fix bug where transferring from Cast to local playback was broken.

</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 these
updates 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:49:17 -05:00
Ray
b06761eaa5
Rewrite SuggestionsCache & limit parallelism (#851)
## Description
A rewrite of the `SuggestionsCache` to simplify it as a read-through
cache. The downside of this is that updated suggestions won't be
reflected in the UI unless the user reloads the page, but I think that's
an okay trade off.

Also adds parallelism limits to fetching suggestions to reduce the
number of simultaneous API calls. And moved the combining logic to use
the `Default` dispatcher to free up an IO one.

Also adds an initial delay to both the suggestions & tv provider
workers, so a cold start of the app isn't starved.

### Related issues
Related to #849

### Testing
Emulator & unit testing

## Screenshots
N/A

## AI or LLM usage
None
2026-02-09 17:39:40 -05:00
renovate[bot]
28ed1a491b
Configure Renovate (#852)
Welcome to [Renovate](https://redirect.github.com/renovatebot/renovate)!
This is an onboarding PR to help you understand and configure settings
before regular Pull Requests begin.

🚦 To activate Renovate, merge this Pull Request. To disable Renovate,
simply close this Pull Request unmerged.



---
### Detected Package Files

 * `.github/actions/native-build/action.yml` (github-actions)
 * `.github/actions/setup/action.yml` (github-actions)
 * `.github/workflows/main.yml` (github-actions)
 * `.github/workflows/pr.yml` (github-actions)
 * `.github/workflows/release.yml` (github-actions)
 * `gradle.properties` (gradle)
 * `settings.gradle.kts` (gradle)
 * `build.gradle.kts` (gradle)
 * `app/build.gradle.kts` (gradle)
 * `gradle/libs.versions.toml` (gradle)
 * `gradle/wrapper/gradle-wrapper.properties` (gradle-wrapper)

### Configuration Summary

Based on the default config's presets, Renovate will:

  - Start dependency updates only once this onboarding PR is merged
  - Hopefully safe environment variables to allow users to configure.
  - Show all Merge Confidence badges for pull requests.
  - Enable Renovate Dependency Dashboard creation.
- Use semantic commit type `fix` for dependencies and `chore` for all
others if semantic commits are in use.
- Ignore `node_modules`, `bower_components`, `vendor` and various
test/tests (except for nuget) directories.
  - Group known monorepo packages together.
  - Use curated list of recommended non-monorepo package groupings.
- Show only the Age and Confidence Merge Confidence badges for pull
requests.
  - Apply crowd-sourced package replacement rules.
  - Apply crowd-sourced workarounds for known problems with packages.
- Ensure that every dependency pinned by digest and sourced from
GitHub.com contains a link to the commit-to-commit diff
  - Correctly link to the source code for golang.org/x packages
  - Link to pkg.go.dev/... for golang.org/x packages' title

🔡 Do you want to change how Renovate upgrades your dependencies? Add
your custom config to `renovate.json` in this branch. Renovate will
update the Pull Request description the next time it runs.

---

### What to Expect

With your current configuration, Renovate will create 11 Pull Requests:

<details>
<summary>Update Androidx Media3 to v1.9.2</summary>

  - Schedule: ["at any time"]
  - Branch name: `renovate/androidx-media3`
  - Merge into: `main`
- Upgrade
[androidx.media3:media3-effect](https://redirect.github.com/androidx/media)
to `1.9.2`
- Upgrade
[androidx.media3:media3-ui-compose](https://redirect.github.com/androidx/media)
to `1.9.2`
- Upgrade
[androidx.media3:media3-ui](https://redirect.github.com/androidx/media)
to `1.9.2`
- Upgrade
[androidx.media3:media3-exoplayer-dash](https://redirect.github.com/androidx/media)
to `1.9.2`
- Upgrade
[androidx.media3:media3-exoplayer-hls](https://redirect.github.com/androidx/media)
to `1.9.2`
- Upgrade
[androidx.media3:media3-session](https://redirect.github.com/androidx/media)
to `1.9.2`
- Upgrade
[androidx.media3:media3-exoplayer](https://redirect.github.com/androidx/media)
to `1.9.2`
- Upgrade
[androidx.media3:media3-datasource-okhttp](https://redirect.github.com/androidx/media)
to `1.9.2`


</details>

<details>
<summary>Update dependency com.google.devtools.ksp to v2.3.5</summary>

  - Schedule: ["at any time"]
  - Branch name: `renovate/ksp-monorepo`
  - Merge into: `main`
- Upgrade
[com.google.devtools.ksp](https://redirect.github.com/google/ksp) to
`2.3.5`


</details>

<details>
<summary>Update Dependencies</summary>

  - Schedule: ["at any time"]
  - Branch name: `renovate/dependencies`
  - Merge into: `main`
- Upgrade
[com.google.dagger:hilt-android-compiler](https://redirect.github.com/google/dagger)
to `2.59.1`
- Upgrade
[com.google.dagger:hilt-android](https://redirect.github.com/google/dagger)
to `2.59.1`
- Upgrade
[com.google.protobuf:protobuf-kotlin-lite](https://redirect.github.com/protocolbuffers/protobuf)
to `4.33.5`
- Upgrade
[com.mikepenz:multiplatform-markdown-renderer-m3](https://redirect.github.com/mikepenz/multiplatform-markdown-renderer)
to `0.39.2`
- Upgrade
[com.mikepenz:multiplatform-markdown-renderer](https://redirect.github.com/mikepenz/multiplatform-markdown-renderer)
to `0.39.2`
- Upgrade
[io.mockk:mockk-android](https://redirect.github.com/mockk/mockk) to
`1.14.9`
- Upgrade
[io.mockk:mockk-agent](https://redirect.github.com/mockk/mockk) to
`1.14.9`


</details>

<details>
<summary>Update dependency com.google.dagger.hilt.android to
v2.59.1</summary>

  - Schedule: ["at any time"]
  - Branch name: `renovate/hilt`
  - Merge into: `main`
- Upgrade
[com.google.dagger.hilt.android](https://redirect.github.com/google/dagger)
to `2.59.1`


</details>

<details>
<summary>Update dependency python to 3.14</summary>

  - Schedule: ["at any time"]
  - Branch name: `renovate/github-actions`
  - Merge into: `main`
- Upgrade [python](https://redirect.github.com/actions/python-versions)
to `3.14`


</details>

<details>
<summary>Update Gradle to v8.14.4</summary>

  - Schedule: ["at any time"]
  - Branch name: `renovate/gradle-8.x`
  - Merge into: `main`
- Upgrade [gradle](https://redirect.github.com/gradle/gradle) to
`8.14.4`


</details>

<details>
<summary>Update Jellyfin SDK to v1.8.6</summary>

  - Schedule: ["at any time"]
  - Branch name: `renovate/jellyfin-sdk`
  - Merge into: `main`
- Upgrade
[org.jellyfin.sdk:jellyfin-api-okhttp-jvm](https://redirect.github.com/jellyfin/jellyfin-sdk-kotlin)
to `1.8.6`
- Upgrade
[org.jellyfin.sdk:jellyfin-api](https://redirect.github.com/jellyfin/jellyfin-sdk-kotlin)
to `1.8.6`
- Upgrade
[org.jellyfin.sdk:jellyfin-core](https://redirect.github.com/jellyfin/jellyfin-sdk-kotlin)
to `1.8.6`


</details>

<details>
<summary>Update Kotlin</summary>

  - Schedule: ["at any time"]
  - Branch name: `renovate/kotlin`
  - Merge into: `main`
- Upgrade
[org.jetbrains.kotlinx:kotlinx-coroutines-test](https://redirect.github.com/Kotlin/kotlinx.coroutines)
to `1.10.2`
- Upgrade
[org.jetbrains.kotlin.plugin.serialization](https://redirect.github.com/JetBrains/kotlin)
to `2.3.10`
- Upgrade
[org.jetbrains.kotlin.jvm](https://redirect.github.com/JetBrains/kotlin)
to `2.3.10`
- Upgrade
[org.jetbrains.kotlin.plugin.compose](https://redirect.github.com/JetBrains/kotlin)
to `2.3.10`
- Upgrade
[org.jetbrains.kotlin.android](https://redirect.github.com/JetBrains/kotlin)
to `2.3.10`


</details>

<details>
<summary>Update dependency com.android.application to v9</summary>

  - Schedule: ["at any time"]
  - Branch name: `renovate/major-agp`
  - Merge into: `main`
- Upgrade
[com.android.application](https://android.googlesource.com/platform/tools/base)
to `9.0.0`


</details>

<details>
<summary>Update Github Actions (major)</summary>

  - Schedule: ["at any time"]
  - Branch name: `renovate/major-github-actions`
  - Merge into: `main`
- Upgrade [actions/cache](https://redirect.github.com/actions/cache) to
`v5`
- Upgrade
[actions/checkout](https://redirect.github.com/actions/checkout) to `v6`
- Upgrade
[actions/setup-python](https://redirect.github.com/actions/setup-python)
to `v6`
- Upgrade
[actions/upload-artifact](https://redirect.github.com/actions/upload-artifact)
to `v6`


</details>

<details>
<summary>Update Gradle to v9</summary>

  - Schedule: ["at any time"]
  - Branch name: `renovate/gradle-9.x`
  - Merge into: `main`
- Upgrade [gradle](https://redirect.github.com/gradle/gradle) to `9.3.1`


</details>



🚸 Branch creation will be limited to maximum 2 per hour, so it doesn't
swamp any CI resources or overwhelm the project. See docs for
`prhourlylimit` for details.


---

 Got questions? Check out Renovate's
[Docs](https://docs.renovatebot.com/), particularly the Getting Started
section.
If you need any further assistance then you can also [request help
here](https://redirect.github.com/renovatebot/renovate/discussions).


---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/damontecres/Wholphin).


<!--renovate-config-hash:7cb4aaf8303f9b7801754f83b08207c5265d3d176bdb616169c40f6df7c688c2-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Damontecres <damontecres@gmail.com>
2026-02-09 17:28:03 -05:00
Ray
e7da5ca007
Add settings for max days in next up (#850)
## Description
Add a settings to set the maximum amount of time items can appear in
Next Up.

Options range from 7 days to a year, or no limit (current & default
behavior)

### Related issues
Closes #662 

### Testing
Tested on the emulator and verified URLs, added unit tests

## Screenshots
N/A, just a new slider bar setting

## AI or LLM usage
None
2026-02-09 15:36:20 -05:00
Ray
63b37ef3f4
Fix glitchy nav drawer scrolling when opening (#848)
## Description
The nav drawer would always glitch a little when it gained focus due it
to trying to keep the selected page in view. #842 made this even worst.

This PR fixes that issue by hoisting the list scroll state up higher
which ensures it is remembered between recompositions. This change also
eliminates the need for workarounds to try and scroll it
programmatically which is also a tiny performance boost.

### Related issues
Follow up to #842 

### Testing
Emulator & nvidia shield

## Screenshots
N/A

## AI or LLM usage
None
2026-02-08 16:21:38 -05:00
Ray
72e5e6ae86
Add option to send relevant media info to server for bug reports (#840)
## Description
Adds a item in the More menu to send information about the media item to
the server (and app logs).

This includes the "media sources" which is info about the files and
stream/tracks in the files. It also includes device info, the playback
preferences, and the device's transcoding profile. All of this info is
useful for debugging playback issues.

### Related issues
N/A

### Testing
Emulator testing

## Screenshots
N/A

## AI or LLM usage
None
2026-02-08 13:38:09 -05:00
Ray
d5602aa88c
Navigation drawer improvements (#842)
## Description
This updates the navigation drawer with better behavior and UI. It is
also a bit more optimized and is slightly faster.

- When open, content is pushed to the right instead of being covered
- When open, it uses the same background colors from the dynamic
background
- The icons no longer shift as the drawer opens & closes
- The open drawer is not as wide
- Focus highlight on items is less circular, now matching the other
menus in the app
- The animation is a bit faster too

Dev notes:
- This PR copies & modifies `tv-material` code, so there's a customized
`ModalNavigationDrawer` implementation now
- There are fewer `AnimatedVisibility` composables which improves
performance
- Icons are exactly sized
- Content pages generally shouldn't add start/end padding anymore, the
padding is now added by the nav drawer
(b4f1b111edcd7e7ec05edc1100402b2851721fcd) and is consistent across
every page

### Related issues
Closes #699
Closes #384

### Testing
Tested on the emulator, nvidia shield, & google sabrina

## Screenshots
![nav_drawer_closed
Large](https://github.com/user-attachments/assets/9047eb45-6025-4992-8740-3430f0a8f2a9)
![nav_drawer_open_backdrop_dim
Large](https://github.com/user-attachments/assets/880f24a5-8018-469e-805d-18060c641dc5)



## AI or LLM usage
None
2026-02-08 13:03:43 -05:00
Justin Caveda
8e9a6799f5
Fix: suggestions logic/re-implement logic into worker and address performance issues (#834)
## Description
Addresses suggestion logic oversight in recently merged suggestions fix,
and improve performance (especially app homepage startup time)

- Re-implements the logic that sorts/categorizes tailored suggestions
based on the seed items that are queried. This was implemented in the
original PR at first, but I overlooked moving that logic
- Removes `OneTimeWorkRequestBuilder` and replaces with trigger in
`PeriodicWorkRequest` to fire with a 30 seconds delay if cache is empty.

 
### Related issues
Fixes #833

### Testing
Will be testing in:
Android TV emulator in Android Studio
NVIDIA Shield TV Pro 2019

## AI or LLM usage
I will use AI to help with writing the tests/testing services.
2026-02-07 20:38:26 -05:00
Ray
abf5ec8004
Take playback speed into account when calculating the video end time (#843)
## Description
Small change so that the "Ends" time on the playback overlay takes the
current playback speed into account.

### Related issues
Closes #836

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-02-07 13:03:10 -05:00
Justin Caveda
aeaecc0f59
Fix suggestions mixing content from different libraries and update recommendation logic (#644)
## Description
This PR aims to fix #638 where the "Suggestions" row was mixing up
content from different libraries that shared the same library type. For
example you were in the Anime library, you'd see regular TV shows
showing up, as the TV Shows and Anime libraries would both be "Show"
libraries.

As @damontecres mentioned in the issue discussion, the
`/Items/Suggestions` endpoint Wholphin is using just returns random
items from the same library type, with no special logic or
recommendation algorithm.

I also looked at how the official WebUI handles this. It basically just
mixes "Resume," "Next Up," and "Latest Items" together. That felt a bit
redundant since we usually have dedicated rows for those things anyway;
I wanted to try something that helps discover new content.

I replaced the broken endpoint with a few custom `GetItemsRequest`
calls. These work correctly with the `ParentId` filter, so we only get
results from the library we are actually looking at. Additionally, I
added in some logic that takes into account what the user has been
watching to tailor the suggestions a little bit.

The new logic uses a 40/30/30 mix (this can of course be tweaked as
needed)

- Tailored (40%): Grabs your recently watched items from this library,
checks their genres, and returns items from the same genre.

- Random (30%): Random unwatched stuff from this library.

- New (30%): Recently added items.

This is implemented using only `GetItemsRequest` API calls using
filters, rather than any specialized endpoints like the
`/Items/Suggestions` endpoint. This means the feature should be
predictable and stable. If Jellyfin ever adds an actual recommendation
algorithm and endpoint to call it, I imagine we would want to switch to
that in the future though.

I also added some failsafe logic to make sure there will be diversity in
the "recently watched" items that get pulled, in case a user might have
recently binged a TV show. We wouldn't want every single recommendation
to be based off of that one show.

To fix this, I changed the query to fetch the last 20 history items
instead of just the top 3. Then, we filter that list client-side to find
unique Series IDs. If the user watched 10 episodes of One Piece in a
row, the logic collapses them into a single "One Piece" entry and moves
on to the next distinct show they watched. This guarantees we get
variety in the source material for recommendations.

This is a work in progress right now, mainly due to performance. For my
server it takes about 10-15 seconds to load the Suggestions row when I
tested. This is unacceptable in my opinion, especially if we ever intend
to add a Suggestions row like this to the home page like Plex does. I
have some ideas on how to improve performance, but I'm open to
suggestions.

### Related issues
Resolves #638 

### Screenshots

Before:

<img width="1953" height="1162" alt="suggestions1"
src="https://github.com/user-attachments/assets/6e301c67-1a46-46b5-8184-3adb9e52b330"
/>


After:

<img width="1937" height="1108" alt="suggestions3"
src="https://github.com/user-attachments/assets/b9563865-4055-40b6-b452-f94c26c8b6e9"
/>


### AI/LLM usage
I used Claude Code to help write the Kotlin Coroutines so the API calls
run at the same time. I also used it to write the tests in
`TestSuggestionsLogic.kt`.

---------

Co-authored-by: Damontecres <damontecres@gmail.com>
2026-02-04 20:50:29 -05:00
Ray
d9d5ab02e8
Add support for viewing photos in photo albums (#703)
## Description
Add support for viewing photos in photo albums

### Features
- Browse and view albums & photos
- View an album as a slideshow
- Show overlay with photo details and controls
- Rotate, zoom, & pan photos
- Apply basic filters to photos or albums such as contrast, saturation,
red/green/blue, etc
- Setting to include video clips during slideshows

### Controls
- D-Pad left or right: scroll between photos in album
- Hold D-Pad up or down: zoom in or out of the current photo
- D-Pad left/right/up/down, while zoomed: pan around photo
- Back, while zoomed: revert the zoom
- Otherwise: show photo overlay

### Related issues
Closes #458
Closes #634

### Screenshots
#### Overlay
![photo_overlay
Large](https://github.com/user-attachments/assets/b44ed876-d8bd-4f75-aa1e-4106c2edb2f7)

#### Applying filters
![photo_filters
Large](https://github.com/user-attachments/assets/1379978a-b27c-47ac-80af-f7bb6a2177df)
2026-02-04 20:04:46 -05:00
Ray
ee440698b0
Set a different style for HDR subtitles & adjust image subtitles opacity (#827)
## Description
Can now configure a different subtitle style for HDR playback.

There is also a new setting to change the opacity/dim image based
subtitles. This is primarily for HDR to dim very bright PGS subtitles,
but the setting is available for SDR too.

Please remember that the styles only apply to unstyled text formats like
SRT.

I haven't been able to consistently get the preview to switch the
display into HDR mode, so the preview is not 100% accurate.

### Related issues
Closes #583

### Testing
Shield pro 2019 w/ LG C2

## AI or LLM usage
None
2026-02-04 18:22:11 -05:00
YogiBear12
b0b8ae3639
Align typography and placement between Home, MovieDetails and SeriesDetails (#751)
## Description
This PR addresses some quick changes to align the styling and placement
of elements on the Home, Movie details and Series details pages, using
Home as the reference point for the typography.

### Related issues
Ongoing discussion
[here](https://github.com/damontecres/Wholphin/discussions/704)

### Screenshots
Movie Details
<img width="1920" height="1080" alt="Screenshot_20260123_223116"
src="https://github.com/user-attachments/assets/ffd6a5c0-0ed1-4634-8c57-147f7783950f"
/>


Series Details
<img width="1920" height="1080" alt="Screenshot_20260123_223207"
src="https://github.com/user-attachments/assets/59c6be44-fcf4-4e28-8ad2-add304bd7650"
/>



### AI/LLM usage
LLM was only used to identify the current styling applied to the pages.
All code changes were made and reviewed manually
2026-02-03 17:55:05 -05:00
Ray
733213d6a2
Simplify how display mode is changed (#823)
## Description
Simplifies the refresh rate/display mode change code by removing the
live data go between.

Also, instead of a `CountDownLatch` that blocks the thread, use a
`Deferred` to suspend the coroutine instead.

### Related issues
Might help with #769

### Testing
Tested on nvidia shield
2026-02-03 15:30:24 -05:00
Ray
045b689994
Add ability to sort and filter items in a playlist (#818)
## Description
Add ability to sort and filter items in a playlist. There's a new button
for each added to the playlist details page. Starting playback will run
in the order selected.

The sort and filter are persisted locally per playlist, so returning to
the playlist will remember the previous settings.

Note: playlist playback is still limited to 100 items (#42)

### Related issues
Closes #285

### Testing
Emulator & nvidia shield

## Screenshots
![playlist_sort_filter
Large](https://github.com/user-attachments/assets/9880021b-a1c3-4d8d-ace2-83737f3f772a)

## AI or LLM usage
None
2026-02-03 15:11:37 -05:00
Ray
ae5035703f
Merge pull request #817 from damontecres/fix/805
Always use space for home page header
2026-02-02 12:25:16 -05:00
Damontecres
e6ff173b41
Adopt jellyfin's AI/LLM policy 2026-02-02 10:34:30 -05:00
Ray
7aa4ccc447
Update README
Removed versioning details and simplified media player options.
2026-01-30 17:28:41 -05:00
Damontecres
510ca416f3
Release v0.4.1 2026-01-30 17:10:44 -05:00
Ray
ea414929db
Merge pull request #801 from damontecres/translations-2026-01-30
Translations 2026-01-30
2026-01-30 17:03:31 -05:00
voc0der
1bffa413a2
Fix Seerr Local/Jellyfin authentication and request permissions (#734)
## Description
When using LOCAL or JELLYFIN authentication methods to connect to Seerr,
the login flow was not properly establishing session cookies and user
permissions. The login would 'succeed' and you were led to thinking it
worked, but then...

This caused:
- Request functionality to be greyed out even though the user should
have access
- Users to appear to have no permissions after login (permissions=0)

## Solution
This PR fixes the authentication flow by:

**Fetching full user config after login**: For LOCAL and JELLYFIN
auth methods, the login endpoints (`authLocalPost()` and
`authJellyfinPost()`) establish the session cookie but return incomplete
user data. This PR now calls `authMeGet()` immediately after login to
fetch the fully-populated user configuration including proper
permissions.

## Tests
- Have working apk on my dev fork.
- Ran logins as Local + API. Cannot test Jellyfin due to environment,
but codewise, it looks correct.

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


---------

Co-authored-by: Ray <154766448+damontecres@users.noreply.github.com>
2026-01-30 16:16:39 -05:00
Ray
3ada35c731
Fix error reporting & crash during Jellyseerr login (#802)
## Description
Makes sure the invalid credentials error is propagated up instead of
displaying "No URL" as the error message.

Makes sure `OkHttp` is initialized since the startup initialization
provider is disabled. This fixes a possible crash if `OkHttp` needs to
access its assets.

Also, shows the URL when removing the Jellyseerr server.
2026-01-30 16:15:35 -05:00
Ckau
853c224b61
Translated using Weblate (Russian)
Currently translated at 85.6% (310 of 362 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/ru/
2026-01-30 16:34:17 +00:00