• v0.1.5 37ffabee06

    JellyTau v0.1.5
    Build & Release / Run Tests (push) Successful in 4m35s
    Build & Release / Build Linux (push) Successful in 18m25s
    Build & Release / Build Windows (push) Successful in 13m27s
    Build & Release / Build Android (push) Successful in 29m9s
    Build & Release / Create Release (push) Successful in 16s
    Stable

    dtourolle released this 2026-07-27 23:33:32 +00:00 | 215 commits to master since this release

    v0.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 in onCreate and every onResume, 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, and setBackgroundAudioEnabled reports 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 or adb install
    Windows (portable) jellytau.exe
    Linux (Debian/Ubuntu) jellytau_0.1.5_amd64.debsudo dpkg -i
    Windows jellytau_0.1.5_x64-setup.exe (NSIS installer)

    Report a problem: https://gitea.tourolle.paris/dtourolle/jellytau/issues

    Downloads