_type: issue

title: Native player controls captions and close flow

description: Add and validate VLC-backed native playback transport controls, subtitle track controls, external subtitle discovery, and Stremio Web close cleanup after native playback dismisses.

status: closed

issue_type: feature

assignee: dirtydishes

created_by: dirtydishes

close_reason: Implemented and validated native player controls, subtitle handling refinements, and close-flow cleanup.


title: Fix native player controls tap-to-show

description: Native player controls can be hidden by tapping, but subsequent taps on the player do not bring them back. Investigate the overlay gesture handling and restore reliable tap-to-show/tap-to-hide behavior.

issue_type: bug

close_reason: Closed


title: Fix MobileVLCKit linker dependency

description: Dreamio fails to link because the MobileVLCKit framework is not found. Investigate how the dependency is configured and update the repository so the framework is available to Xcode builds.

close_reason: Fixed MobileVLCKit linker failures by preparing the XCFramework slice before app linking and preserving the integration through pod install.


title: Guard native playback when MobileVLCKit is unavailable

description: Dreamio can currently present its native player from raw xcodeproj builds where MobileVLCKit is not linked, which leads to the fallback backend message instead of an actionable setup path. Add a runtime/build availability check, document the CocoaPods workspace requirement, and validate the fallback remains buildable.

close_reason: Added native backend availability guard, installed CocoaPods, generated workspace metadata, documented setup, and validated available checks.


title: Fix URL redaction crash on percent-encoded paths

description:
## Why
Dreamio can crash while logging WebKit navigation and playback URLs because URLRedactor writes raw replacement text back into URLComponents.percentEncodedPath.

## What needs to be done
- Update URL redaction to avoid assigning invalid characters to percentEncodedPath
- Preserve token/path redaction behavior for diagnostics
- Add a regression test covering percent-encoded path input similar to the Stremio crash logs

## Acceptance criteria
- Redacting a URL with percent-encoded path segments does not crash
- Diagnostics still remove query strings/fragments and redact token-like path segments
- Tests cover the regression


title: Resolve final media URLs before native playback

description: Dreamio native playback can pass addon resolver URLs into VLC instead of the final direct media URL. Resolve known Stremio addon stream responses before presenting the native player, preserve needed headers, and make startup failure recoverable.

close_reason: Resolved native playback stream URLs before opening VLC, added resolver selection tests, and documented validation limits.


title: Fix native playback build blockers

description: Correct Swift string escaping for the injected stream bridge and allow the VLC backend source to compile before MobileVLCKit is installed by guarding the import with canImport.

close_reason: Fixed Swift raw string escaping and guarded MobileVLCKit import for builds before pod install.


title: Add native playback for direct debrid streams

description: Implement a WKWebView JavaScript bridge that detects direct-file debrid media URLs and routes unsupported containers to a native player backend, initially MobileVLCKit, while preserving normal Stremio Web playback for compatible streams.

close_reason: Implemented native direct-stream bridge, classification, MobileVLCKit backend wiring, CocoaPods workflow docs, and turn documentation. Full iOS build is blocked locally by missing CocoaPods and iPhoneOS SDK.


title: Fix iOS bundle identifier install failure

description: Xcode built Dreamio.app without a valid CFBundleIdentifier, causing device install to fail with CoreDeviceError 3000/3002. Investigate project bundle settings, fix the source configuration, validate the app bundle Info.plist, and document the change.

close_reason: Added bundle metadata to Info.plist and validated processed app bundle identifier.


title: Build WKWebView MVP shell

description: Create the first Dreamio MVP implementation: a minimal iOS WKWebView wrapper around hosted Stremio Web, with configuration, launch behavior, diagnostics, and documentation for real-device viability testing.

acceptance_criteria: App project exists; WKWebView loads hosted Stremio Web; external/new-window navigation is handled; basic diagnostics and manual test documentation exist; quality gates are run or documented.

close_reason: Implemented the MVP WKWebView iOS shell, added run and validation documentation, and recorded current validation limits.


title: Make caption selection states clearer

description: The native player caption menu should behave like a simple single-choice menu with None and loaded caption tracks, making the current caption state visually obvious.

issue_type: task

close_reason: Implemented captions as a single-choice menu with None and selected loaded tracks, updated tests and turn documentation.


title: Streamline native player controls

description: Make the native playback controls take up less screen space while preserving play, seek, jump, captions, and close actions.

close_reason: Streamlined native player controls into a compact bottom overlay and validated the simulator build.


title: Add native player controls and captions

description: Implement a fuller VLC-backed native playback surface with transport controls, caption controls, external subtitle discovery, and a clean close flow back to Stremio episode selection.

close_reason: Implemented native VLC player controls, caption controls, subtitle candidate discovery, and close-flow cleanup.


title: Enable WebView inspection and playback diagnostics

description: Add development-only WKWebView inspection and token-safe playback diagnostics so Dreamio can debug hosted Stremio media failures without changing app navigation, login, or playback behavior.

close_reason: Implemented debug-only WKWebView inspection, token-safe playback diagnostics, navigation logging, validation build, and turn documentation.


title: Track HTML diff rendering tooling as dev dependency

description: Move the HTML diff rendering package into devDependencies and ignore installed Node modules so the repo tracks reproducible tooling without vendoring dependencies.

close_reason: Moved @pierre/diffs to devDependencies and ignored node_modules.