github mesamirh/MovieBox-Tui v0.1.24

latest release: v0.1.25
6 days ago

Added

  • Scoop Package Manager Distribution:
    • Added native Scoop manifest in bucket/moviebox-tui.json supporting Windows x64 and arm64 architectures with automated hash verification.
    • Automated Scoop manifest synchronization alongside Homebrew in .github/workflows/manifests.yml from release SHA256SUMS.
    • Added InstallationEnvironment::Scoop detection in src/updater/apply.rs with update prompt shortcuts ([s]).
  • Adaptive Stream Resolution Picker:
    • Decomposed multi-bitrate DASH streams in src/providers/moviebox/adapt.rs into selectable quality rows (1080p, 720p, 480p).
    • Threaded quality constraints to player builders, injecting --ytdl-format for mpv/IINA and --adaptive-maxheight for VLC.
  • Custom Player Executable Path Configuration:
    • Added vlc_path, mpv_path, and iina_path fields to Config in src/config.rs and src/tui/state.rs.
    • Supported persisted custom player paths with automatic static path cache invalidation upon configuration updates.

Changed

  • Streamlined Download Failure Notifications:
    • Replaced verbose, truncated DASH download failure guidance with terse, actionable commands (Run: winget install yt-dlp.yt-dlp Gyan.FFmpeg).
    • Removed misleading "Partial file preserved" prefix on pre-download failures in src/tui/app/download.rs.
    • Scaled notification toast card width to the widest line across multi-line messages in src/tui/overlay.rs.
    • Threaded selected stream resolution constraint (bestvideo[height<={h}]...) to yt-dlp in src/tui/app/download.rs, ensuring DASH downloads fetch the highlighted quality rather than forcing 1080p.

Fixed

  • Streaming Proxy & Sidecar Lifecycle:
    • Enforced fail-closed target host verification in src/proxy.rs, rejecting requests with 403 Forbidden if target_host is missing or unverified.
    • Detached proxy sidecar child handles via std::mem::forget, preventing defunct zombie process leaks on Unix.
    • Removed 60s request deadline on upstream proxy client and added 128KB tokio::io::BufWriter for sustained chunk throughput.
    • Deferred status line emission until manifest sizing is verified, returning 502 Bad Gateway on oversized payloads.
  • Download Engine & Subprocess Safety:
    • Re-canonicalized created download directories within background tasks in src/tui/app/download.rs, verifying real paths against download roots to prevent symlink traversal.
    • Sanitized provider HTTP header keys and values passed to yt-dlp, stripping CRLF and control bytes to prevent header splitting.
    • Removed global 60s transfer timeout and buffered single-connection file writes with 256KB tokio::io::BufWriter.
    • Added fast-fail fallback to single-stream downloads when segment workers receive 200 OK responses.
    • Sanitized download failure notices via DownloadError::user_message(), replacing raw error dumps with clean user guidance.
  • Media Playback & Progress Tracking:
    • Configured high-throughput stream buffering in src/player.rs for mpv and IINA (8s cushion, 120s readahead, 256MB demuxer cache) to eliminate rebuffering loops.
    • Set 10s network cache floor and nearoptimal adaptive logic for VLC, preventing playback stalls on DASH jitter.
    • Recorded elapsed watch progress for VLC code 1 exits and routed IINA through wall-clock progress tracking.
  • TUI Layout & Modal Ergonomics:
    • Deduplicated movie title repetition in Details screen streams table (src/tui/screens/details.rs), displaying source/CDN instead of identical media titles across rows.
    • Streamlined download progress dock in src/tui/app/run.rs to a sleek, minimal header showing queue position and metrics without redundant title repetition.
    • Isolated TV mode search dispatch in src/tui/app/requests.rs and balanced landing search input width to 48 columns.
    • Auto-sized /settings modal height dynamically to category row counts and balanced modal width to 60 columns.
    • Dimmed background deck items, suggestions, and provider pills when modal popups are active in src/tui/screens/home.rs.
    • Reorganized Details screen footer action hierarchy, lowered split threshold to 80 columns, and synchronized mouse hitboxes.
    • Factored ListState::offset() into Details pane row hitboxes for scrolled season and episode lists.
    • Unified streams table highlight symbol under modals in src/tui/screens/details.rs, preventing table header and column horizontal shifts.
    • Reset show_overview_modal on mode transitions in src/tui/app/tv.rs and top-aligned metadata paragraphs in src/tui/screens/details.rs.
    • Streamlined TV playlist management popup to match Addons mode design with dynamic sizing and clean status indicators.
    • Replaced Action::ToggleTvMode with idempotent Action::SwitchToTvMode and protected Ctrl+T/Ctrl+S against unintended flips.
  • Network, Upstream & Concurrency:
    • Bound parallel sibling provider queries in get_ext_captions (src/service.rs) with individual 8s timeouts to prevent stalls.
    • Tracked in-pool cached stream tasks in request_tasks.streams in src/tui/app/requests.rs, ensuring active tasks cancel on navigation.
    • Removed 30s deadline and added 3-attempt exponential backoff chunk retry for release binary downloads in src/updater/download.rs.
    • Added 5 MiB ceiling to fetch_poster_bytes in src/service.rs and referenced dynamic CARGO_PKG_VERSION in APP_HTTP_USER_AGENT.

Changed

  • Direct Download Triggering:
    • Streamlined download initiation by starting stream and season downloads immediately upon pressing d on the details screen.
    • Pruned intermediate confirmation dialogs, transient state flags (show_episode_download_confirm), and confirmation render helpers.
  • Deep Module Architecture & Task Encapsulation:
    • Encapsulated async task lifecycle in RequestTaskHandles (src/tui/app/mod.rs), consolidating cancellation, task spawning, and abort handle tracking behind dedicated dispatch methods.
    • Encapsulated download destination directory creation, UNC normalization, and sandbox boundary checks into prepare_target_dir in src/tui/app/download.rs.
    • Added render_modal_frame in src/tui/overlay.rs combining area clearing with Clear, inner rectangle calculation, and modal frame border rendering.
  • Terminal Image Picker & Opener Caching:
    • Consolidated fallback and custom cell size image picker creation in src/tui/app/run.rs through create_picker_with_font_size.
    • Cached Android opener detection via std::sync::LazyLock in src/player.rs.
  • CI/CD Quality Gates & Tooling:
    • Added Linux musl target compilation verification in .github/workflows/ci.yml.
    • Migrated CI test matrix to parallel, process-isolated cargo-nextest execution.
  • Documentation Overhaul:
    • Streamlined all user and technical guides in docs/ (players.md, controls.md, tv-mode.md, config.md, addons-mode.md, providers.md, cross-platform.md, cache.md, downloads.md), cutting redundant tables and dense text walls.
    • Documented environment variables (MOVIEBOX_LOG, MOVIEBOX_IMAGE_PROTOCOL, MOVIEBOX_CELL_SIZE, NO_COLOR).

Don't miss a new MovieBox-Tui release

NewReleases is sending notifications on new releases.