head 1.9; access; symbols; locks; strict; comment @# @; 1.9 date 2026.11.06.11.06.47; author pin; state Exp; branches; next 1.8; commitid JkJtXthOlfw8io2H; 1.8 date 2026.11.05.22.30.28; author leot; state Exp; branches; next 1.7; commitid IO6VStjYbaIg6k2H; 1.7 date 2026.11.05.18.59.51; author pin; state Exp; branches; next 1.6; commitid vX6REMDbV1XqWi2H; 1.6 date 2026.10.30.11.14.19; author pin; state Exp; branches; next 1.5; commitid eHpbLVuKezUFyu1H; 1.5 date 2026.10.28.18.01.46; author pin; state Exp; branches; next 1.4; commitid rBHqUUET2wCrSg1H; 1.4 date 2026.10.01.11.50.01; author pin; state Exp; branches; next 1.3; commitid T7aKBgYje6HIGLXG; 1.3 date 2026.09.30.17.09.21; author pin; state Exp; branches; next 1.2; commitid YjWRlUxM1huguFXG; 1.2 date 2026.09.25.05.19.37; author pin; state Exp; branches; next 1.1; commitid taDQ8htxIMmKIXWG; 1.1 date 2026.09.22.14.53.26; author pin; state Exp; branches; next ; commitid 5JgAeUIdIIyyZCWG; desc @@ 1.9 log @multimedia/moviebox-tui: fix dependency Spotted by leot@@ during mpv revbump. moviebox-tui only depends on the mpv executable. While here remove duplicate line. @ text @# $NetBSD: Makefile,v 1.8 2026/11/05 22:30:28 leot Exp $ DISTNAME= MovieBox-Tui-0.1.29 PKGNAME= ${DISTNAME:tl} PKGREVISION= 1 CATEGORIES= multimedia MASTER_SITES= ${MASTER_SITE_GITHUB:=mesamirh/} GITHUB_TAG= v${PKGVERSION_NOREV} MAINTAINER= pkgsrc-users@@NetBSD.org HOMEPAGE= https://github.com/mesamirh/MovieBox-Tui/ COMMENT= TUI to find, download and stream on local mediaplayers LICENSE= apache-2.0 OR mit .include "cargo-depends.mk" WRKSRC= ${WRKDIR}/MovieBox-Tui-0.1.29 RUST_REQ= 1.90.0 DEPENDS+= mpv-[0-9]*:../../multimedia/mpv .include "../../lang/rust/cargo.mk" .include "../../mk/bsd.pkg.mk" @ 1.8 log @*: revbump for mpv-0.42.0 (At least according a code skim moviebox-tui should DEPENDS on mpv because it is not actually linked to libmpv and so probably it does not really need a revbump... but let's do that to be on the safer side.) @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.7 2026/11/05 18:59:51 pin Exp $ d20 1 a20 1 .include "cargo-depends.mk" a22 1 .include "../../multimedia/mpv/buildlink3.mk" @ 1.7 log @multimedia/moviebox-tui: update to 0.1.29 Fixed Providers & Stream Resolution: Restored MovieBox TV series streaming by generating and attaching the official X-Client-Build APK certificate stamp with signed requests. Preserved multi colon and namespaced media identifiers (such as Kitsu anime IDs) in Stremio addon stream aggregation. Replaced hard assertions on HTTP client builders with safe fallbacks in MovieBox, CircleFTP, and DhakaFlix clients. Networking & DNS: Added runtime fallback to public DNS (Cloudflare, Google, Quad9) in FallbackResolver when primary system DNS lookup fails or is blocked by an ISP. Media Playback & Sidecar Proxy: Handled poisoned watchdog activity locks gracefully in the stream proxy sidecar loop to prevent unwrap crashes. Standardized cross-platform temporary subtitle cleanup path joins to eliminate forward-slash path issues on Windows. Test Infrastructure: Synchronized environment dependent player tests with ENV_MUTEX and probed Android intent openers dynamically to eliminate parallel test race conditions. Changed Dependencies & Build Infrastructure: Upgraded unicode-width to 0.2.3, log to 0.4.35, and zip to 9.2.1 (#234). @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.6 2026/10/30 11:14:19 pin Exp $ d5 1 @ 1.6 log @multimedia/moviebox-tui: update to 0.1.28 Fixed Providers & Stream Resolution: Extracted signed CDN MP4 streams from MovieBox subject detector links (/subject-api/get), restoring movie streaming and multi-resolution playback after upstream restricted play-info with deprecation clips. Reported explicit error causes when MovieBox serves placeholder clips instead of generic "no streams available", and surfaced upstream HTTP failure statuses directly to the user. Download Engine & Batch Queue: Recorded only flushed bytes to .part.json segment progress during downloads, preventing aborted or paused workers from leaving zero-byte gaps and file corruption on resume. Changed Dependencies & Build Infrastructure: Upgraded tokio to 1.54.1, scraper to 0.29.0, lru to 0.19.0, zip to 9.1.0, sha2 to 0.11.1, open to 5.4.5, libc to 0.2.191, and serde_json to 1.0.154. @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.5 2026/10/28 18:01:46 pin Exp $ d3 1 a3 1 DISTNAME= MovieBox-Tui-0.1.28 d16 1 a16 1 WRKSRC= ${WRKDIR}/MovieBox-Tui-0.1.28 @ 1.5 log @multimedia/moviebox-tui: update to 0.1.27 [0.1.27] - 2026-10-23 Fixed Media Playback & Subtitle Engine: Removed --play-and-exit from VLC player invocations so the player stays active across adaptive and HLS chunk transitions. Reset legacy Android player defaults in graphical X11 and Wayland sessions so native Linux players take precedence over external Android intent dialogs. Prioritized native Linux media player paths over foreign container fallbacks on Linux systems and preserved dynamic auto-player resolution for unconfigured sessions. Providers & Stream Resolution: Recovered playable signed MP4 streams via /resource-position/v2 when MovieBox returns deprecation notice clips, querying exact seasons and episodes and reporting accurate file sizes. Stripped the DASH Referer header on direct MP4 streams to prevent CDN HTTP 429 throttling. Bumped the MovieBox stream cache schema to v2_ to discard stale cached deprecation notices. Filtered out unhosted MovieBox /hls/ signed cookie targets in manifest resolution, which stops unplayable H.264 stream entries from failing with HTTP 404 during downloads or media playback. Download Engine & Batch Queue: Fixed season batch downloads by arming is_waiting_for_download_stream during queue steps, eliminating immediate empty-list download calls that aborted multi-episode queues. Reset the download resolution state lock on 4KHDHub resolver timeouts and errors so failed mirror resolutions do not block subsequent download attempts. Added sequential single-connection fallback to the internal HTTP downloader when multi-worker segmented range requests receive HTTP 403, 429, or network disconnects. Added In-App Updater Lifecycle: Tracked target executable path before staging updates and resolved deleted inode suffixes ( (deleted)) on Linux to restart the new binary automatically after popup self-update. Scoped Snap package detection to SNAP_NAME matching moviebox-tui to prevent false positive Snap environment detection when launched inside unrelated host sandboxes. Changed Dependencies & Build Infrastructure: Upgraded zip to 9.0.5, rustls to 0.23.46, quinn-proto to 0.11.19, rustls-webpki to 0.103.16, and webpki-roots to 1.0.10, resolving RustSec security advisories. Upgraded sha2 to 0.11 with chunked streaming hash updates, preserving non-blocking checksum verification for release archives. Upgraded dirs to 7.0, futures to 0.3.34, and zip to 8.6 across platform config paths, async tasks, and updater archive extraction. @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.4 2026/10/01 11:50:01 pin Exp $ d3 1 a3 1 DISTNAME= MovieBox-Tui-0.1.27 d16 1 a16 1 WRKSRC= ${WRKDIR}/MovieBox-Tui-0.1.27 @ 1.4 log @multimedia/moviebox-tui: update to 0.1.26 Fixed Media Playback & Subtitle Engine: Preserved native Windows \ path separators for --sub-file in VLC (C:\...) and passed --no-one-instance on Windows and Linux so running VLC windows keep subtitle, header, and resume flags. Stripped query strings and fragments before parsing subtitle extensions (.srt, .vtt, .ass, .ssa, .sub) so signed CloudFront and OSS URLs keep their true format and DASH MIME type. Pre-downloaded subtitles locally for mpv with remote URL fallback, parallelized subtitle downloads with StreamRelay sidecar startup, appended an 8-char URL hash to subtitle filenames, and sanitized commas in --script-opts. Mounted xdg-cache/moviebox-tui:ro, xdg-data/moviebox-tui, and /tmp:ro in flatpak run while keeping custom user Flatpak flags so sandboxed mpv and VLC can read subtitles and write watch progress. Served Termux private-storage subtitles over the local StreamRelay /sub/ loopback endpoint when Android shared storage is unavailable, and restricted startup subtitle cleanup to internal cache and temp folders. Parsed player stderr and exit codes to report specific failure reasons (HTTP 403, HTTP 404, HTTP 410, timeout, connection refused), and added deterministic cross-platform contract integration tests (tests/player_contract.rs) asserting VLC Win32/UNC paths, IINA CLI option schemas, and header support across OSes. Unified IINA command construction with standard --mpv-* argument schemas across platforms, and restricted macOS IINA header disqualification to GUI app fallbacks missing command line tools. Standardized player display labels to uppercase acronyms (MPV, IINA, VLC) across player selection popups, settings, and notifications. StreamRelay Proxy & Downloader: Forwarded User-Agent and Referer while isolating stream cookies (Cookie: Edge-Cache-Cookie=...) to same-host requests across StreamRelay, subtitle pre-downloads, and media downloads. Capped .m4s segment chunk fetching in StreamRelay to batches of 16 concurrent Range requests, registered in-flight segment wait futures under lock, and required http:// or https:// schemes on /proxy?url= routes. Increased MovieBox DASH yt-dlp --concurrent-fragments from 8 to 32 (3.77 MiB/s -> 11.13 MiB/s, +195% live CDN throughput) and scaled the direct HTTP multi-segment engine to 4 to 16 workers with Range: bytes=0-0 size discovery, 1 MiB write buffers, and a single end-of-file sync_data flush. Reported specific subtitle and DASH download errors (HTTP status, timeout, missing yt-dlp vs ffmpeg) and matched "at" after "of" in yt-dlp progress lines. Providers & Disk Cache: Removed the broad "notice" substring filter in MovieBox stream adaptation while keeping /notice.mp4 and known deprecation hashes, which restores streams for titles like Red Notice and Burn Notice. Advanced the active MovieBox host index immediately on connection or HTTP retry errors, removed the duplicate /subject-api/resource preflight round-trip in InitStreamPool, and removed the 120ms delay on cached episode switches. Streamed 4KHDHub mirror resolution directly into preflight probes via FuturesUnordered without waiting for slow mirrors, cached fetched detail pages across details and releases in 4KHDHub, Dramachi, and CircleFTP, and bounded CircleFTP HEAD size probes to 1.2 seconds. Required a leading 'S' prefix in 4KHDHub season count parsing so release years after "Score" do not parse as season counts, and cached static HTML selectors in 4KHDHub parsers. Matched Dramachi episode numbers across Unicode boundaries and quality suffixes, parallelized Stremio addon movie/series catalog searches and M3U playlist loads, and inserted /manifest.json before query parameters in addon URLs. Evicted cached poster images only when file age exceeds the 30-day TTL so valid cache files survive minor clock skew. Replaced synchronous fsync barriers on ephemeral cache writes with atomic temp-file renames, cached default directory paths via LazyLock, reused a static HTTP client in probe_url, and shared Arc<[u8]> poster buffers across disk caching and decoding. Centralized Termux platform detection in core configuration and deduplicated base64 manifest policy parsing. TUI Navigation, Themes, Modals & Mouse: Validated Details and stream responses against each item's own provider so cross-provider items opened from Continue Watching, Favorites, /history, or /favorites load without hanging. Aborted in-flight caption and 4KHDHub mirror resolution tasks on Esc or GoBack so stale subtitle popups or players do not launch after leaving Details. Processed active Picker and Subtitle popups before the background loading guard on Enter, cleared queued season downloads when cancelling the download subtitle prompt or on stream failure, and reset TV input focus on overlay dismissal. Enabled /browse for Stremio Addons, reused in-memory addon state during stream resolution, skipped search pagination on active addon catalogs, and clamped initial cursor selection in empty TV and Addon manager modals. Synchronized Home and Details mouse hitboxes with the 3-row download gauge, narrow < 85 col selector panes, compact < 76 col bottom bar buttons, non-Stream footer [Enter] Select actions, and outside-click theme preview revert. Downgraded named themes in Theme::from_kind on 16-color (Basic) and NO_COLOR terminals, improved Latte light-mode contrast on selected badges and modal rows, and added ALACRITTY_SOCKET, KONSOLE_VERSION, TERMUX_VERSION, WT_SESSION, and TERM_PROGRAM graphics/TrueColor detection. Shortened toast notifications to show filenames instead of full paths and removed duplicate status-bar and toast alerts on compact terminals. Pruned conversational filler from terminal size warnings, language selection prompts, and package manager upgrade notices. @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.3 2026/09/30 17:09:21 pin Exp $ d3 1 a3 1 DISTNAME= MovieBox-Tui-0.1.26 d16 1 a16 1 WRKSRC= ${WRKDIR}/MovieBox-Tui-0.1.26 @ 1.3 log @multimedia/moviebox-tui: update to 0.1.25 Fixed Search Navigation & Pagination Engine: Gated background search pagination in src/tui/app/navigation.rs so arrow navigation on result sets smaller than the visible viewport never triggers background page fetches. Added search_exhausted tracking in src/tui/state.rs and src/tui/app/requests.rs, stopping pagination crawls when provider search returns fewer than 15 items or zero query-matching results. Preserved stable card slot positions during search pagination in src/tui/app/requests.rs by appending subsequent page items to the list rather than re-sorting the entire array out from under the cursor. Removed redundant "Provider: {name}" status message override from the search bar on provider switch in src/tui/app/navigation.rs, preserving the clean search placeholder while the active provider pill displays on the right. Media Playback & Buffering Engine: Prioritized native desktop media players (mpv, VLC) over Android intent openers in src/player.rs when an active X11/Wayland display server ($DISPLAY, $WAYLAND_DISPLAY) is detected, preventing Ubuntu Xfce (udroid/PRoot) and Termux:X11 desktop sessions from dispatching playback to external Android app choosers. Routed DASH .mpd streams through the local StreamRelay proxy (src/proxy.rs, src/tui/app/playback.rs) across all media players (mpv, IINA, VLC, AndroidIntent), caching rewritten .mpd manifests in RAM, warm-prefetching initialization and opening segments on sidecar startup, fetching .m4s segments via concurrent 95 KB HTTP Range sub-requests (0.286s per segment vs 3.120s), and prefetching both the next 3 video segments (N+1..N+3) and synchronized audio segments (chunk-stream3-N..N+1). Tuned mpv and IINA playback flags (--hwdec=auto-safe, --stream-buffer-size=4M, --cache-secs=120, --cache-pause-wait=3, --cache-pause-initial=no, and --ytdl=no on non-DASH direct streams) in src/player.rs, reducing 1080p cold-seek latency at 01:00:00 from 11.96s to 3.87s and boosting read-ahead buffer fill rate from 1 MB (9.3s) to 7 MB (53s). Replaced aggressive VLC buffering flags (--network-caching=10000, --adaptive-logic=nearoptimal) with --network-caching=3000, --file-caching=3000, --http-reconnect, and --adaptive-logic=predictive in src/player.rs to stop demuxer stream restarts and reconnect cleanly on dropped HTTP streams. Enforced max_height resolution limits in the loopback stream proxy manifest rewriter (src/proxy.rs, src/main.rs, src/tui/app/playback.rs), pruning representations exceeding the chosen ceiling so Android players and VLC respect 480p and 720p selections. Parsed signed expiration timestamps (:t=) from MovieBox Edge-Cache-Cookie headers in src/cache.rs alongside CloudFront policies, automatically invalidating stale stream cache entries within 60 seconds of expiration to prevent HTTP 403 playback crashes. Persisted selected stream filenames (stream_filename) in watch history (src/history.rs, src/player/tracker.rs, src/tui/app/playback.rs) and auto-focused matching stream rows on load (src/tui/app/requests.rs, src/tui/app/system.rs), restoring the user's previously chosen quality mirror when resuming multi-stream releases. Enabled TCP nodelay (stream.set_nodelay(true)) and per-chunk immediate flushes on the local StreamRelay proxy in src/proxy.rs, eliminating 100–300ms time-to-first-frame buffering delays on loopback sockets. Implemented negative caching (Option>) for media player detection (MPV_CACHED, VLC_CACHED, IINA_CACHED) in src/player.rs, eliminating redundant filesystem scans and registry lookups when players are absent. Throttled Lua tracker periodic disk sync in src/player/tracker.rs when playback is paused or positional change is sub-second, cutting SSD writes by up to 90% during playback pauses. Removed duplicate redundant history.save() calls in src/tui/app/playback.rs upon marking items watched. Defined local now = os.time() in src/player/tracker.rs before formatting playback state JSON in moviebox_tracker.lua and scoped initial PendingPlaybackState seed writes in src/tui/app/playback.rs strictly to PlayerKind::Mpv, preventing VLC, IINA, and AndroidIntent watch progress from resetting to 0 on player exit. Detached spawned media players and the StreamRelay sidecar into independent OS sessions via configure_detached_process (libc::setsid() + SIGHUP ignore on Unix, DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP on Windows) in src/player.rs, src/proxy.rs, and src/tui/app/playback.rs, redirected player stderr to temporary log files instead of parent pipes to prevent SIGPIPE crashes when the terminal closes, and reaped the sidecar immediately when desktop players exit while the TUI is open. Download Engine & Subprocess Diagnostics: Added preflight verification for ffmpeg alongside yt-dlp in src/tui/app/download.rs, failing fast with installation guidance when media muxing tools are missing. Captured child process stderr lines during DASH transfers to surface concrete yt-dlp error diagnostics instead of bare exit codes. Accelerated MovieBox DASH stream downloads from ~0.92 MiB/s to ~10.29 MiB/s by passing --http-chunk-size 95K and --concurrent-fragments 8 to yt-dlp with resilient retry policies (--fragment-retries 10, --retries 5, --socket-timeout 30) in src/tui/app/download.rs, resetting Alibaba Cloud Tengine's per-request limit_rate_after 96k rate-limiter across persistent Keep-Alive sockets. Refactored the direct HTTP multi-segment downloader in src/download.rs to pre-allocate the .part file and write segments in-place via positional SeekFrom::Start offsets (scaling concurrency to 4–12 workers down to 16 MB files), eliminating temporary .part.N files and the post-download .assembling full-file disk copy. TUI Rendering & Event Loop Performance: Expanded terminal standard output BufWriter capacity from 64 KB to 256 KB in src/main.rs, enabling atomic frame flushes and eliminating visual tearing during graphical Sixel and Kitty poster transfers. Replaced allocating to_string() hash set checks in src/favorites.rs with zero-allocation borrowed string comparisons in is_favorite, eliminating 400+ heap allocations per second during search grid rendering. Eliminated redundant 100ms idle tick redraws on static home screens in src/tui/app/system.rs, dropping idle CPU consumption to zero. Replaced per-card Layout::split invocations in src/tui/screens/home.rs with direct row arithmetic calculations, avoiding repeated layout solver overhead across search result slots. Rendered stream media tags (HDR, ATMOS, 5.1, HEVC, AV1, WEB-DL) in src/tui/screens/details.rs using styled surface pill spans and unified background modal dimming to theme.muted across render_media_tag_spans, resolution_badge_spans (src/tui/widgets/badge.rs), render_poster_placeholder (src/tui/widgets/poster.rs), Details headers (src/tui/screens/details.rs), and Home search result bars, cards, ratings, and history progress rows (src/tui/screens/home.rs). Replaced linear index iteration with exact O(1) HashSet lookups in FavoritesManager::is_favorite (src/favorites.rs). Guarded PopKeyboardEnhancementFlags in restore_terminal (src/main.rs) against Termux environments (!is_termux_environment()), preventing stray ANSI escape sequences from leaking into the Android Termux shell on exit. Routed Warning: and non-Home Action::SetStatus messages through toast notifications in src/tui/app/system.rs, src/tui/app/playback.rs, and src/tui/app/requests.rs, ensuring subtitle fallback notices, missing iina-cli warnings, and addon installation statuses remain visible on the Details screen and modal overlays. Unified notification card geometry and line-wrapping calculations in compute_notification_cards (src/tui/overlay.rs), eliminating duplicate layout passes between frame rendering and mouse click hit-testing. Provider Scraping & Concurrency Engine: Replaced chunked mirror resolution barriers in 4KHDHub (src/providers/fourkhdhub/client.rs, src/providers/fourkhdhub/hubcloud.rs) with HTTP 206 Partial Content seekability verification (preflight_with_seekable) and score-prioritized early termination (is_seekable && score <= 1), ensuring byte-range-seekable 10Gbps/R2/FSL mirrors are selected over unseekable HTTP 200 mirrors or quota-exhausted workers.dev links. Centralized disk-cached caption lookup and storage in MovieBoxService::get_ext_captions (src/service.rs) and parallelized primary and sibling dub caption fetches via tokio::join!, eliminating duplicate cache wrappers in src/tui/app/playback.rs and src/tui/app/requests.rs. Bound individual Stremio addon stream fetches in src/providers/addons/aggregator.rs with a 5-second timeout, preventing unresponsive third-party addons from blocking stream aggregation. Capped initial search poster scraping in DhakaFlix (src/providers/bdix/dhakaflix/client.rs) to the first 20 items, eliminating dozens of blocking HTTP POST requests on large catalog searches. Centralized MediaDetails::sibling_ids, human-readable file size parsing (parse_size_bytes), DASH URL detection (is_dash_url), yt-dlp format selectors (ytdlp_format_selector), download target path resolution (resolve_media_target), and cached poster fetching (MovieBoxService::fetch_and_decode_cached_poster) in their owning domain modules (src/providers/models.rs, src/player.rs, src/download.rs, src/service.rs), and removed src/tui/app/network.rs. Streamed poster HTTP responses via bounded chunk accumulation (5 MiB cap) in MovieBoxService::fetch_poster_bytes (src/service.rs) and added FallbackResolver DNS + Range: bytes=0-0 bounds to probe_url (src/net.rs). Storage & Disk Cache Engine: Optimized typed cache serialization in src/cache.rs using direct in-place encoding (rmp_serde::encode::write) into pre-seeded magic header buffers, eliminating intermediate vector allocations and duplicate memory copies. Pre-allocated file buffer capacity from file metadata in get_typed_cache in src/cache.rs, eliminating repetitive vector reallocations during cache reads. Offloaded atomic_write_file_async in src/cache.rs to tokio::task::spawn_blocking, switched src/logging.rs to WriteMode::BufferAndFlush with a LazyLock cached home directory path, centralized corrupt JSON file rotation (rotate_corrupt_file) in src/config.rs, and enabled cross-platform stale update artifact cleanup in src/updater/apply.rs. Isolated all unit and integration test runs into a per-process temporary sandbox (TEST_SANDBOX_DIR in src/config.rs) and guarded external browser launches (open_external_url in src/net.rs), preventing tests from modifying real user configuration, watch history, favorites, or disk cache files. Added unit and mock-server test coverage for 4KHDHub HTTP 206 seekable mirror prioritization, CircleFTP catalog mapping, DhakaFlix stream extraction, Addons concurrent stream aggregation and torrent filtering, TV UTF-8 BOM / HLS M3U parsing, IINA command construction, StreamRelay DASH sidecar warmup, non-mpv watch progress retention, and Action::SetStatus warning/modal toast routing. Changed TUI & Ergonomics: Remapped q / Q on Screen::Details in src/tui/app/keyboard.rs from application exit to Action::GoBack, preserving active search results and returning to the home screen without unexpected process termination. Standardized modal and popup dismissal across Settings, Providers, Browse Presets, Sources, Themes, Addons, and TV Config overlays to dismiss on both Esc and q. Reordered episode list label formatting in src/tui/screens/details.rs to compute prefix and progress badge widths before truncating episode titles, strictly preventing list item text overflow and jagged multi-line wrapping. Replaced ambiguous " ... [i]" plot synopsis truncation with an explicit " ... [i: More]" indicator in src/tui/screens/details.rs. Optimized stream table column constraints for ultra-compact terminals (<65 columns) in src/tui/screens/details.rs, compacting SIZE to 7 characters and reclaiming columns for release title readability on mobile viewports. Rendered cached IMDb rating badges across all visible search cards in src/tui/screens/home.rs by peeking preview_cache, enabling at-a-glance quality comparison across the grid without manual card-by-card selection. Collapsed empty [No Art] poster placeholder columns when image_supported is false in src/tui/screens/home.rs, expanding search card text and metadata across the full available column width on non-graphical terminals. Documentation & Cross-Platform Terminal Compatibility: Documented native Windows Terminal Sixel image support requirements (v1.22+ via Microsoft Store) in docs/cross-platform.md and README.md, clarifying that no third-party terminal or configuration is required on Windows. @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.2 2026/09/25 05:19:37 pin Exp $ d3 1 a3 1 DISTNAME= MovieBox-Tui-0.1.25 d16 1 a16 1 WRKSRC= ${WRKDIR}/MovieBox-Tui-0.1.25 @ 1.2 log @multimedia/moviebox-tui: update to 0.1.24 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). @ text @d1 1 a1 1 # $NetBSD: Makefile,v 1.1 2026/09/22 14:53:26 pin Exp $ d3 1 a3 1 DISTNAME= MovieBox-Tui-0.1.24 d16 1 a16 1 WRKSRC= ${WRKDIR}/MovieBox-Tui-0.1.24 @ 1.1 log @multimedia/moviebox-tui: import pkg Terminal interface to find, download, and stream movies, TV shows, and live TV using local media players. Features - On Demand Streaming: Stream movies, series, and anime across multiple providers and community Stremio addons. - Live TV and IPTV: Import custom M3U playlist URLs to search channels, browse categories, and stream live television. - Native Video Playback: Plays directly in your favorite player with smooth hardware acceleration. - Automatic Subtitles: Automatically searches and loads subtitles in your preferred language into your player. - Fast Downloads: Save single episodes or entire seasons to your computer with pause and resume support. - Visual Posters: Displays cover art and movie posters directly inside your terminal window. - Library and History: Bookmark your favorite titles and pick up watching right where you left off. - Custom Themes: Built in color themes and settings to match your personal terminal look and feel. @ text @d1 1 a1 1 # $NetBSD$ d3 1 a3 1 DISTNAME= MovieBox-Tui-0.1.23 d16 1 a16 1 WRKSRC= ${WRKDIR}/MovieBox-Tui-0.1.23 @