Commit graph

354 commits

Author SHA1 Message Date
tapframe
749917bcd7 fix: source change not recreating playback
fixes #1421
2026-06-26 23:40:21 +05:30
tapframe
d6a0d2da52 ref: rename files 2026-06-26 22:53:12 +05:30
tapframe
9d32d238f4 fix: libmpv ass override.
fixes #1403
2026-06-24 19:55:30 +05:30
tapframe
3c1bdd3e18 update proguard rules and bump version 2026-06-22 21:12:43 +05:30
tapframe
6e815b91ed feat: libmpv engine for android 2026-06-22 20:43:12 +05:30
Nayif
f3128f369b
Merge pull request #1370 from VenusIsJaded/fix/android-7-lets-encrypt
fix: Let's Encrypt trust on Android 7
2026-06-22 19:53:26 +05:30
tapframe
7c7ab57334 Merge branch 'cmp-rewrite' into cmp 2026-06-22 19:04:48 +05:30
Nayif
bff4fa798d
Merge pull request #1141 from jhojhocraazy/cmp-rewrite
i18n(pt-BR): Add complete Brazilian Portuguese
2026-06-22 18:18:42 +05:30
Nayif
d7eea90691
Merge pull request #1386 from Joe00011/feat/japanese-translation
feat: Add Japanese language support
2026-06-22 18:16:40 +05:30
Nayif
1441797d3e
Merge pull request #1259 from WhiteGiso/pr/liquid-glass-profile-switch
feat(ios): improve liquid glass profile switching
2026-06-22 18:15:52 +05:30
VenusIsJaded
0bfd086917 fix: ExoPlayer unpausing when leaving the app and coming back
The LifecycleEventObserver was only capturing playWhenReady at the
time the effect ran. When ON_START fired later, it would use the old
value and resume playback even if the user had paused before leaving
the app.

Use rememberUpdatedState so we always read the live value.

Fixes #1080
2026-06-22 07:16:03 -05:00
VenusIsJaded
cc89e07eed fix: Let's Encrypt trust on Android 7 2026-06-22 05:38:31 -05:00
Joe00011
cb8072b470
Add Japanese locale to locale_config.xml 2026-06-21 15:44:55 +09:00
Nayif
f6ce3f63d4
Merge pull request #1364 from skoruppa/cmp-rewrite
original audio parity with TV and fix for debrid instant download + Polish Translation Update
2026-06-20 18:16:18 +05:30
tapframe
18305062a1 fix: adjust buffer duration 2026-06-20 15:41:18 +05:30
skoruppa
d52491d0b8 Merge remote-tracking branch 'upstream/cmp-rewrite' into cmp-rewrite
# Conflicts:
#	composeApp/src/commonMain/kotlin/com/nuvio/app/App.kt
2026-06-19 21:54:07 +02:00
paregi12
4c667e402f
Merge branch 'NuvioMedia:cmp-rewrite' into cmp 2026-06-19 19:46:08 +05:30
tapframe
963ace0211 update dependencies. 2026-06-19 16:18:32 +05:30
paregi12
fadf8e2831 Merge remote-tracking branch 'upstream/cmp-rewrite' into cmp
# Conflicts:
#	composeApp/src/commonMain/kotlin/com/nuvio/app/App.kt
2026-06-19 08:34:04 +05:30
tapframe
aa2a074578 Fix profile-scoped playback sync leaks 2026-06-19 00:05:14 +05:30
WhiteGiso
18d004ffe0 Add native liquid glass profile tab handling 2026-06-18 15:57:31 +02:00
skoruppa
311da87592 feat: add Original Audio language option with TMDB enrichment
- Add AudioLanguageOption.ORIGINAL to preferred audio language picker
  (primary and secondary) with hint 'Requires TMDB enrichment'
- Resolve content original language from meta.language with fallback
  to country-based inference (countryToLanguageCode mapping)
- Pass contentLanguage through PlayerLaunch, PlayerScreen, and
  StreamLinkCache for reuse on subsequent playback sessions
- Add Device Language as default app language option (resets to system
  locale instead of forcing English)
- Add all missing Polish translations (417 strings)
- Add LanguageSelectionOption.description support in settings dialogs
2026-06-18 14:46:31 +02:00
paregi12
e3bea52462
Merge branch 'NuvioMedia:cmp-rewrite' into cmp 2026-06-18 16:40:57 +05:30
tapframe
4a883a1add Add runtime sync backend switch 2026-06-17 23:29:00 +05:30
paregi12
baaf8f9a8b Merge upstream/cmp-rewrite into cmp 2026-06-15 20:22:32 +05:30
WhiteGiso
53d600768f
Merge branch 'cmp-rewrite' into pr/liquid-glass-profile-switch 2026-06-15 10:09:40 +02: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
paregi12
acdfefc2ac Merge upstream/cmp-rewrite into cmp 2026-06-11 02:21:44 +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
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
paregi12
8f991d2912
Merge branch 'NuvioMedia:cmp-rewrite' into cmp 2026-06-10 21:47:35 +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
paregi12
b08144d7a7
Merge branch 'NuvioMedia:cmp-rewrite' into cmp 2026-06-10 01:28:51 +05:30
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
paregi12
4fb6457f20 Merge remote-tracking branch 'upstream/cmp-rewrite' into cmp
# Conflicts:
#	composeApp/src/androidMain/kotlin/com/nuvio/app/features/player/PlayerEngine.android.kt
2026-06-09 02:48:44 +05:30
tapframe
ab9fdc571a Merge branch 'cmp-rewrite' into desktopweb 2026-06-09 02:02:13 +05:30