github mesamirh/MovieBox-Tui v0.1.17

latest releases: v0.1.26, v0.1.25, v0.1.24...
one month ago

Added

  • Anchored Provider Selection Menu:
    • Replaced immediate mouse cycling on the landing search bar provider badge ([MovieBox · ^P]) with a styled popup menu anchored directly beneath the provider badge.
    • Added dedicated keyboard navigation (↑/↓/k/j, Home/End, Enter/Space, Esc) for the provider menu while preserving direct Ctrl+P sequential provider cycling across all screens.
    • Implemented shared geometry (search_bar_provider_pill_rect and provider_popup_bounds) between renderers and mouse hitboxes, ensuring exact alignment and zero geometry divergence.
  • Redesigned High-Contrast Download Bar & Responsive Layout:
    • Replaced the solid rectangular download gauge with a sleek proportional track ([━━━━━────] on modern terminals and [=====>----] on basic terminals) with filled accent contrast and dimmed surface rail.
    • Added prominent media title indicators on the top border (⬇ Downloading: <Title> or ⬇ S<N>E<N> (<current>/<total>): <Title>) with bold styling and automatic terminal width truncation.
    • Replaced ambiguous whole-area click cancellation with an isolated [x] Cancel button hitbox on the top-right border, preventing accidental download interruptions while keeping the bar mouse-safe.
    • Formatted transfer statistics into clean badges (<Size> | <Speed> | ETA <Time>) with zero unclosed parenthesis artifacts and zero floating dots.
  • Details Screen UX & UI Deduplication:
    • Replaced repetitive audio language strings in the metadata header with a concise summary badge (N Audio Tracks), reserving line space for genre tags and IMDb ratings.
    • Eliminated the redundant workflow breadcrumb bar on wide/desktop layouts where selector columns are already visible side-by-side, reclaiming a vertical display row to show more episodes without scrolling.
    • Standardized selector list typography and cursor alignment, eliminating irregular bullet padding and double-space indentation across Audio, Season, and Episode items.
    • Deduplicated stream table columns by showing clean CDN/provider origins under SOURCE and stripping redundant resolution/codec suffixes from the RELEASE column.
    • Added count context to pane titles (Audio (N), Seasons (N), Episodes (N)), providing immediate visibility into available content quantities.
  • Native Android ARM64 Release Target & Pipeline:
    • Added native aarch64-linux-android build target to the release workflow (.github/workflows/release.yml) using Android NDK r26d and Clang (API 24+).
    • Configured automated packaging of MovieBox_Android_arm64.tar.gz with native Bionic dynamic linking (libc.so), valid ELF PT_PHDR program header table, and /system/bin/linker64 dynamic loader.
    • Added Android ELF header validation in CI to verify PT_PHDR and /system/bin/linker64 presence, preventing Could not find a PHDR: broken executable? aborts on Android devices.
    • Updated universal installer script (install.sh) to detect Android Termux on 64-bit ARM and automatically fetch MovieBox_Android_arm64.tar.gz with verified SHA256 checksums, enabling 1-second native installation without on-device compilation.
  • Native mdBook & GitHub Pages Documentation Architecture:
    • Integrated mdBook documentation engine reading directly from canonical docs/*.md guides with zero duplicated markdown files and zero third-party web frameworks.
    • Added docs/SUMMARY.md defining table-of-contents chapter navigation across all guides, architecture diagrams, and operational workflows.
    • Added docs/installation.md detailing complete installation instructions for macOS (curl script and Homebrew tap), Linux, Windows (PowerShell), Android (Termux), Cargo, and source builds.
    • Formatted docs/README.md as the book's introductory landing page featuring core capabilities, prerequisites player matrix, and the live terminal demonstration video streamed from the GitHub CDN.
    • Added minimal root book.toml with navy dark theme, collapsible sidebar navigation, and client-side full-text search.
    • Added automated GitHub Actions deployment workflow (.github/workflows/pages.yml) publishing the documentation site to GitHub Pages on every push to main.
    • Added documentation build integrity validation step in CI hygiene pipeline (.github/workflows/ci.yml).

Changed

  • Codebase Cleanups, Dead Code Removal & Shared Logic Centralization:
    • Removed obsolete compatibility forwarders and dead code (render_favorites_landing, remove_last_grapheme, pad_to_width, ctrl_key, and unused shortcut constants).
    • Centralized theme_color in src/tui/theme.rs, eliminating duplicate definitions across widgets and screens.
    • Centralized favorite status lookups for active details into AppState::is_selected_details_favorited, unifying 30-line duplicate calculations in details screen rendering and mouse hitbox detection.
    • Unified subtitle picker label formatting ("None" -> "No subtitles", language sanitization) into format_subtitle_label.
    • Consolidated details pane border, title, and selection styling through pane_styles, eliminating over 50 lines of duplicate style branching.
    • Streamlined details footer action definitions into declarative primary/secondary group builders, cutting redundant code blocks while preserving exact keybindings and layout.
    • Hardened cross-platform process spawning by unifying the Windows CREATE_NO_WINDOW (0x08000000) flag into a canonical constant in player.rs.
    • Decoupled network URL validation by moving is_http_url to crate::net, eliminating backend network provider dependencies on the TUI text formatting module.

Fixed

  • Global Modal Background Unfocus & Dimming:
    • Automatically unfocused and dimmed all background components across Details, Home, and Runner views whenever any modal or popup dialog is active, replacing bright active borders, focus bullets, and selection highlight rectangles with dimmed styling (theme.muted).
    • Dimmed background resolution badges (Multi, 4K, 1080p, etc.) and provider origin tags to muted styling (theme.muted on surface backgrounds) during active modal popups, preventing neon badge colors from competing with foreground dialogs.
    • Dimmed unselected list items across Audio dubs, Seasons, Episodes, and Search Results to theme.muted, eliminating bright white text bleeds in the background.
    • Dimmed background footer shortcuts and download bar elements during open dialogs, ensuring visual focus remains strictly on the active foreground popup.
    • Suppressed terminal graphics protocol rendering for background posters when a modal dialog is open, preventing image pixels from bleeding over foreground confirmation dialogs.
  • Stream Table Source Column Resolution:
    • Prioritized specific mirror and uploader labels (file.source_label()) in the stream table SOURCE column before falling back to generic provider names, displaying actual source tags (Pahe.in, PSA, NF, GalaxyRG, etc.) when present while retaining provider fallbacks for direct CDN streams.
  • MovieBox DASH Progress Normalization, Throttling & Background Continuity:
    • Normalized multi-stream MPEG-DASH download percentages across video (0–90%), audio (90–98%), and merger (99–100%) stages, eliminating progress resets back to 0% when the video stream finishes and the audio stream begins.
    • Enforced monotonic progress tracking and throttled progress event emissions to 250ms intervals, eliminating terminal text jitter and channel saturation.
    • Preserved active downloads and queue processing across content provider switching (Ctrl+P) and mode toggling (Ctrl+T, Ctrl+A), eliminating premature download pauses and false cancellation warnings when navigating the TUI.
    • Added explicit cancellation feedback notifications when dismissing the subtitle selection popup via Esc or outside mouse click, preventing silent stream launch cancellations.
  • Empty Search Clear Guarding on Landing Screen:
    • Guarded search-cleared status notifications in Action::GoBack, c/C, and Ctrl+U to only fire when an active search query or loaded results actually existed, eliminating spurious "Search cleared." status messages when navigating on an already-empty landing page.
    • Allowed pressing Enter on an empty search input in editing mode to cleanly switch back to normal mode without triggering unneeded state resets.
  • MovieBox DASH Stream Download Engine & Header Authentication:
    • Forwarded mirror authentication headers (Cookie containing CloudFront signed policy and Referer) through Action::StartDownload and start_resilient_download, eliminating HTTP 403 Forbidden errors on MovieBox CDN downloads.
    • Added dedicated MPEG-DASH stream engine utilizing yt-dlp to assemble multi-track audio/video manifests (index.mpd) into .mp4, maintaining full feature parity with progressive single-file downloads.
    • Integrated real-time child process progress parsing (parse_ytdlp_progress), reporting live percentage, speed, and ETA metrics to the TUI status bar.
    • Implemented dynamic, OS-tailored installation guidance for yt-dlp and ffmpeg when missing from the host system (Homebrew on macOS, package managers on Linux, WinGet on Windows, and Termux pkg install yt-dlp ffmpeg on Android).
    • Hardened Windows background process spawning with CREATE_NO_WINDOW and added cross-platform path resolution fallbacks for macOS Homebrew, Nix, and Termux environments.
    • Preserved external subtitle sidecar retrieval alongside DASH video downloads, maintaining clean <base_dir>/Movies/<Title>/ and <base_dir>/Series/<Title>/Season <N>/ directory hierarchy.
  • Series Season Default & Episode List Rendering Normalization:
    • Initialized unselected series search results with season: 0, preventing catalog season counts from masquerading as watch history progress and erroneously defaulting multi-season shows (e.g. Breaking Bad) to their final season on initial selection.
    • Guarded history pre-seeding in search submission strictly to /history queries and active continue-watching items, ensuring search results always open at Season 1 Episode 1 for new series while resuming at the user's progress for previously watched shows.
    • Authoritatively resolved target season and episode in DetailsSuccess, preserving in-view season and episode positions across audio dub switches while defaulting fresh series navigation to Season 1 Episode 1.
    • Replaced "· " unwatched episode status prefix with clean whitespace padding, eliminating double middots (· · EP 01) and stray dots before unselected episodes in the details pane.
    • Guarded duration formatting against empty strings in MediaDetails, eliminating duplicate bullet dividers (· ·) in the metadata header for series without runtime durations.
  • Accurate Playback & Download Preparation Notifications:
    • Replaced misleading "Fetching subtitles" toast notifications during stream and episode download preparation with accurate stream preparation notices (Preparing <filename>... and Resolving episode stream...), eliminating false subtitle retrieval messages when streams rely on embedded subtitles or contain no external captions.
    • Clarified external subtitle download failure status to External subtitle unavailable; playing stream directly. to prevent ambiguity when video containers carry built-in subtitles.
    • Standardized download mirror error notice to No downloadable mirrors were found for this release. and normalized notification title casing.
  • MovieBox Subtitle Resolution & High-Speed Multi-Tier Aggregation:
    • Implemented multi-tier subtitle resolution in MovieBoxService::get_ext_captions with immediate early-exit (< 250ms) when the active stream provides rich subtitles (≥ 5 tracks), eliminating 15–20 superfluous sibling network round-trips that previously triggered 15-second playback resolution timeouts.
    • Replaced sequential nested loops for sibling dub crawls with concurrent parallel dispatch via futures::future::join_all, bounding multi-dub subtitle aggregation (e.g. Ek Deewane Ki Deewaniyat) to < 1.2s.
    • Added asynchronous background subtitle cache pre-warming in Action::EpisodeStreamsReady, fetching and caching subtitle options as soon as streams are received so that pressing Enter on a stream yields an instant < 1ms cache hit.
    • Resolved full multi-language subtitle availability (English, Bengali, Arabic, Chinese, Filipino, French, Hindi, Indonesian, Malay, Portuguese, Punjabi, Russian, Urdu) on MovieBox by linking genuine upload resourceId identifiers to releases instead of internal CDN transcoding stream IDs.
    • Filtered out 34-byte dummy placeholder caption files returned by transcoding endpoints and deduplicated subtitle tracks by language and download URL.
    • Added automatic fallback to subject resources in MovieBoxService::get_ext_captions when a stream ID does not directly attach captions.
    • Added in_id language code mapping to sanitize_language_label for localized Indonesian subtitle display.
    • Registered draw_subtitle_picker in App::draw, restoring the visual "Subtitles" modal picker overlay during stream playback and download preparation when external captions exist.
    • Tightened modal picker vertical height calculation in picker_layout, eliminating blank gap lines between the last list item and the bottom divider for short lists.
    • Hardened Action::PlayStream error handling with structured diagnostic warnings on subtitle timeout or resolution failure before dispatching direct playback.
  • Termux Android Player Exit Code 126 & Intent Bridge Resolution:
    • Eliminated Player Error: Crash code: 126 (/system/bin/am[11]: /data/data/com.termux/files/usr/bin/cmd: Permission denied) crash in Termux on Android 10+ by prioritizing native Termux openers (termux-open, termux-open-url, termux-am) and strictly avoiding unprivileged /system/bin/am shell script calls.
    • Preserved LD_PRELOAD for Termux applet compatibility while prepending system paths (/system/bin:/system/xbin) for system command invocations.
    • Added actionable diagnostic notifications when player execution fails or when no player is detected in Termux, directing users to install termux-tools termux-am and verify an external Android player (VLC, Just Player, MX Player).
    • Updated universal installer (install.sh), README, and documentation guides with termux-am prerequisites and architecture details explaining external Android video player integration versus headless CLI mpv.
  • Android Intent Player Stream Compatibility:
    • Eliminated blanket player incompatibility errors on Android: unauthenticated streams (CircleFTP, DhakaFlix, IPTV, direct streams) and streams carrying standard Referer/User-Agent headers (4KHDHub) now dispatch directly to Android video players via termux-open or am start.
    • Added empty-header guard to supports_headers, ensuring streams without authentication requirements are never falsely rejected as incompatible.
    • Forwarded User-Agent, Referer, and subtitles (subtitles_location and subs) as intent extras when dispatching playback via am or termux-am.
    • Prevented circular provider switch prompts when playing 4KHDHub streams by tailoring notification hints based on the active provider.
  • Documentation Mobile Layout & Typesetting Normalization:
    • Replaced unparsed LaTeX syntax ($\to$, $\ge$, $\mu\text{s}$, $N\times$) across all documentation guides with standard Unicode characters (→, ≥, µs, N×), eliminating raw unrendered markup in mdBook output.
    • Added responsive documentation stylesheet (docs/custom.css) integrated via book.toml, enabling smooth touch horizontal scrolling, compact cell padding, visible scrollbars, and dynamic code text wrapping across mobile and small screen viewports.
    • Formatted provider matrix table in docs/providers.md with explicit column alignments and bold provider labels to optimize scannability on narrow screens.

Changed

  • Documentation Readability & Typography Polish:
    • Expanded reading container width (--content-max-width: 860px) and relaxed line-height (1.62em) with vertical list spacing (0.45em) in docs/custom.css.
    • Added theme-adaptive inline code badge containers (:not(pre) > code) with bordered backgrounds, and framed <pre> code blocks with rounded corners and drop shadows.
    • Added table row hover transitions and container borders across configuration, platform, and player documentation tables.
    • Implemented responsive mobile header title scaling (.menu-title) and smooth anchor navigation scrolling (scroll-behavior: smooth).

Don't miss a new MovieBox-Tui release

NewReleases is sending notifications on new releases.