github mesamirh/MovieBox-Tui v0.1.22

latest releases: v0.1.28, v0.1.27, v0.1.26...
one month ago

Added

  • Dramachi Native Streaming Provider:
    • Integrated Dramachi as a native streaming provider for Asian dramas, K-dramas, C-dramas, anime, and movies via https://api.nodeobjects.com/.
    • Added direct HTTP byte-range video streaming support (direct_file: true) bypassing CloudFront proxies and authentication overhead.
    • Added multi-dub and language rip resolution supporting original, English, and localized dubs with composite subject ID routing ({title_id}::{rip}).
    • Added ProviderKind::Dramachi support across MovieBoxService, TUI search, details, stream resolution, downloads, settings, and badges ([Dramachi]).

Fixed

  • Human-Readable Subtitle Filenames & Intent Storage:
    • Formatted subtitle filenames with media titles and season/episode tags (e.g. <Title> - S<N:02>E<E:02>.<ext>) in src/service.rs and src/tui/app/playback.rs, replacing random process/timestamp IDs for easy identification in external player file pickers (moviebox_subs/).
  • Concise Stream Failure Messages:
    • Simplified verbose stream failure messages (Provider is temporarily unavailable: No stream sources available) across the details screen (src/tui/screens/details.rs) and notification bar (src/tui/app/requests.rs) to concise, direct notices (No streams available on <Provider>.).
  • Stream Proxy Subtitle Whitelist & Scope Isolation:
    • Permitted external subtitle CDN hosts in src/proxy.rs proxy connection validation, preventing HTTP 403 errors when media players fetch external subtitle tracks alongside DASH stream manifests.
    • Scoped authentication headers exclusively to target video hosts, preventing credential spillage to subtitle CDNs.
  • Stremio Addon Mode Series Metadata Resolution & Episode Picker:
    • Encoded media type hints into Addon catalog and search results (series:{id} and movie:{id}) in src/providers/addons/adapter.rs, preserving search intent across preview prefetching and details resolution.
    • Hardened metadata probing in AddonClient::details (src/providers/addons/mod.rs) to prioritize series queries and check for episode videos (!videos.is_empty()) before falling back to movie, resolving an issue where series (e.g. Breaking Bad) fell back to corrupted movie metadata ("Mirror") lacking episode lists.
    • Normalized subject IDs in src/providers/addons/aggregator.rs before constructing stream query IDs ({clean_id}:{season}:{episode} for series, {clean_id} for movies), including support for Season 0 (Specials).
    • Fixed Season 0 episode count and index calculation in season_confirm_summary (src/tui/screens/details.rs).
    • Replaced verbose stream failure and missing addon messages with concise status notices in src/tui/app/requests.rs.
    • Aligned Addon Mode empty search results with Streaming Mode by returning Ok(vec![]) on zero-result queries instead of triggering a boxed Search Request Error, restoring the standard no-results view with [ Try on MovieBox (^P) ] and [ Clear Search (c) ] pills.
    • Returned Ok(vec![]) on empty addon catalogs in MovieBoxService::fetch_addon_catalog (src/service.rs), preventing empty catalog views from raising false search failure errors.
    • Reset active_screen to Screen::Home in reset_mode_state (src/tui/app/tv.rs), preventing orphaned Details screen states when switching between TV and Streaming modes.
  • Logging Engine, Crash Diagnostics & Backtrace Capture:
    • Added stack backtrace capture (std::backtrace::Backtrace::capture()) and immediate log buffer flushing (moviebox_tui::logging::flush()) to std::panic::set_hook in src/main.rs, ensuring crash locations and backtraces are committed to disk before terminal restoration and process termination.
    • Standardized default file log level to info across all builds in src/logging.rs, ensuring session startup metadata, player lifecycle commands, and exit durations are consistently captured without requiring manual MOVIEBOX_LOG configuration.
    • Retained LoggerHandle globally in src/logging.rs with graceful fallback to default logging levels if MOVIEBOX_LOG contains an invalid level specification.
    • Re-routed Windows logs directory (crate::config::logs_dir()) to Local AppData (%LOCALAPPDATA%\moviebox-tui\logs) to align with documentation and avoid roaming enterprise profile sync issues.
    • Hardened sanitize_url in src/logging.rs to redact embedded user/password credentials (user:pass@host), preserve original URI schemes, and retain port numbers for localhost and custom IPTV ports.
    • Sanitized and bounded player crash error messages (clean_player_error) in src/tui/app/playback.rs, preventing unbounded stderr streams and CDN auth tokens from leaking into error logs.
    • Added desktop player launch banners and clean exit logs with duration tracking to src/tui/app/playback.rs.
    • Added HTTP status code validation (error_for_status()) in DramachiClient and CircleFtpClient, preventing HTTP 403/502/Cloudflare errors from masquerading as misleading JSON parse failures.
    • Added diagnostic logging for system DNS fallback to public resolvers and probe failure statuses in src/net.rs.
    • Added warning logs for disk write and serialization failures in src/cache.rs::set_typed_cache.
  • BDIX DhakaFlix Configuration Persistence:
    • Loaded bdix_dhakaflix_enabled from saved configuration in App::new (src/tui/app/mod.rs), preventing DhakaFlix provider toggle from resetting to disabled upon restarting the application.
  • M3U Playlist Parser Async Cache Probing:
    • Replaced blocking synchronous file_path.exists() check in M3UParser::fetch_playlist with non-blocking tokio::fs::try_exists in src/providers/tv/parser.rs, eliminating async event loop stalls during remote playlist caching.
  • HTTP Client Builder Timeout Floors:
    • Enforced baseline connection (15s) and request (60s) timeout floors in http_client_builder (src/net.rs) to prevent stalled HTTP connections across external providers without explicit timeouts.
  • Pruned Dead BDIX Release Stubs:
    • Removed unused resolve_release identity functions from CircleFtpClient and DhakaFlixClient (src/providers/bdix/).
  • Hardened Issue Templates & Automated Triage:
    • Added Android (Termux) option, mandatory pre-flight checklist, and sanitized terminal log output requirement to .github/ISSUE_TEMPLATE/bug_report.yml.
    • Added direct links to GitHub Discussions and Termux setup documentation in .github/ISSUE_TEMPLATE/config.yml.
    • Added automated incomplete-issue.yml workflow to flag and comment on vague issue reports lacking diagnostic context.
    • Added automated stale.yml workflow to close unresponsive needs-info issues after 7 days.
  • Security & Terminal Signal Hardening:
    • Enforced host authority whitelist validation against target_host in local proxy sidecar handle_connection (src/proxy.rs), returning HTTP 403 Forbidden on host mismatch to prevent Server-Side Request Forgery and unauthorized auth header leakage.
    • Enforced HTTP and HTTPS scheme validation on percent-decoded subtitle URLs in proxy extract_target_url (src/proxy.rs), preventing arbitrary URL scheme forwarding.
    • Registered Unix SIGTERM and SIGHUP signal handlers in EventHandler::new (src/tui/event.rs) routing to Action::Quit, ensuring proper terminal de-initialization and alternate screen restoration via TerminalGuard on process termination.
    • Replaced silent reqwest::Client::new fallbacks with explicit builder expect assertions in MovieBoxClient, DhakaFlixClient, and CircleFtpClient, preventing silent networking degradation without shared DNS and connection pooling configurations.
    • Added canonical path containment checks in start_resilient_download (src/tui/app/download.rs) ensuring download target paths resolve within the configured download directory tree.
  • Cross-Platform Compatibility & Player Integration:
    • Stripped Windows extended-length verbatim prefix (\\?\) in start_resilient_download (src/tui/app/download.rs), preventing false-positive download containment failures when comparing canonicalized base directories with un-canonicalized target paths.
    • Added environment variable expansion for REG_EXPAND_SZ values in Windows registry queries (src/player.rs), allowing automatic discovery of player binaries configured with %USERPROFILE%, %SystemRoot%, or %LOCALAPPDATA% paths.
    • Retained downloaded local subtitle files for Android intent launches in src/tui/app/playback.rs without premature process-exit deletion, avoiding loopback proxy URLs (http://127.0.0.1:<port>/sub/...) and allowing external players (VLC, MX Player) to load subtitles from shared storage before background cleanup.
    • Gated Kitty keyboard enhancement protocol flags (PushKeyboardEnhancementFlags) behind !is_termux_environment() in src/main.rs, preventing unsupported escape sequence noise on mobile touch terminals.
    • Restricted Termux shared storage subtitle directory probing (~/storage/downloads/moviebox_subs) to verified Termux environments in src/main.rs and src/cache.rs.
    • Added Flatpak @@ file forwarding markers for local file and file:// URLs in mpv_command and vlc_command (src/player.rs), ensuring Flatpak Document portal exports media and subtitle files into sandboxed player containers.
  • Audio Track Switch Metadata & Synopsis Preservation:
    • Preserved rich metadata (duration, synopsis, genres, cast, crew, and clean title) when switching audio dubs on the Details screen in src/tui/app/requests.rs.
    • Resolved an issue where selecting an audio track (e.g. Hindi dub) caused duration (2h 20m) to disappear and replaced the multi-line synopsis with a title placeholder (Ek Deewane Ki Deewaniyat), breaking visual balance against the poster.
    • Sanitized window title in contextual_title (src/tui/app/run.rs) using clean_moviebox_title to prevent raw dub tags ([Hindi]) from leaking into the terminal window title.
  • MovieBox Edge-Cache CDN Stream Manifest Resolution:
    • Added Edge-Cache-Cookie urlprefix Base64 decoding in resolve_dash_manifest_from_policy (src/providers/moviebox/adapt.rs).
    • Resolves active multi-quality MPEG-DASH manifests (https://sbcdn*.hakunaymatata.com/dash/.../index.mpd) generated under MovieBox's updated CDN token structure.
    • Fixes playback and stream resolution failure (No stream sources available) across movies and episodic series where previous parser only checked for CloudFront-Policy.
  • Settings Sub-Popups & Picker Dialog Anchoring:
    • Unified sub-popup positioning (Streaming Sources, Default Media Player, Theme, Browse) to anchor directly inside Settings & Preferences (settings_picker_layout in src/tui/overlay.rs) rather than floating into empty screen space on tall terminal windows.
    • Stabilized Settings & Preferences modal height across all category tabs (General, Content Modes, Appearance, Maintenance) to 9 rows, eliminating dialog jitter when cycling tabs.
    • Synchronized mouse click detection in src/tui/app/mouse.rs with settings_picker_layout and browse_picker_layout.
  • Update Modal Minimalist Redesign & Single-Surface Card:
    • Redesigned update popup from a multi-compartment divided box into a clean, single-surface dialog card (src/tui/overlay.rs and src/tui/app/run.rs).
    • Embedded version directly in the top title frame (Update Available: vX.Y.Z) and docked primary actions directly into the bottom border ([u] Update ──── [o] GitHub), eliminating all internal divider lines and wasted vertical padding.
    • Unified modal positioning by anchoring both update notification and in-progress update modals directly at the landing search bar position (home_search_y), keeping the dimmed ASCII logo visible above while focusing full attention on update progress.
    • Integrated category badges inline with release highlights ([Added], [Fixed], [Changed], [Perf]) while retaining full Markdown compatibility with GitHub release notes.
    • Streamlined in-progress update modal into a compact 42-column status pill (Updating: vX.Y.Z) displaying active mechanical stage (Downloading release, Verifying checksum, Installing binary) without noisy warning labels or type mixing.
  • Details Poster Geometry Stability Across Dub Synopsis Lengths:
    • Locked content_rows to 6 in DetailsLayoutTier::header_height (src/tui/screens/details.rs) when show_poster is active, maintaining consistent 8-row header height and 6-row poster container dimensions.
    • Prevented poster image shrinking and header layout shifts caused by variable synopsis text lengths across audio dubs and releases.
  • Single-Line Input Windowing & Overflow Prevention:
    • Fixed text overflow in render_single_line_input (src/tui/widgets/input.rs) where appending ellipsis (...) without sufficient budget caused line length to exceed modal width and trigger word wrapping onto a second line.
    • Reserved 3 columns for trailing ellipsis when characters remain past the cursor and removed Wrap on single-line input widgets, keeping prompt symbols and text strictly single-line across all cursor movements.
  • Addons Manager Search Bar Anchor & Overlay Isolation:
    • Anchored Addons Manager popup directly in place of the landing search bar using unified home_search_y geometry in src/tui/overlay.rs.
    • Gated the landing search bar, search suggestions, provider pill popup, and discovery decks in src/tui/screens/home.rs during active Addon Manager sessions, preventing background search bar leakage.
  • MovieBox Deprecation Notice Stream Filtering:
    • Filtered deprecation notice video URLs (macdn.aoneroom.com/other/, notice video hash b164fbfb4347792950bdfbfb563d39d9) from community resource releases in src/providers/moviebox/adapt.rs.
    • Prevented 21-second upgrade announcement video placeholders from leaking into stream selection as playable releases when episodes lack official DASH streams.
  • Audio Dub Label Sanitization & Stream Quality Deduplication:
    • Prevented blank audio track gap in episode details by mapping standalone "Dub" version tags to "English Dub" in clean_language_name (src/tui/screens/details.rs).
    • Added native 540p resolution badge mapping in src/tui/widgets/badge.rs to distinguish true 540p media encodes from 480p.
    • Deduplicated episode entries in src/providers/dramachi/client.rs across multi-resolution manifests, preventing duplicate episode rows while sorting available streams in descending resolution priority.
  • 4KHDHub Resolution Detection & Numeric Sorting:
    • Expanded detect_quality in src/providers/fourkhdhub/parser.rs to detect 4K, UHD, 2160, 1080, FHD, 720, HD, and 480 tokens.
    • Replaced ASCII string sorting with numeric resolution sorting (resolution_u64() descending, then size_bytes descending) in parse_releases, ensuring 4K UHD BluRay REMUXes prioritize ahead of lower-resolution streams.
  • MovieBox High-Bitrate Server Catalog Merging:
    • Merged mobile DASH manifests (/subject-api/play-info/v2) and full-bitrate server files (/subject-api/resource) concurrently in MovieBoxClient::episode_streams (src/providers/moviebox/mod.rs), deduplicating stream links and sorting releases by numeric resolution and size.
  • External Player Adaptive Quality Optimization:
    • Added --ytdl-format=bestvideo+bestaudio/best and --hls-bitrate=max to mpv command invocation in src/player.rs to prevent adaptive demuxers from locking into low-bitrate streams.
    • Added --adaptive-logic=highest to VLC invocation in src/player.rs.

Changed

  • Minimalist Addon Manager Modal Redesign & Balanced Geometry:
    • Streamlined Addon Manager popup into a content-fitted modal matching the provider popup design language, eliminating empty right-side letterboxing and arbitrary vertical blank gaps.
    • Replaced noisy capability bracket badges ([Core], [Meta], [Streams], [Catalog]), button bracket wrappers ([ Add Manifest URL ]), and arbitrary gap rows with continuous list rhythm, clean checkmarks (✓) for active addons, symmetric 2-cell horizontal padding, and full-width background highlight bars (highlight_symbol("")).
    • Aligned mouse click hitboxes and keyboard navigation with simplified two-variant row indexing (Addon(usize) and AddUrl).
  • Contextual /config Command Separation & Slash Command Cleanup:
    • Promoted /config to a dedicated slash command rather than an alias for /settings.
    • Restricted /config suggestion visibility to contexts where a configuration modal exists: TV mode (playlist manager) and Addons provider (manifest manager).
    • Added a contextual guidance notification when /config is entered while MovieBox or 4KHDHub is active, prompting users to use /settings for preferences or switch to Addons (Ctrl+P/^P) to configure addons.
    • Restored missing /browse description in SlashCommand::description_for to display proper annotations in search suggestions.
    • Added contextual /config command row to in-app help overlay (?) under TV Mode and Addons provider.
    • Pruned redundant and confusing slash command aliases (/pref, /preferences, /options, and /fav), establishing /settings and /favorites as single canonical commands while retaining universal terminal conventions (/? for /help, /q//quit for /exit).

Refactored

  • Streamlined MovieBox Episode Stream Resolution:
    • Replaced speculative parallel get_resources and secondary fetch_resource_page fallbacks in providers/moviebox/mod.rs with direct play-info/v2 resolution.
    • Eliminated sprawling 60-page background resource pagination loop in src/tui/app/requests.rs, cutting redundant network requests and preventing dead community upload parsing.

Don't miss a new MovieBox-Tui release

NewReleases is sending notifications on new releases.