-
JellyTau v0.4.0
Stable🏗️ Build and Test JellyTau / Run Tests (push) Successful in 17m21sPublish Documentation / Build & publish docs to gitea-pages (push) Successful in 5m46sTraceability Validation / Check Requirement Traces (push) Successful in 16sBuild & Release / Run Tests (push) Successful in 5m38s🏗️ Build and Test JellyTau / Android Compile Check (push) Successful in 8m54sBuild & Release / Build Linux (push) Successful in 19m22sBuild & Release / Build Windows (push) Successful in 13m55sBuild & Release / Build Android (push) Successful in 30m12sBuild & Release / Create Release (push) Successful in 15sreleased this
2026-08-04 18:22:01 +00:00 | 182 commits to master since this release✨ Features
-
Favourites, across libraries. A
/library/favoritespage renders
favourites from every library with All / Movies / Shows / Music scope tabs,
reusing the standard grid so card shape still follows the media — a mixed All
tab reads as posters, squares and thumbnails side by side. Home carries
favourite rows below Recently Added, and a row with no items does not render
at all, so a fresh install shows no empty rows. Server favourite state is
mirrored into the local database as results are cached, so offline browsing
sees the same favourites as the server; a toggle made offline is never
overwritten by a stale server value before it has been pushed.
(UR-067, UR-069 → DR-113, DR-114, DR-115, DR-117, DR-118) -
Search answers from the local index. The instant leg read only downloaded
items, so with no downloads it returned nothing and every keystroke fell
through to a fullRecursive=trueserver query. It now reads the whole synced
catalog through the same availability CTEget_itemsuses, gated on the same
include_catalog_browseflag, so search and browse cannot diverge. The index
also gained MusicArtist, Playlist and People — the very groups search sorts
results into. Re-indexing moved from a frontend startup call to a Rust
background task with a 6h TTL, so a long session no longer searches a stale
catalog. (UR-065 → DR-108, DR-110, DR-111)
🐛 Fixes
-
Playback no longer restarts an episode at random on a flaky connection.
Background audio-only playback of a video streams a progressive mp3 transcode
over plain HTTP, which is chunked and so declares no length: when the
connection dropped mid-episode, ExoPlayer saw end-of-input and reported
STATE_ENDED, indistinguishable from the real end. The app ran its
end-of-episode logic mid-episode and playback parked inSTATE_ENDED, where
the next play intent from the lockscreen, notification or a Bluetooth
reconnect seeks an ended player to position 0 — surfacing as "the episode
randomly restarted". The item's runtime is now what decides: an end reported
well short of it re-opens the stream where it stopped. (UR-040 → DR-129) -
A network hiccup no longer kills playback outright. Music and video
declare a length, so a cut connection reaches them as an error rather than a
phantom end — and every error stopped the player. A recoverable error now gets
one bounded attempt at re-opening the stream where it stopped, with a growing
backoff, leaving the rest of the queue intact. On Linux, MPV additionally
reconnects inside the demuxer so ordinary blips never surface at all, and
EndFile(ERROR)— previously a bare log line that left playback halted while
the UI still showed "playing" — is now reported and recovered.
(UR-004, UR-040 → DR-129, DR-130) -
The player no longer reads 0:00 as a track ends on Linux. MPV exposes
time-posanddurationas properties of the loaded file, so at EOF it
unloads and both stop resolving — reporting zero at exactly the moment
end-of-file handling asks where playback reached. The last reading seen while
media was loaded is now kept and used as the fallback. (UR-005 → DR-130) -
Server-side deletions propagate to the local catalog.
DELETE FROM items
existed nowhere, so items removed on the server lingered locally forever. A
post-crawl mark-and-sweep now removes them, scoped to crawled types, skipping
downloaded items, and refusing to run after a partial crawl. Separately,
items_ftsgrew a full duplicate index on every catalog pass; it is now a
real upsert, with a migration rebuilding existing indexes. (DR-110) -
Android system bars and display cutout are handled correctly. (UR-066)
Downloads
Platform File Android jellytau-release.apk— sideload oradb installWindows (portable) jellytau.exeLinux (Debian/Ubuntu) jellytau_0.4.0_amd64.deb—sudo dpkg -iWindows jellytau_0.4.0_x64-setup.exe(NSIS installer)
Report a problem: https://gitea.tourolle.paris/dtourolle/jellytau/issues
Downloads
-