Commit graph

403 commits

Author SHA1 Message Date
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
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
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
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
siriusvoid
bdc05843b9 feat: add "Content Warnings" toggle from tv version 2026-06-08 03:38:33 +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
paregi12
8b2df4b2d9 Merge remote-tracking branch 'upstream/cmp-rewrite' into cmp and resolve conflicts 2026-06-07 12:37:57 +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
WhiteGiso
3a87ecce0f feat(ios): rapid profile switch for liquid glass 2026-06-06 00:04:26 +02:00
paregi12
34cde02a18
Merge branch 'NuvioMedia:cmp-rewrite' into cmp 2026-06-05 16:51:15 +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
paregi12
f636f71e1a
Merge branch 'NuvioMedia:cmp-rewrite' into cmp 2026-06-02 15:49:37 +05:30
tapframe
16dcac85f0 feat: toggle for size badge, localise some hardcoded strings 2026-06-01 16:13:23 +05:30
paregi12
19c6059855 Merge remote-tracking branch 'upstream/cmp-rewrite' into cmp
# Conflicts:
#	composeApp/src/commonMain/kotlin/com/nuvio/app/features/player/PlayerScreen.kt
#	composeApp/src/commonMain/kotlin/com/nuvio/app/features/streams/StreamModels.kt
#	composeApp/src/fullCommonMain/kotlin/com/nuvio/app/features/plugins/PluginRuntime.kt
2026-05-31 18:17:51 +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
paregi12
23afaf9ad7 Merge remote-tracking branch 'upstream/cmp-rewrite' into cmp
# Conflicts:
#	composeApp/src/androidMain/kotlin/com/nuvio/app/features/player/PlayerEngine.android.kt
2026-05-28 08:21:03 +05:30
tapframe
bbbb852946 fix: persist audiotrack on stream reload
fixes #1163
2026-05-27 11:31:54 +05:30
tapframe
0c0c616bed fix: persist audiotrack on stream reload
fixes #1163
2026-05-27 11:31:54 +05:30
tapframe
2fc6a925a1 feat: adding subtitle delay, styles management. 2026-05-27 00:25:23 +05:30
tapframe
47c494b261 feat: adding subtitle delay, styles management. 2026-05-27 00:25:23 +05:30
Stéphane
a258b8c12e i18n(fr): extract platform stubs + audit FR quality (pass 4)
Extract hardcoded strings (23 sites in 9 platform-specific files):
- AppUpdaterPlatform stubs (iOS, Desktop, Android Playstore)
- PluginRepository stubs (iOS App Store, Android Playstore) + main fullCommonMain
- AddonRepository.normalizeManifestUrl require message
- CollectionEditorRepository dynamic titles (TMDB Collection/List/Production/
  Network/Person/Director + Trakt List fallback)
- ExternalPlayerPlatform.android.kt (Android system player label)

New keys added (2):
- collections_editor_trakt_list_title_format (Trakt List %1$s)
- external_player_android_system (Android system player)

Reused existing keys (8): updates_not_available, plugins_error_unavailable_build,
plugins_error_enter_valid_url, plugins_error_provider_not_found,
plugins_error_enter_repo_url, addons_error_enter_url, and 6 tmdb_*_title_format.

Audit FR quality (1719 strings) — 26 corrections + 68 apostrophe normalizations:
- Fix 3 residual vouvoiement (Controlez/Enrichissez/Programmez → tu)
- Fix 2 imperative conjugations (Parcoure→Parcours, Inclut→Inclus)
- Fix 2 placeholder type bugs (%1$d→%1$s where String input)
- Fix 1 trailing space, 1 double negation calque
- Harmonize "Plus comme ceci"→"À voir aussi", flux→stream, Jun/Jul→Juin/Juil.,
  rate limit "debit"→"requetes", "Crédits de personne TMDB"→"Crédits TMDB de la personne"
- Improve 7 anglicisms (en focus→focus sur, indice→indication UI, etc.)
- Normalize 68 lines: ' → ’ typographic (192 typo / 0 droite)

Parity EN ↔ FR: 1719 strings, 2 plurals.
Builds: composeApp:compileFullDebugKotlinAndroid + compilePlaystoreDebugKotlinAndroid
both SUCCESSFUL. xmllint OK on both XML files.

Merged origin/cmp-rewrite to integrate PR #1173 (release alert badge + dropped-show
filtering for CW section), resolving conflicts in strings.xml EN+FR.
2026-05-25 21:12:33 +02:00
Stéphane
6ef8c42065 merge: PR #1025 feat(i18n) extract remaining hardcoded strings
Resolved conflicts in values/strings.xml and values-fr/strings.xml
by concatenating both blocks (no duplicate keys).
2026-05-24 09:41:28 +02:00
paregi12
7e03c3d065 Merge branch 'upstream/cmp-rewrite' into cmp and resolve conflicts 2026-05-23 16:31:53 +05:30
tapframe
8815bfcf4d Merge branch 'cmp-rewrite' of https://github.com/NuvioMedia/NuvioMobile into cmp-rewrite 2026-05-22 20:34:27 +05:30
tapframe
2fa1c87ae7 Merge branch 'cmp-rewrite' of https://github.com/NuvioMedia/NuvioMobile into cmp-rewrite 2026-05-22 20:34:27 +05:30
tapframe
023c26070a feat: add support for addon enable/disable flag 2026-05-22 17:48:48 +05:30
tapframe
ba5f460002 feat: add support for addon enable/disable flag 2026-05-22 17:48:48 +05:30
tapframe
a1a9b10807 Merge branch 'cwtest' into stripdebrid 2026-05-22 16:42:04 +05:30
tapframe
2e35652e81 Merge branch 'cwtest' into stripdebrid 2026-05-22 16:42:04 +05:30
tapframe
ab228a741f Revert "removal: debrid integration"
This reverts commit e25a2d7f3e.
2026-05-22 15:43:50 +05:30
tapframe
5d9a789139 Revert "removal: debrid integration"
This reverts commit 4e5a32510b.
2026-05-22 15:43:50 +05:30
tapframe
cb60d0196b feat(cloud): adding premimize 2026-05-21 14:37:44 +05:30
tapframe
8c25cca724 feat(cloud): adding premimize 2026-05-21 14:37:44 +05:30
tapframe
a7f768cdcd ref(torbox): short_name extraction 2026-05-21 14:01:03 +05:30
tapframe
cf1e162eb1 ref(torbox): short_name extraction 2026-05-21 14:01:03 +05:30
tapframe
5d5e1c83a3 feat(debrid): neutralize architecture 2026-05-21 11:39:54 +05:30