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 directCtrl+Psequential provider cycling across all screens. - Implemented shared geometry (
search_bar_provider_pill_rectandprovider_popup_bounds) between renderers and mouse hitboxes, ensuring exact alignment and zero geometry divergence.
- Replaced immediate mouse cycling on the landing search bar provider badge (
- 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] Cancelbutton 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.
- Replaced the solid rectangular download gauge with a sleek proportional track (
- 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
SOURCEand stripping redundant resolution/codec suffixes from theRELEASEcolumn. - Added count context to pane titles (
Audio (N),Seasons (N),Episodes (N)), providing immediate visibility into available content quantities.
- Replaced repetitive audio language strings in the metadata header with a concise summary badge (
- Native Android ARM64 Release Target & Pipeline:
- Added native
aarch64-linux-androidbuild 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.gzwith native Bionic dynamic linking (libc.so), valid ELFPT_PHDRprogram header table, and/system/bin/linker64dynamic loader. - Added Android ELF header validation in CI to verify
PT_PHDRand/system/bin/linker64presence, preventingCould 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 fetchMovieBox_Android_arm64.tar.gzwith verified SHA256 checksums, enabling 1-second native installation without on-device compilation.
- Added native
- Native mdBook & GitHub Pages Documentation Architecture:
- Integrated
mdBookdocumentation engine reading directly from canonicaldocs/*.mdguides with zero duplicated markdown files and zero third-party web frameworks. - Added
docs/SUMMARY.mddefining table-of-contents chapter navigation across all guides, architecture diagrams, and operational workflows. - Added
docs/installation.mddetailing complete installation instructions for macOS (curl script and Homebrew tap), Linux, Windows (PowerShell), Android (Termux), Cargo, and source builds. - Formatted
docs/README.mdas 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.tomlwithnavydark 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 tomain. - Added documentation build integrity validation step in CI hygiene pipeline (
.github/workflows/ci.yml).
- Integrated
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_colorinsrc/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) intoformat_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 inplayer.rs. - Decoupled network URL validation by moving
is_http_urltocrate::net, eliminating backend network provider dependencies on the TUI text formatting module.
- Removed obsolete compatibility forwarders and dead code (
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.mutedon 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.
- 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 (
- Stream Table Source Column Resolution:
- Prioritized specific mirror and uploader labels (
file.source_label()) in the stream tableSOURCEcolumn 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.
- Prioritized specific mirror and uploader labels (
- 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
Escor 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, andCtrl+Uto 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.
- Guarded search-cleared status notifications in
- MovieBox DASH Stream Download Engine & Header Authentication:
- Forwarded mirror authentication headers (
Cookiecontaining CloudFront signed policy andReferer) throughAction::StartDownloadandstart_resilient_download, eliminatingHTTP 403 Forbiddenerrors on MovieBox CDN downloads. - Added dedicated MPEG-DASH stream engine utilizing
yt-dlpto 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-dlpandffmpegwhen missing from the host system (Homebrew on macOS, package managers on Linux, WinGet on Windows, and Termuxpkg install yt-dlp ffmpegon Android). - Hardened Windows background process spawning with
CREATE_NO_WINDOWand 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.
- Forwarded mirror authentication headers (
- 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
/historyqueries 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.
- Initialized unselected series search results with
- Accurate Playback & Download Preparation Notifications:
- Replaced misleading "Fetching subtitles" toast notifications during stream and episode download preparation with accurate stream preparation notices (
Preparing <filename>...andResolving 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.
- Replaced misleading "Fetching subtitles" toast notifications during stream and episode download preparation with accurate stream preparation notices (
- MovieBox Subtitle Resolution & High-Speed Multi-Tier Aggregation:
- Implemented multi-tier subtitle resolution in
MovieBoxService::get_ext_captionswith 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
resourceIdidentifiers 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_captionswhen a stream ID does not directly attach captions. - Added
in_idlanguage code mapping tosanitize_language_labelfor localized Indonesian subtitle display. - Registered
draw_subtitle_pickerinApp::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::PlayStreamerror handling with structured diagnostic warnings on subtitle timeout or resolution failure before dispatching direct playback.
- Implemented multi-tier subtitle resolution in
- 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/amshell script calls. - Preserved
LD_PRELOADfor 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-amand verify an external Android player (VLC, Just Player, MX Player). - Updated universal installer (
install.sh), README, and documentation guides withtermux-amprerequisites and architecture details explaining external Android video player integration versus headless CLImpv.
- Eliminated
- 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-Agentheaders (4KHDHub) now dispatch directly to Android video players viatermux-openoram 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_locationandsubs) as intent extras when dispatching playback viaamortermux-am. - Prevented circular provider switch prompts when playing 4KHDHub streams by tailoring notification hints based on the active provider.
- Eliminated blanket player incompatibility errors on Android: unauthenticated streams (CircleFTP, DhakaFlix, IPTV, direct streams) and streams carrying standard
- 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 viabook.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.mdwith explicit column alignments and bold provider labels to optimize scannability on narrow screens.
- Replaced unparsed LaTeX syntax (
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) indocs/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).
- Expanded reading container width (