Commit graph

1459 commits

Author SHA1 Message Date
tapframe
50bb2bcc52 fix: bound generic Android raw responses 2026-07-18 03:40:53 +05:30
Aniket Tuli
250d9d79cf fix(cloud): guarantee an error message for failed Torbox responses
The failure path now falls back to a message carrying the HTTP status
when the body has no detail/error and the raw body is blank, and the
large mylist fixture moves to TorboxCloudLibraryFixtures.kt so the
test file stays scannable.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-17 00:13:47 -07:00
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
tapframe
521ba187f4 bump version 2026-06-15 00:29:47 +05:30
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
Nayif
f06650b89f
Merge pull request #1345 from halibiram/fix/jni-local-ref-overflow
build: update quickjs-kt library AAR with JNI optimizations and leak …
2026-06-15 00:01:23 +05:30
Nayif
d6487d6f74
Merge pull request #1347 from Blackspirits/patch-1
fix(l10n): update Portuguese (Portugal) mobile strings
2026-06-15 00:01:13 +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
09afea7c35 Fix needs-info log section parsing 2026-06-14 19:50:53 +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
94e3cf8acd build: update quickjs-kt library AAR with JNI optimizations and leak fixes 2026-06-14 13:19:41 +03:00
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
639a99fd80 bump version 2026-06-12 21:35:48 +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
Nayif
c3aa1e8055
Merge pull request #1293 from DynamycSound/fix/collection-view-all-genre-filter
fix(collections): preserve catalog genre filter on View All
2026-06-12 20:36:07 +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
21f1f1ebc4 revert readme
fixes #1320
2026-06-11 13:09:56 +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
tapframe
074fdafe6e bump version 2026-06-11 02:30:25 +05:30
tapframe
ed7da63eb2 Improve bug report triage requirements 2026-06-11 01:59:22 +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