Skip to content

Extreme InfiniTV v1.6.0

Choose a tag to compare

@github-actions github-actions released this 16 May 22:57
dcb90ec

App Icon

Extreme InfiniTV v1.6.0 ships a docs site, customizable home-page sections, radio mode for M3U playlists, a multi-step connection diagnostic wizard, TV-overscan compensation for Android TV, close-to-tray with first-launch notification, and an in-app Android external-player picker.

Changelog v1.6.0

New

  • Docs site at https://infinitel8p.github.io/Extreme-InfiniTV/ with a Pagefind command palette (Ctrl/Cmd + K), light/dark theme, mobile drawer, page-to-page view transitions, and a scroll-driven reading-progress meter. The app embeds the site in-app at /docs (theme synced via postMessage); Settings > Help & feedback gains a Read the docs card with an "Open documentation" + "Quick start" deep link.
  • Customizable home-page sections. Reorder, add, or remove the Continue watching / Favorites / Watch later / Recently added strips from a new Settings card, with per-kind variants like "Favorite channels" or "Recently added series". Drag handle for mouse, up/down arrow buttons for keyboard, D-pad, and touch (44 px on coarse pointers).
  • Radio mode for M3U playlists. Entries marked tvg-type="radio" or radio="true" surface a Radio toggle on /livetv and play through an audio-only surface with poster art as the visual anchor.
  • Multi-step connection diagnostic wizard. A "Run full diagnostic" affordance below every Test result streams a 4-step (Xtream: authenticate + live + movies + series, with the catalogue probes parallelised) or 2-step (M3U) inline wizard, with pass / warn / fail and latency per step. Surfaced both at Login and per-playlist in Settings. Closes #56.
  • Poster context menus on movies and series. Right-click (long-press on touch) opens Open / Favorite / Watch later / Download / Copy stream URL for movies; Open / Favorite / Watch later for series. 44 px touch targets with focus rings so D-pad lands cleanly.
  • TV overscan compensation. A 5-step preset (Off / 2% / 4% / 6% / 8%) under Settings > Display > TV safe area insets the whole UI so content stays inside the visible rectangle on TVs. Auto-defaults to 4% on Android TV first launch; opt-out persists. Closes #74.
  • Close-to-tray setting on desktop, with a one-shot native notification on first close so users don't think the app quit. Pick "Minimize to tray" (default) or "Quit" from Settings.
  • In-app Android external-player picker. Replaces Intent.createChooser() with a small dialog listing every installed video-handling app, fixing the long-standing VLC "notification fires but the activity never foregrounds" issue. Sends both MX-Player-style and VLC-style header extras so each app uses whichever it understands.
  • Account connection-limit banner in Downloads. Shows whether a parallel download will fail mid-stream for the active Xtream provider (warn at >=70%, crit at >=100%).

Improved

  • Scheme-less Server / Playlist URLs. Both Xtream and M3U entries now accept input without http:// or https://; the app probes both schemes and saves whichever answers, including silent HTTPS -> HTTP fallback. Mirrors get the same treatment. (Originally for Android TV onboarding where typing http:// on a D-pad keyboard is the most painful part of adding a playlist.)
  • Reason-aware Test connection copy. Errors now classify into unreachable / timeout / cors / auth_rejected / not_found / rate_limited / server_error / http_error / bad_response, so you get "Server is reachable, but the username or password was rejected" instead of a raw fetch error.
  • Live TV channel rows scale with font size. Row height derives from the current root font-size and recomputes on resize, so channel text no longer clips when the window is maximised on hi-DPI displays (closes #73).
  • Frameless-window resize edges (desktop). Six invisible hit-zones around the perimeter call Tauri's startResizeDragging on mousedown, so the resize cursor is reliable regardless of DPI, GPU driver, or third-party shell hooks (FancyZones, GeForce overlay, ExplorerPatcher).
  • Stable scrollbar gutter across pages so the layout doesn't jump when a page gains or loses a scrollbar (#68).
  • Full 16-locale translation pass for every new string in this release.

Fixed

  • Arrow keys swallowed in text inputs on TV / D-pad builds (#72). The spatial-navigation polyfill now lets Left / Right keydown reach the caret inside <input>, <textarea>, and contenteditable fields. Up / Down still leave the field through spatial-nav.
  • Downloads pause button "ticking" with progress. The row no longer drifts vertically per progress tick, and the per-tick appendChild reorder is now position-aware so clicks no longer split between two DOM instances and get dropped.
  • Category picker toggle landing on the wrong row (#68). Click handler now derives the next state from aria-checked on the row that actually received the click instead of stale model state. Focus ring on the rightmost item is no longer clipped.

Under the hood

  • Security pass (CodeQL). XMLTV parsers in epg-data.js and epg-worker.ts reject input containing <!DOCTYPE> or <!ENTITY> declarations to defuse XXE-style payloads from a hostile EPG URL. Playlist IDs now use crypto.randomUUID() (or a crypto.getRandomValues()-built UUIDv4 fallback) instead of Math.random(). The EPG worker also drops cross-origin postMessage.
  • New scan + housekeeping workflows. CodeQL and OSV-Scanner run on every PR; greetings / stale / summarize-issue automation added alongside.
  • Workflow hardening. Third-party GitHub Actions SHA-pinned (pnpm/action-setup, dtolnay/rust-toolchain, Swatinem/rust-cache, tauri-apps/tauri-action, android-actions/setup-android, google/osv-scanner-action). Test workflow now declares a least-privilege permissions: contents: read.
  • Settings refactor. The TV overscan card, Close-to-tray card, and Downloads connection-limit banner now live as dedicated Svelte components (TvOverscanCard.svelte / CloseToTrayCard.svelte / ConnectionLimitBanner.svelte), trimming settings.astro by ~230 lines. No behaviour change.
  • Locale-cache key bumped xt_locale_messages_v2 -> _v3 so users with an existing cache pick up the new diagnostic wizard, scheme-swap toasts, connection-limit, poster menu, and hub-strip strings on first launch. Stale v1 + v2 entries are cleaned up automatically.
  • mainBinaryName: "extreme-infinitv" added to tauri.conf.json so the Tauri 2.x bundle picks up a stable artifact name across platforms regardless of productName casing.
  • Dependency refresh (Astro, Tailwind, Tabler icons, typescript-eslint, and friends).

Mentions

Thanks to @esbnetworking (#72, #73, #74) and @InvisibleRasta (#68) for reporting and testing the fixes for these issues.

Downloads

Pick the file that matches your device. Click a filename to download it directly. The Microsoft Store and Google Play buttons below are the easiest path on Windows and Android.

Platform File
Windows 10/11 (recommended installer) Extreme InfiniTV_1.6.0_x64-setup.exe
Windows (MSI alternative) Extreme InfiniTV_1.6.0_x64_en-US.msi
macOS (Apple Silicon + Intel) Extreme InfiniTV_1.6.0_universal.dmg
Linux Debian / Ubuntu / Mint extreme-infinitv_1.6.0_amd64.deb
Linux Fedora / openSUSE / RHEL extreme-infinitv-1.6.0-1.x86_64.rpm
Linux portable (any distro) extreme-infinitv_1.6.0_amd64.AppImage
Android sideload (APK) Extreme InfiniTV_1.6.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.
  • Extreme InfiniTV_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: "Extreme InfiniTV.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/Extreme InfiniTV.app"

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

Get it from Microsoft