Commit graph

216 commits

Author SHA1 Message Date
tapframe
50bb2bcc52 fix: bound generic Android raw responses 2026-07-18 03:40:53 +05:30
Aniket Tuli
7fa0c5fab7 fix: stop truncating raw HTTP bodies on Android so Torbox cloud library loads
Android httpRequestRaw capped response bodies at 1 MiB and appended a
truncation marker, corrupting large Torbox mylist JSON. The decode error
was swallowed, so the cloud library rendered as silently empty. Read the
full body like iOS/desktop already do, and surface undecodable Torbox
list responses as a provider error instead of an empty library.

Fixes #1216

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-17 00:13:46 -07:00
Nayif
aaa3ab9f64
Merge pull request #1322 from foXaCe/feat/extract-hardcoded-strings-pass6
i18n(fr): full FR parity + extract residual hardcoded strings (pass 6)
2026-06-15 00:02:56 +05:30
halibiram
b694fb3e72 fix(player): resolve unrecognized input format during HLS stream playback 2026-06-13 19:39:54 +03:00
Stéphane
75f9b46818 i18n(fr): full FR parity + extract residual hardcoded strings (pass 6)
Rebased on current cmp-rewrite, then reconciled and extended.

- Restored full EN<->FR parity: 1854/1854, 0 missing/orphan/duplicate keys.
- Reconciled post-rebase drift from the desktopweb revert: removed 5 FR
  orphans (desktop navigation, about version format) and the now-dead
  desktop P2P string + localizedP2pNotAvailableDesktop() helper whose call
  site was deleted upstream; added the 2 new touch-gestures translations.
- Extracted 11 residual hardcoded user-facing strings via stringResource and
  the LocalizedUiText.resourceString / localizedString(StringResource)
  patterns:
    - 9 Trakt library-sync error messages (TraktLibraryRepository)
    - P2P unknown torrent error (P2pStreamingEngine.android)
    - "More actions" detail action-menu contentDescription (DetailActionButtons)
- FR aligned with existing keys for consistency (request failed, rate limit,
  watchlist). Technical terms kept (Trakt, P2P, badge, URL). Tutoiement,
  apostrophes typographiques. MPVKit submodule pointer untouched.
2026-06-13 08:47:12 +02:00
tapframe
7cbd4503e6 Add touch gestures settings 2026-06-12 21:24:14 +05:30
tapframe
e897ec2e9a Merge remote-tracking branch 'origin/pr/1326' into cmp-rewrite
# Conflicts:
#	composeApp/src/commonMain/kotlin/com/nuvio/app/features/player/PlayerScreenRuntimeSourceActions.kt
#	composeApp/src/desktopMain/kotlin/com/nuvio/app/features/player/PlayerEngine.desktop.kt
2026-06-12 20:21:52 +05:30
tapframe
1c7d6acd9b Revert "Merge branch 'desktopweb' into cmp-rewrite"
This reverts commit b420dcaf71, reversing
changes made to fdadc7c610.
2026-06-12 16:03:28 +05:30
Aniket Tuli
fe747ffc3e fix(player): normalize declared stream type at ingestion
streamType is now trimmed, lowercased, and blanked to null by a shared
normalizeStreamType helper at all four ingestion sites, and the player
derives a single normalized value for both its rebuild keys and MIME
inference, so values like " HLS " cannot cause key churn or missed
mappings. The helper lives in commonMain and is covered by commonTest
together with a parser round-trip for a padded uppercase type.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 17:02:22 -07:00
Aniket Tuli
3d52716770 fix(player): honor declared stream type for HLS without .m3u8 URLs
Plugin scrapers (and some non-standard addons) declare the manifest
format of their links via a "type" field ("hls", "dash") on the
stream object. PluginRuntime already parses it into
PluginRuntimeResult.type, but both toStreamItem conversions dropped
it, and PlayerEngine.android.kt built MediaItems with no MIME type,
leaving ExoPlayer to infer the format from the URL extension. For
HLS links whose URL hides the .m3u8 behind tokens or rewriters
(https://cdn.example.com/playlist?token=…), inference fails and
playback errors or stalls.

This change:
- Adds a streamType field to StreamItem, populated from stream.type
  in StreamParser, MetaDetailsParser embedded streams, and both
  PluginRuntimeResult.toStreamItem conversions (StreamsRepository and
  PlayerStreamsRepository).
- Plumbs the value through PlayerLaunch / PlayerScreen /
  PlatformPlayerSurface and the in-player source-switch paths.
  Switches to P2P sentinels and downloaded local files reset the
  value to null so a stale "hls" can never mislabel the next source.
  streamType participates in the player rebuild keys so a source
  change always rebuilds with the right MIME.
- Persists streamType in the Reuse Last Link cache (defaulted
  serializable field, old payloads stay decodable) so a typed HLS
  stream that played once keeps working through link reuse.
- In playbackMediaItemFromUrl, the declared type takes precedence
  over response-header and URL-path inference, mapping "hls"/"m3u8" →
  APPLICATION_M3U8, "dash"/"mpd" → APPLICATION_MPD,
  "ss"/"smoothstreaming" → APPLICATION_SS. Unrecognized values
  (including Stremio's content-type semantics like "movie"/"series")
  fall through to the existing inference chain unchanged.

The official Stremio stream spec defines no top-level type field, so
the Stremio-addon parsing is best-effort; the reliable emitters are
plugin scrapers, whose results previously lost the field entirely.

Scopes down to #1244 only. #1246 (User-Agent override) is already
fixed in the current PlayerPlaybackNetworking.createHttpDataSourceFactory,
which skips setUserAgent when caller-supplied headers declare one.

Fixes #1244

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 16:26:15 -07:00
Nayif
ee5c923091
Merge pull request #1313 from skoruppa/cmp-rewrite
Download subtitles locally before passing to external players
2026-06-11 01:51:45 +05:30
tapframe
820a1344e3 Revert "Merge branch 'toropt' into cmp-rewrite"
This reverts commit dcf4d059f6, reversing
changes made to 350250cb60.
2026-06-11 00:47:21 +05:30
tapframe
3308a60528 Merge branch 'cmp-rewrite' into desktopweb 2026-06-11 00:34:38 +05:30
tapframe
2b2d1f56ad Fix Android process-death recovery
Persist pending debrid device-code authorization so returning from the browser after Android process death can continue polling the same session.

Recover cached profiles during auth rehydration instead of briefly dumping users to login after background kills.

Include debrid and downloads preferences in local account cleanup on sign-out.
2026-06-11 00:28:00 +05:30
tapframe
330d2537d9 Merge branch 'cmp-rewrite' into desktopweb 2026-06-10 18:22:33 +05:30
skoruppa
860e5e4e2c Add option to enable addons logo in stream screen 2026-06-10 14:46:48 +02:00
skoruppa
becf580a49 Download subtitles locally before passing to external players 2026-06-10 12:41:15 +02:00
Nayif
2c39f09a84
Merge pull request #1297 from DynamycSound/fix/app-language-persist-across-profile-sync
fix(android): keep app language out of per-profile settings sync
2026-06-10 01:14:10 +05:30
tapframe
84cc669bd5 feat: sidebar for desktop 2026-06-09 23:10:01 +05:30
tapframe
8f7552fa61 feat: Add desktop image scaling support to NuvioAsyncImage 2026-06-09 17:05:08 +05:30
tapframe
ab7fc0d1f9 feat: Implement NuvioAsyncImage for cross-platform image loading
- Added NuvioAsyncImage implementation for Android and iOS platforms.
- Refactored existing AsyncImage usages to utilize NuvioAsyncImage across common components.
- Introduced a desktop-specific implementation of NuvioAsyncImage with enhanced bitmap handling.
- Updated image loading logic to support placeholder, error, and fallback images.
- Ensured consistent API across platforms with default parameters for better usability.
2026-06-09 17:05:08 +05:30
tapframe
ab9fdc571a Merge branch 'cmp-rewrite' into desktopweb 2026-06-09 02:02:13 +05:30
tapframe
88a474a437 Fix credentialed HLS playback refresh 2026-06-09 02:01:23 +05:30
tapframe
d196902b24 feat: secondary click instead of hold 2026-06-08 20:58:41 +05:30
tapframe
37d56888e2 feat: stablilise edr 2026-06-08 17:03:16 +05:30
tapframe
56885309ae feat: loading overlay for webview 2026-06-08 15:39:12 +05:30
tapframe
cab08c5416 ref: moving sub/audio selection logic to webview 2026-06-08 14:10:46 +05:30
DynamycSound
36052f99fc
fix(android): keep app language out of per-profile settings sync 2026-06-08 04:32:04 +00:00
tapframe
0b5e409372 feat: player ui parity phase 2 2026-06-08 04:13:23 +05:30
tapframe
8ecb392c74 ref: design tokens 2026-06-08 01:38:47 +05:30
tapframe
daac198e1b feat(badges): change pos - top,bottom 2026-06-07 03:09:29 +05:30
tapframe
ab5415f477 feat: clear cw cache 2026-06-06 23:31:32 +05:30
tapframe
406ef99cfc feat(MPV): Spatial Audio for ios 2026-06-06 21:48:35 +05:30
tapframe
13fe6090c6 cleanup logs 2026-06-04 16:25:51 +05:30
tapframe
20b1fd5408 feat(p2p):preload functionality 2026-06-04 16:09:56 +05:30
tapframe
47e110f582 Refactor P2P streaming implementation and enhance torrent metadata handling
- Updated MainAppContent to use p2pFileIdx and p2pFilename for improved torrent handling.
- Enhanced P2pStreamRequest to include magnetUri for better P2P stream requests.
- Modified PlayerLaunch and PlayerScreen to accommodate new torrentMagnetUri parameter.
- Improved StreamItem to extract P2P metadata from clientResolve when top-level fields are missing.
- Added tests for StreamItem to validate P2P metadata extraction logic.
- Introduced warmup and shutdown methods in P2pStreamingEngine for better state management.
- Created build script for TorrServer Android binaries and updated APK installation logic.
2026-06-04 15:55:25 +05:30
tapframe
16dcac85f0 feat: toggle for size badge, localise some hardcoded strings 2026-06-01 16:13:23 +05:30
tapframe
c225f9aacb Merge branch 'cmp-rewrite' of https://github.com/NuvioMedia/NuvioMobile into cmp-rewrite 2026-05-31 15:49:19 +05:30
Nayif
9d279e95f7
Merge pull request #1201 from guuilp/cmp-rewrite
perf(trakt): reduce sync time from 74s to <3s via on-the-fly remapping
2026-05-31 15:48:48 +05:30
tapframe
df15c4d2f2 feat: support streambadges globally 2026-05-31 15:41:40 +05:30
tapframe
d757f1baed Merge branch 'pr/1211' into cmp-rewrite
# Conflicts:
#	composeApp/src/commonMain/kotlin/com/nuvio/app/App.kt
2026-05-31 14:49:00 +05:30
tapframe
55eb5ea2eb Merge branch 'cmp-rewrite' into skoruppa/cmp-rewrite 2026-05-31 14:06:35 +05:30
Guilherme Lima Pereira
73e97fc9b0 perf(trakt): reduce sync time from 74s to <3s via on-the-fly remapping 2026-05-30 07:58:45 -03:00
tapframe
1c9ae760d9 Avoid blocking P2P teardown 2026-05-30 03:08:26 +05:30
tapframe
f14104bcfd Clear P2P settings on account wipe 2026-05-30 02:15:47 +05:30
tapframe
5a47d1fe56 Add P2P playback integration 2026-05-30 02:09:23 +05:30
tapframe
1213e81393 Add Android P2P assets 2026-05-30 01:30:52 +05:30
skoruppa
464cfb3059 Port improved external players support 2026-05-29 11:38:11 +02:00
tapframe
388dcbdf0f Merge branch 'feat/i18n-fr-consolidated' into cmp-rewrite 2026-05-29 03:08:30 +05:30
tapframe
e36baa60ff feat: support for fusion filter tags for cloud streams 2026-05-29 01:27:43 +05:30