Skip to content

Extreme InfiniTV v1.1.0

Choose a tag to compare

@github-actions github-actions released this 30 Apr 13:36
da7e3b0

App Icon

First release after 1.0.0. The big themes are TV / D-pad readiness, a real Downloads page, route-based detail pages, and a wide reliability + accessibility pass.

Highlights

Downloads got their own page

  • Dedicated /downloads route with split "In progress" + "Downloaded" sections.
  • Each completed file has its own row with poster, Play, and Delete (with confirm).
  • Live throughput sparkline (last 120s, min/max markers) and per-row speed.
  • Sidebar count badge + percent indicator that only appears while something is active.
  • Windows taskbar progress mirrors aggregate state.
  • Concurrent-downloads setting (Settings → Downloads, default 1, max 4).
  • Resume integrity check after every resumed download surfaces silent corruption loudly.
  • Windows file-lock retry on ERROR_SHARING_VIOLATION.

Movie + series detail are now real routes

  • /movies/detail?id=X and /series/detail?id=X replace the in-page dialogs.
  • Browser back / forward / refresh / deep-link all work natively, including from the hardware Back button on Android.
  • The cinematic poster morph keeps working via cross-document View Transitions.
  • Detail pages open offline once an item has been opened at least once (per-item info cache, 7-day TTL).
  • Tap Play on a downloaded item from /downloads to land on the detail page with playback already starting.

Android downloads

  • Default save location: /Download/Extreme InfiniTV/ via SAF / MediaStore. No broad-storage permission required - Play-Store-friendly.
  • Settings → Downloads → "Choose..." opens the system directory picker; the chosen folder survives app restarts.
  • Tap Play on a downloaded movie or episode to hand off to your preferred system video app (VLC, MX Player, the system gallery, etc.) via the standard Intent.ACTION_VIEW chooser.
  • "Remove" now also deletes the file on disk on both desktop and Android.

TV / D-pad

  • Spatial-navigation focus traps fixed across every dialog (movies, series, category pickers, settings).
  • Player control bar stays visible while keyboard focus is inside the player so D-pad Fullscreen doesn't trap focus.
  • Now-playing accent on the active Live TV channel and the active series episode.
  • Hit targets bumped to 44px+ across the board.

Cinematic transitions

  • Hub tiles morph into the destination's active sidebar pill.
  • Poster cards morph into the detail page hero (cross-document View Transitions).
  • Detail page entry: staggered settle on the title / meta / buttons / plot, a one-shot accent halo on the Play button, and a scroll-driven Ken Burns zoom on the hero poster.
  • Every animation honours prefers-reduced-motion.

Live TV

  • New EPG toggle button next to the category picker; visibility persisted per session, default configurable in Settings.
  • Channel column width is now configurable (Compact / Default / Wide / X-Wide), persisted and applied pre-paint to avoid FOUC.

Account expiration

  • Warning banner in the sidebar when expiry is within 7 days; severity states (warning / critical / expired).
  • Same date also surfaced in Settings → About.

Settings

  • Theme picker: System / Light / Dark, persisted, applied pre-paint.
  • Live TV layout: default EPG visibility + channel column width.
  • Concurrent downloads control.
  • Font scale: Default / Medium / Large / X-Large.

Reliability

  • Provider-unreachable empty states on /livetv, /movies, /series, /epg with a D-pad-reachable Retry affordance. Cached lists stay painted while the error sits below.
  • Cross-platform filename sanitization for downloads. Rejects Windows reserved names (CON, PRN, LPT1-9, etc.), control bytes, trailing dots and spaces, and leading dots so a Windows-safe name copies fine to macOS / Linux / Android (including FAT32 SD cards).
  • Cache eviction now batched 32 entries per pass with a "Trimming local cache..." toast on long evictions.
  • Auto-update download-failure UX: install button stays available after a failed attempt with a "Re-download" label and a clearer hint.
  • Hot in-session cache tier (sessionStorage) in front of the existing localStorage cache so list pages skip the disk parse on repeat navigations within a tab.

Accessibility

  • Light-mode WCAG AA contrast audit. Secondary text (--color-fg-3) and accent (--color-accent) deepened so links, count chips, and metadata clear 4.5:1 on every surface.
  • Focus return on every dialog close.
  • aria-live="polite" on the download summary so status transitions are announced.
  • Explicit prefers-reduced-motion fallbacks on every new animation.

Polish

  • Page-entrance choreography on /downloads (header + folder summary + queue card lift in with stagger).
  • FLIP reorder when downloads change status so a finishing row physically slides into the finished group instead of jumping.
  • Cinematic completion sweep on the determinate progress bar.
  • Status-dot pulse beside "Downloading" and a gentle gradient sweep across the active fill.
  • Done rows recede (lower opacity) so active rows pull the eye.

Important: upgrading from 1.0.0

1.0.0 cannot auto-update to 1.1.0. A Vite bundling configuration in 1.0.0 left bare ESM specifiers like @tauri-apps/plugin-updater in the build output, which the Tauri WebView couldn't resolve at runtime. The 1.0.0 auto-updater check has been silently failing the whole time.

To get to 1.1.0:

  • Microsoft Store / Play Store users: wait for the store update.
  • Manual / NSIS users: download the installer attached to this release and run it.

From 1.1.0 onwards the auto-updater works correctly.

Known limitations

  • Android downloads have no resume yet. The Android FS plugin's write stream truncates on open, so pause + resume restarts from byte 0. Tracked as a follow-up.
  • In-app local playback on Android isn't supported. Tauri 2's WebView doesn't intercept asset.localhost URLs (tauri#12019, open since Dec 2024), so we hand off to a system video app via Intent.ACTION_VIEW instead. Standard hybrid-app pattern; revisit when the upstream issue lands or a native ExoPlayer overlay is worth writing.
  • View transitions on Linux WebKitGTK (AppImage build) need Chromium 126+ behaviour; if your WebKit doesn't support cross-document VT yet you'll get a plain page swap rather than the morph.

Internals worth knowing

  • New shared modules under src/scripts/lib/: dialog-spatial-nav.js, player-focus-keeper.js, morph-detail.js, provider-error.js.
  • New Tauri capabilities: core:window:allow-set-progress-bar, fs:allow-stat, fs:allow-remove, android-fs:allow-remove-file, android-fs:allow-write-file, android-fs:allow-open-write-file-stream.
  • Throughput tracking centralized in downloads.js so it accumulates regardless of which page is open. Persisted to localStorage with a 30s TTL so opening /downloads mid-download shows a prefilled graph.
  • New per-item caches: vod_info_<id> and series_info_<id> (7-day TTL) for offline-reachable detail pages.
  • Source metadata persisted on every new download record (kind / playlistId / id / seriesId / season / episode / seriesName / logo) - powers the /downloads Play / detail-link routing and the offline-fallback hydrate path.

Downloads

Pick the file that matches your device. The Microsoft Store and Google Play buttons below are the easiest path on Windows and Android.

Platform File
Windows 10/11 (recommended installer) xtream_1.1.0_x64-setup.exe
Windows (MSI alternative) xtream_1.1.0_x64_en-US.msi
macOS (Apple Silicon + Intel) xtream_1.1.0_universal.dmg
Linux Debian / Ubuntu / Mint xtream_1.1.0_amd64.deb
Linux Fedora / openSUSE / RHEL xtream-1.1.0-1.x86_64.rpm
Linux portable (any distro) xtream_1.1.0_amd64.AppImage
Android sideload (APK) xtream_1.1.0.apk
What about the .sig files, latest.json and the macOS .app.tar.gz?

You can ignore them.

  • *.sig and latest.json are used by the built-in auto-updater to verify each download is genuinely signed. The app downloads them on its own when checking for updates.
  • xtream_universal.app.tar.gz is the macOS update bundle consumed by the same updater. For a fresh install on macOS, use the .dmg instead.
  • The .aab file is uploaded to Google Play and is not meant for sideloading. Use the .apk to install manually.
macOS: "xtream.app" cannot be opened / "Apple could not verify..."

The macOS build is not yet notarized by Apple, so Gatekeeper blocks it on first launch. After dragging the app from the .dmg into /Applications, remove the quarantine flag from a Terminal:

xattr -dr com.apple.quarantine /Applications/xtream.app

Then open the app normally. You only need to do this once per install.

Get it from Microsoft