Commit graph

1540 commits

Author SHA1 Message Date
Damontecres
0a4ab7a547
Several UI fixes (#1730)
## Description
- Fixes not scrolling to the last season on series overview if there is
a Specials season
- Apply the "bouncing" fix from #1543 to all applicable card types
- Fix card images not automatically reloading when changing image type
on grid pages
- Get rid of the sticky headers which overlap items on view options
dialogs and use a fixed header as elsewhere in the app

### Related issues
Related to #1708 which didn't introduce the bug, but made it much more
likely to occur

### Testing
Emulator & unit tests

## Screenshots
N/A, the sticky header UI changes are very minor

## AI or LLM usage
None
2026-07-21 17:20:59 -04:00
Damontecres
2aae7eed38
Add search intent-filter for #1688 2026-07-20 10:39:42 -04:00
Damontecres
b1f9c32a19
Parse intents to search, view, or play media (#1688)
## Description
Adds parsing for intents to search, view, or play media based on the
action and parameters. This allows for remotely opening Wholphin and
starting playback.

This is considered experimental, so the syntax or behaviors may change!

See the `Intents.md` file in this PR for syntax and examples.

### Related issues
Replaces https://github.com/damontecres/Wholphin/pull/738
Closes https://github.com/damontecres/Wholphin/discussions/1095

### Testing
Emulator with the test commands in the docs

## Screenshots
N/A

## AI or LLM usage
None
2026-07-20 10:04:34 -04:00
Damontecres
4f5cd3e7b1
Fix errors when a plural translation is missing (#1716)
## Description
Previously not every plural translation had full coverage and some did
not have the fallback "other" quantity translation. So for some
languages this would cause an error when trying to display the string
depending on the quantity. This PR ensures every plural translation has
the "other" fallback.

Note: the "other" fallback is copied from an existing translation so I'm
sure some will not be grammatically correct!

Dev note: I used a python script to parse and fix the entries, so it
also rewrote some of the unrelated `CDATA` entries.

### Related issues
Fixes #1676

### Testing
On the emulator, I reproduced the error in the issue with the Danish
translation, verified it was fixed after the patch was applied

## Screenshots
N/A

## AI or LLM usage
None
2026-07-18 17:52:16 -04:00
Damontecres
35c4d13f8f
Various minor bug fixes (#1707)
## Description
Gathering several small bug fixes:
- Clear the backdrop when manually reloading the home page
- Convert the "# years old" string resource to plural
- Fix a spelling error in the source English strings
- Ensure #1680 is respected when searching for subtitles to download
- Slightly adjust padding for the header in collection details to match
other headers

### Related issues
Fixes string issues reported in
https://github.com/damontecres/Wholphin/issues/1705#issuecomment-4982909931

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-07-18 17:50:35 -04:00
Damontecres
3cc2bf2dd1
Fix resume query for Jellyfin 12 (#1715)
## Description
Fixes querying for resume item (continue watching) for Jellyfin 12 so
that whole series are not included. The patch is also compatible with
Jellyfin 10.11.

### Related issues
Fixes #1689

I couldn't find an issue in Jellyfin that mentions this behavior change,
so I'm guessing it was a side effect. But since the old query did ask to
include Series, I don't think it's a bug in the server.

### Testing
Manual API queries & emulator on both Jellyfin 11 & 12-rc2 servers

## Screenshots
N/A

## AI or LLM usage
None
2026-07-17 11:23:31 -04:00
Damontecres
ed97fc3009
Add context menu to search page (#1701)
## Description
Adds long clicking search results to show the context menu. It's the
same context menu as elsewhere in the app.

### Related issues
Closes #1695

### Testing
Emulator to toggle favorite and watched status on various types

## Screenshots
N/A

## AI or LLM usage
None
2026-07-16 11:36:07 -04:00
Damontecres
a350fa2017
Improvements to "Add to playlist" dialog (#1706)
## Description
Fixes & improves the "Add to playlist" dialog:
- Added searching by name
- Playlists are sorted by recently updated
- No longer filters by media type
- Filters based on user's permission for the playlists

The behavior is now consistent with the web UI's list except for the
sort

### Related issues
Should fix #1124

### Testing
Emulator testing

## Screenshots
N/A

## AI or LLM usage
None
2026-07-16 11:35:48 -04:00
Damontecres
39c030c1d5
Fix loading a canceled discover tv show (#1709)
## Description
#1614 added filtering by a TV production status. I pulled the enum
values from a comment in Seerr's code which spelled it as `Cancelled`,
but the actual API uses `Canceled`. This PR corrects the spelling.

Also, since this value isn't actually used yet, I've removed it from
`TvDetails` for now.

### Related issues
Fixes #1703

### Testing
Emulator, filter by production status as canceled and open any result

## Screenshots
N/A

## AI or LLM usage
None
2026-07-16 11:35:32 -04:00
Damontecres
c2aab06c0b
Save sort & filter within a genre or studio (#1711)
## Description
Saves the sort and filter of items within a genre or studio
(Movies->Genres tab->Click genre) across genres or studios. So if you
open "Action" movies and change the sort, the sort will be used for
"Animation" or "Horror" movies.

This is saved separate from the sort/filter on the Library tab.

### Related issues
Closes https://github.com/damontecres/Wholphin/issues/1253

### Testing
Emulator by switching sorts

## Screenshots
N/A

## AI or LLM usage
None
2026-07-15 20:25:43 -04:00
Damontecres
84f6035103
Fix bug finding the episode to scroll to on Series Overview (#1708)
## Description
Fixes an off-by-one error when searching for the right episode (or
season) to scroll to on the series overview page.

While the code works most of the time, on cases where a special appears
_after_ a season is included, the final episode in the season not be
scrolled to. For example, if Special S00E04 comes after Season 2 (which
has 10 episodes), clicking on S02E10 on the home page won't scroll to
that episode on the series overview, instead S02E01 will be focused. And
S00E04 will appear at the end of the list.

This should also be a very, very tiny performance boost since the
"search the whole list" fallback won't be triggered as often. I also
added some comments to explain the function better.

### Related issues
N/A, just noticed it yesterday

### Testing
Emulator in the situation described above

## Screenshots
N/A

## AI or LLM usage
None
2026-07-15 18:45:32 -04:00
Damontecres
46b2f2839f
Fix compile error from merging #947 & #1680 (#1700)
## Description
Fixes [compile
error](https://github.com/damontecres/Wholphin/actions/runs/29357259594/job/87167912698)

### Related issues
Resulted from merging #947 & #1680 together into main

### Testing
Compiled & unit tests

## Screenshots
N/A

## AI or LLM usage
None
2026-07-14 15:35:49 -04:00
Damontecres
3f60fa7550
Add option to override user profile settings for audio & subtitle languages (#1680)
## Description
Adds settings under the "User profile settings" section which allows for
specifying preferred languages for audio and subtitles and the preferred
subtitle mode.

By default (matching existing Wholphin behavior), the preferred
languages and subtitle mode are derived from the user's profile settings
provided by the server which can be set on the WebUI:
User->Settings->Playback or Subtitles. However, this isn't well
understood and Wholphin doesn't display these values anywhere, so many
users were confused.

The preferred languages and subtitle mode can now be configured from
within Wholphin. Setting these will **not** update the server. The
settings are **only** used locally.

### Related issues
Related to #319
Closes #790

### Testing
Emulator manually changing some settings, added additional unit tests to
ensure the overrides are respected when choosing tracks

## Screenshots
### Settings page
<img width="1280" height="720" alt="settings_01 Large"
src="https://github.com/user-attachments/assets/28cc2f6b-3a60-42a4-b268-48695086d566"
/>

### Clicking into "More user profile settings"
<img width="1280" height="720" alt="settings_02 Large"
src="https://github.com/user-attachments/assets/6c3be3aa-c177-4d44-8060-b76d15fb10d7"
/>

### Language choice dialog

Can filter languages by typing in the search box at the top

<img width="1280" height="720" alt="settings_03 Large"
src="https://github.com/user-attachments/assets/c014d0ba-8d5b-4201-a6ee-4876b478148c"
/>


## AI or LLM usage
None
2026-07-14 14:17:31 -04:00
Damontecres
077b7e4570
Show duration & ends at time on next up card (#1690)
## Description
Adds the duration & ends at time to the next up card

### Related issues
Closes #1664

### Testing
<!-- Describe how this change was tested and on what device(s) -->

## Screenshots
<img width="660" height="241" alt="image"
src="https://github.com/user-attachments/assets/7551843e-4f53-43fc-af2a-3e503ba6d03c"
/>

## AI or LLM usage
None
2026-07-13 01:30:54 -04:00
Damontecres
f74306a12c
Fix subtitle outline width not applying in release builds (#1687)
## Description
Fix applying the subtitle outline width in ExoPlayer for release builds

The outline width field isn't public, so reflection is used to bypass
and modify it. Since proguard/r8 renames all of the classes and fields,
this meant the field was no longer found. The fix is to have proguard
preserve the necessary field names.

### Related issues
Fixes #1681

### Testing
Emulator w/ release build

## Screenshots
N/a

## AI or LLM usage
None
2026-07-11 13:21:41 -04:00
Damontecres
26124a5348
Improve track selection logic (#1654)
## Description
Updates the logic for selecting tracks which should fix several edge
cases

The new logic groups track types together and then applying the user's
selection to the actual tracks in the file. For example, if the user
choosing the audio track which the server reports as absolute `index=2`
(eg the _third_ track of any type in the file) and audio `index=1` (eg
the _second audio_ track in the file), then the track selection logic
will use the _second audio_ track in the direct played file (after
accounting for id sorting).

Some other changes:
- If direct playing and an unsupported track is selected, the app will
now fall back to transcoding
- If the correct audio/subtitle tracks are not found, the app will now
fall back to transcoding instead of blocking any track change attempts

### TODO
Not necessarily in this PR, but some things need further investigation:
- Handling external audio tracks
- Why does ExoPlayer order the tracks differently sometimes, see
[example
here](https://github.com/damontecres/Wholphin/issues/791#issuecomment-4836470813)
where `0:3` is _after_ `0:4`, but the `MediaSourceInfo` lists them `0:3`
then `0:4`

### Related issues
Maybe fixes #791
Should fix
https://github.com/damontecres/Wholphin/issues/1005#issuecomment-4085440175
Related to the parent issue, #1475
Replaces #845

### Testing
Unit tests mostly, some basic tests on emulator

Needs more "real world" testing

#### Try it out?

You can try out this build by following the [instructions
here](https://github.com/damontecres/Wholphin/releases/tag/develop-track-selection).
If you do, please report your results in this PR!

## Screenshots
N/A

## AI or LLM usage
None
2026-07-10 17:49:47 -04:00
Damontecres
d481aea85a
Experimental option to transcode surround sound audio to AC3 (#947)
## Description
Adds an experimental setting to prefer transcoding audio with more than
2 channels to AC3. Stereo audio does not transcode.

This is basically a workaround for HDMI ARC (not eARC) or optical audio
devices because instead of 2 uncompressed PCM channels, 6 AC3 channels
(ie 5.1) is possible.

An downside of enabling this is that embedded subtitles be burned in
causing a video transcode as well.

### Related issues
Fixes #255
Incorporates some code from #1410

### Testing
Just on the emulator so far to observe if the settings trigger the
transcode or not

## Screenshots
N/A

## AI or LLM usage
None

---------

Co-authored-by: darkflame91 <darkflame91@gmail.com>
2026-07-09 13:15:42 -04:00
Damontecres
f2287a85e8
Release v1.0.3 2026-07-08 11:22:42 -04:00
Damontecres
35e88e5f2a
Update translations as of 2026-07-07 (#1673)
Updates translations as of 2026-07-07

Thank you to all of the contributors!
2026-07-08 11:14:31 -04:00
idezentas
e0143c0e26
Translated using Weblate (Turkish)
Currently translated at 100.0% (608 of 608 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/tr/
2026-07-07 17:56:28 +00:00
Outbreak2096
ab47868b6c
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (608 of 608 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hans/
2026-07-07 17:56:28 +00:00
TheMatrixan
b93e12681e
Translated using Weblate (Polish)
Currently translated at 100.0% (608 of 608 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pl/
2026-07-07 17:56:28 +00:00
SimonHung
b57a6d7b00
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (608 of 608 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hant/
2026-07-07 17:56:28 +00:00
North-DaCoder
b4c6d40edc
Translated using Weblate (German)
Currently translated at 100.0% (608 of 608 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/de/
2026-07-07 17:56:28 +00:00
Waspoedertje
182c258c03
Translated using Weblate (Dutch)
Currently translated at 100.0% (601 of 601 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/nl/
2026-07-07 17:56:28 +00:00
North-DaCoder
30ec17e50f
Translated using Weblate (German)
Currently translated at 99.8% (600 of 601 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/de/
2026-07-07 17:56:27 +00:00
TheMatrixan
422ac89575
Translated using Weblate (Polish)
Currently translated at 100.0% (601 of 601 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pl/
2026-07-07 17:56:27 +00:00
arcker95
517b5b0507
Translated using Weblate (Italian)
Currently translated at 100.0% (601 of 601 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/it/
2026-07-07 17:56:27 +00:00
SimonHung
db4b4b8489
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (601 of 601 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hant/
2026-07-07 17:56:27 +00:00
opakholis
63d4e8e80d
Translated using Weblate (Indonesian)
Currently translated at 100.0% (601 of 601 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/id/
2026-07-07 17:56:27 +00:00
n8llcaster
eea9a61064
Translated using Weblate (Slovak)
Currently translated at 100.0% (601 of 601 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/sk/
2026-07-07 17:56:27 +00:00
idezentas
f1a205a465
Translated using Weblate (Turkish)
Currently translated at 100.0% (601 of 601 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/tr/
2026-07-07 17:56:27 +00:00
Outbreak2096
52e5aa41d2
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (601 of 601 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hans/
2026-07-07 17:56:27 +00:00
SimonHung
662ef66319
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (601 of 601 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hant/
2026-07-07 17:56:27 +00:00
ymir
a3de7c330a
Translated using Weblate (French)
Currently translated at 100.0% (601 of 601 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/fr/
2026-07-07 17:56:27 +00:00
TheMatrixan
dfafed5801
Translated using Weblate (Polish)
Currently translated at 100.0% (601 of 601 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pl/
2026-07-07 17:56:27 +00:00
Priit Jõerüüt
d7d283c188
Translated using Weblate (Estonian)
Currently translated at 100.0% (601 of 601 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/et/
2026-07-07 17:56:27 +00:00
TheMatrixan
b887507301
Translated using Weblate (Polish)
Currently translated at 100.0% (597 of 597 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pl/
2026-07-07 17:56:27 +00:00
idezentas
c8cf918116
Translated using Weblate (Turkish)
Currently translated at 100.0% (597 of 597 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/tr/
2026-07-07 17:56:27 +00:00
Outbreak2096
b2f1cf1455
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (597 of 597 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hans/
2026-07-07 17:56:27 +00:00
SimonHung
818692a405
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (597 of 597 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hant/
2026-07-07 17:56:27 +00:00
opakholis
4f9abd0edc
Translated using Weblate (Indonesian)
Currently translated at 98.1% (586 of 597 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/id/
2026-07-07 17:56:27 +00:00
Priit Jõerüüt
44d7880468
Translated using Weblate (Estonian)
Currently translated at 100.0% (597 of 597 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/et/
2026-07-07 17:56:26 +00:00
North-DaCoder
e69afe1848
Translated using Weblate (German)
Currently translated at 100.0% (597 of 597 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/de/
2026-07-07 17:56:26 +00:00
Codeberg Translate
94a568ae95
Update translation files
Updated by "Remove blank strings" add-on in Weblate.

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/
2026-07-07 17:56:26 +00:00
JorgeLNJunior
56455344ed
Translated using Weblate (Portuguese (Brazil))
Currently translated at 93.7% (559 of 596 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pt_BR/
2026-07-07 17:56:26 +00:00
idezentas
ac45a7b64a
Translated using Weblate (Turkish)
Currently translated at 100.0% (596 of 596 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/tr/
2026-07-07 17:56:26 +00:00
arcker95
c6bbd0a2de
Translated using Weblate (Italian)
Currently translated at 100.0% (596 of 596 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/it/
2026-07-07 17:56:26 +00:00
Priit Jõerüüt
d0f44513f6
Translated using Weblate (Estonian)
Currently translated at 100.0% (596 of 596 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/et/
2026-07-07 17:56:26 +00:00
idezentas
a33670ef11
Translated using Weblate (Turkish)
Currently translated at 100.0% (594 of 594 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/tr/
2026-07-07 17:56:26 +00:00