-
JellyTau v0.1.5
StableBuild & Release / Run Tests (push) Successful in 4m35sBuild & Release / Build Linux (push) Successful in 18m25sBuild & Release / Build Windows (push) Successful in 13m27sBuild & Release / Build Android (push) Successful in 29m9sBuild & Release / Create Release (push) Successful in 16sreleased this
2026-07-27 23:33:32 +00:00 | 215 commits to master since this releasev0.1.3 and v0.1.4 were never tagged; their work is included here.
✨ Features
- A single tap is deferred so a double tap does not also toggle pause. A tap
cannot be classified when it lands — it may still turn out to be the first half
of a double tap — so play/pause waits for the 300ms window to close and is
cancelled if a second tap arrives. Forward skip moves from 10s to 30s; back
stays 10s. (Superseded in v0.2.7, where the deferral turned out to race the
WebView's synthesized click.) (UR-005, UR-061 → DR-092)
🐛 Fixes
-
Locking the screen no longer kills audio during video playback, even with
the background-audio toggle armed.configureWebViewForMedia()ran from both
the delayed post inonCreateand everyonResume, re-registering the JS
bridges each pass — five times in a 45s session. A WebView binds injected
objects at page-load time, so re-injecting over a live page leaves JS holding a
stale proxy: still truthy, and every method gone. The toggle turned blue and
never reached native, so the handoff never ran. Bridges are now registered
exactly once per WebView, andsetBackgroundAudioEnabledreports whether native
was actually reached, so a dead bridge can never again masquerade as an armed
toggle. Removing the re-injection then revived a latent conflict it had been
masking — three audio-focus requesters inside one uid, with the grant followed
~45ms later by a loss whose handler paused playback. The WebView already manages
focus for<video>, so the redundant bridge is dropped entirely, consistent with
the player-is-authoritative principle. WebView console output is now forwarded to
logcat, which is what made this diagnosable at all. (UR-040 → IR-025, DR-051) -
An expired sleep timer stops without triggering autoplay. Stopping the
backend makes the native player fire its ended callback, and the timer thread
cancels the timer first — so by the time the callback inspects it the mode reads
Off, the sleep-timer branch is skipped, and the episode path ran, showing a
next-episode popup right after the user's sleep timer expired. The stop is now
recorded as user-initiated before it reaches the backend, which is the honest
label: via the timer they set rather than the stop button. (UR-023, UR-026 →
DR-029)
Downloads
Platform File Android jellytau-release.apk— sideload oradb installWindows (portable) jellytau.exeLinux (Debian/Ubuntu) jellytau_0.1.5_amd64.deb—sudo dpkg -iWindows jellytau_0.1.5_x64-setup.exe(NSIS installer)
Report a problem: https://gitea.tourolle.paris/dtourolle/jellytau/issues
Downloads
- A single tap is deferred so a double tap does not also toggle pause. A tap