feat(core,app,android): sort, fold and shelve the Android library

Bring the phase 2 library to Android. Search, sorting and franchise folding
move from the desktop app into pstr_core::browse, so both clients find,
fold and order the same titles the same way.

The bridge gains AndroidEngine::arrangement, which returns the grid's tiles
and up to three shelves as keys into the library's titles. Each TitleRecord
now carries its display name, wide art, format, season, studios, directors,
tags, airing state and franchise. The library bar has a sort menu with the
franchise toggle, folded tiles show a +N badge, and shelves sit above the
grid. The title page shows the same facts, tags and franchise row as the
desktop. Settings -> Appearance gains Title names.

The default title name is now English, which is what Android always showed.
A folded franchise now sorts by its lead's displayed name rather than by its
alphabetically first member.
This commit is contained in:
nvrl committed 2026-10-04 02:04:15 +02:00
1 parent aef182e7e8
commit 3638e0e5df
26 files changed
+1176 -250

No files matched your search

+14 -9
View File
@@ -126,10 +126,11 @@ page's band. The banner, wrong in a 16:9 tile, fits those strips as drawn.
or 16:9 stills. Covers fill their tile; a cover in a still-shaped tile is still
fitted whole.
**Names.** Settings → Appearance → *Title names*: the share's, English or
romaji. Search matches all of them whichever is shown.
**Names.** Settings → Appearance → *Title names*: English (the default, and
what Android always showed), romaji, or the share's own. Search matches all
of them whichever is shown.
**Sorts.** A–Z by the shown name, recently watched, recently added (from
**Sorts.** `pstr_core::browse`, shared by both clients. A–Z by the shown name, recently watched, recently added (from
`node_first_seen`, which survives recrawls; files present before v10 count as
added at 0), newest by air date, highest rated, most popular.
@@ -150,15 +151,19 @@ Satoshi Kon*, *From MADHOUSE*, *From MAPPA*, *From Production I.G*.
**The title page** adds the season, studios, director and next airing episode
to its line of facts, and the tags beside the genres.
Not done: Android shows none of this yet beyond what it already drew — the
bridge carries `TitleDetails` through a hand-picked match, and the grouping,
shelves and sorts are in `pstr-core` ready for it, but its screens are
unchanged. TMDB fills no details.
**Android.** The same, through the bridge: `AndroidEngine::arrangement`
returns the grid's tiles and the shelves as keys into `library`'s titles, and
each `TitleRecord` carries its display name, franchise and details. The
library's bar has a sort menu with the franchise toggle in it; the grid shows
`+N` on a folded tile and up to three shelves above it; the title page has the
same facts, tags and franchise row as the desktop's; *Title names* is in
Settings → Appearance. Android's grid is always covers, so it has no
*Library tiles* choice.
Not done: TMDB fills no details.
## Phase 3 — reach
- **Android**: the sorts, grouping, shelves and names above.
- **Local matching** against the offline database, so only ids leave the
machine.
- **Routing by title**: AniList first, then TMDB (with a key) or TVmaze for