Commit graph

1213 commits

Author SHA1 Message Date
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
Nayif
f5a675d864
Merge pull request #1336 from halibiram/fix/hls-playback-unrecognized-format
fix(player): resolve unrecognized input format during HLS stream playback
2026-06-15 00:01:50 +05:30
BlackSpirits
2dd48d5393
fix(l10n): update Portuguese (Portugal) mobile strings 2026-06-14 17:30:50 +02:00
tapframe
2461ebf594 Fix collection catalog show more routing 2026-06-14 20:56:21 +05:30
tapframe
1a2eca2341 Share stream source pipeline and cards 2026-06-14 19:43:30 +05:30
tapframe
485e4e81e9 Remove stream warmup dead code 2026-06-14 18:58:37 +05:30
halibiram
b694fb3e72 fix(player): resolve unrecognized input format during HLS stream playback 2026-06-13 19:39:54 +03:00
tapframe
6188f700d6 Fix catalog pagination 2026-06-13 19:52:42 +05:30
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
1b6d4fdefa Stop prefetching streams on meta screen 2026-06-13 08:49:24 +05:30
tapframe
7cbd4503e6 Add touch gestures settings 2026-06-12 21:24:14 +05:30
tapframe
8ec9684f51 Make shelf view-all action icon-only 2026-06-12 21:08:39 +05:30
tapframe
f2c9978f76 Fallback to title text when logos are unavailable 2026-06-12 20:46:08 +05:30
tapframe
7f200c7c7d Loop home hero carousel navigation 2026-06-12 20:41:53 +05:30
tapframe
2ce0866b79 Keep shelf headers aligned without view all 2026-06-12 20:39:30 +05:30
tapframe
288794d22a Fix player source identity merge integration 2026-06-12 20:27:22 +05:30
tapframe
6344725d6b Merge remote-tracking branch 'origin/pr/1327' into cmp-rewrite
# Conflicts:
#	composeApp/src/commonMain/kotlin/com/nuvio/app/features/player/PlayerScreenRuntimeSourceActions.kt
2026-06-12 20:24:27 +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
4c778a0b38 Merge branch 'cmp-rewrite' of https://github.com/NuvioMedia/NuvioMobile into cmp-rewrite 2026-06-12 20:15:12 +05:30
Nayif
7edf120636
Merge pull request #1329 from anikettuli/fix/trakt-scrobble-bundle
fix(trakt): stop scrobbling the next episode as watched and surface save failures
2026-06-12 20:14:57 +05:30
tapframe
32a26951f7 Refresh watch progress when clearing CW cache 2026-06-12 20:07:28 +05:30
tapframe
142afd14a7 Fix tablet metadata action alignment 2026-06-12 19:14:08 +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
tapframe
c755ead445 Revert "Update player controls state"
This reverts commit 850988bf87.
2026-06-12 15:59:16 +05:30
Nayif
4322669a8b
Merge pull request #1306 from siriusvoid/fix/hold-autoplay-for-post-credits 2026-06-12 15:57:13 +05:30
Aniket Tuli
582e0ff40e refactor(trakt): snapshot scrobble item inputs through a single holder
The stop-scrobble path snapshots its inputs via
snapshotTraktScrobbleItemInputs() returning a TraktScrobbleItemInputs
holder instead of seven loose locals, so adding a field to the item
cannot silently miss the snapshot.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 03:03:41 -07:00
Aniket Tuli
a211d77017 fix: route torrent:// urls through torrent playback instead of the player
Addons that embed the torrent identity in the url field (torrent://<hash>[/<fileIdx>]) with a null infoHash were treated as direct HTTP streams: playableDirectUrl surfaced the raw torrent:// string to the player, isTorrentStream missed it so debrid never engaged, and p2pInfoHash could not extract a hash so the p2p engine never engaged. Equivalent of NuvioTV#2174: classify torrent:// URLs as torrents, never surface them as playable, extract a validated info hash (40-char hex or 32-char base32) and trailing file index for the p2p path, and build proper magnet URIs for debrid from the effective hash. torrent://null and other unextractable URLs yield a null hash and stay unselectable.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 02:49:20 -07:00
Aniket Tuli
0e5ba830d2 fix: stop scrobbling next episode as watched and surface Trakt save errors
Fixes #1196
Fixes #1192

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 02:37:10 -07:00
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
siriusvoid
539ec44a6d ref: clean up constants unused after threshold change 2026-06-11 19:04:25 +00:00
siriusvoid
4d811c2071 fix: take user's threshold when calculating post credit scene 2026-06-11 14:33:11 +00:00
tapframe
4eb919df71 Make mobile home catalog sync pull-only on startup 2026-06-11 13:32:45 +05:30
tapframe
5249614b50 feat: catalog order to be cross-platform 2026-06-11 13:00:46 +05:30
tapframe
850988bf87 Update player controls state 2026-06-11 03:00:51 +05:30
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
Nayif
a0a97325e4
Merge pull request #1314 from skoruppa/port/trakt-non-standard-ids
Fix Trakt scrobble for non-standard IDs
2026-06-11 01:50:24 +05:30
tapframe
cc7c4eedf6 Fix header touch handling
Fixes #1187

Fixes #1210

Fixes #1251
2026-06-11 01:45:57 +05:30
tapframe
3bcf74dd75 Fix collection view all genre filter
Fixes #1264
2026-06-11 01:35:08 +05:30
tapframe
e7e6e333e6 Fix continue watching prompt during playback
Fixes #1273
2026-06-11 01:28:12 +05:30
tapframe
f065e27203 Merge branch 'cmp-rewrite' of https://github.com/NuvioMedia/NuvioMobile into cmp-rewrite 2026-06-11 01:27:31 +05:30
Nayif
138089922a
Merge pull request #1302 from DynamycSound/fix/trakt-watchlist-recently-added-order
fix(trakt): restore recently-added order for Trakt watchlist
2026-06-11 01:24:06 +05:30
tapframe
b5389915a4 Fix shared mobile regression checks 2026-06-11 01:17:33 +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
34c565e89f Merge branch 'cmp-rewrite' of https://github.com/NuvioMedia/NuvioMobile into cmp-rewrite 2026-06-10 22:02:17 +05:30
tapframe
83e475d23d refactor(MetaDetailsScreen): replace vertical scroll with lazy column 2026-06-10 20:05:39 +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