Commit graph

1387 commits

Author SHA1 Message Date
tapframe
d5d342cc2e ref: move external player button to top controls 2026-06-27 17:00:48 +05:30
tapframe
0d9efc4975 Merge branch 'cmp-rewrite' of https://github.com/NuvioMedia/NuvioMobile into cmp-rewrite 2026-06-27 17:00:15 +05:30
Nayif
d7409923d7
Merge pull request #1422 from materemias/fix/debrid-device-auth-transient-poll
Fix debrid device-auth giving up on transient poll errors (#1409)
2026-06-27 17:00:07 +05:30
tapframe
8a1efa2551 Merge branch 'cmp-rewrite' of https://github.com/NuvioMedia/NuvioMobile into cmp-rewrite 2026-06-27 16:46:34 +05:30
tapframe
4aa29087df Fix mobile home catalog cache invalidation 2026-06-27 16:19:17 +05:30
tapframe
f2eddbaf5b ref: add validation for duplicate collection 2026-06-27 15:17:44 +05:30
YLaskco
c388bd45d2 fix(player): preserve stream loading during external prep 2026-06-26 18:54:46 -04:00
tapframe
23480f50b6 fix: tune streams blur panel 2026-06-27 02:54:18 +05:30
YLaskco
7efdf52748 fix(player): speed up skip-segment launch prep 2026-06-26 15:13:33 -04:00
tapframe
5c5276fd7a Merge branch 'cmp-rewrite' of https://github.com/NuvioMedia/NuvioMobile into cmp-rewrite 2026-06-26 23:41:06 +05:30
tapframe
749917bcd7 fix: source change not recreating playback
fixes #1421
2026-06-26 23:40:21 +05:30
Nayif
ade6935330
Merge pull request #1420 from Laskco/skip-intro-merge-providers
fix(player): merge skip-intro providers instead of first-match-wins
2026-06-26 23:08:44 +05:30
Nayif
468a87ad61
Merge pull request #1418 from Joe00011/feat/japanese-translation
Update Japanese translation
2026-06-26 23:08:07 +05:30
Nayif
3395abde5e
Merge pull request #1415 from Laskco/external-player-skip-segments
Send resolved intro/outro skip segments to external players
2026-06-26 23:07:51 +05:30
tapframe
d6a0d2da52 ref: rename files 2026-06-26 22:53:12 +05:30
tapframe
1b4d08bbba feat: support for 6 profiles 2026-06-26 15:01:34 +05:30
Mate Remias
27c646eafa
Fix debrid device-auth giving up on transient poll errors
The device-authorization poll for debrid providers (TorBox/Premiumize)
treated any thrown redeem request as a fatal error and stopped polling,
showing "Could not start sign-in". The only thrown error it tolerated was
iOS request cancellation (isCancelledHttpRequest matched NSURLErrorDomain
/ code=-999); on Android a thrown request fell through to Failed(null)
and terminated the loop.

On aggressive ROMs (OxygenOS, MIUI, ...) the OS severs a backgrounded
app's sockets and fails its DNS while the user is in the browser approving
the code, so the in-flight poll throws UnknownHostException/IOException.
That terminated the login even though approval succeeded — reproduced on
OnePlus 13 / Android 16 (issue #1409): browser shows "logged in", app shows
"Could not start sign-in".

Treat a thrown redeem as Pending and keep polling instead of failing. To
avoid polling forever when the failure is persistent (airplane mode,
captive portal) rather than a brief background blip, a monotonic-clock
watchdog (DEVICE_AUTH_MAX_POLL_DURATION) bounds the throwing path and
surfaces failure once it elapses; a response-bearing expiry still stops
the loop earlier via the Expired branch. This also removes the now-unused,
iOS-only isCancelledHttpRequest helper.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 10:46:07 +02:00
YLaskco
cff97e3159 Skip Intro: merge providers instead of first-match-wins
SkipIntroRepository returned the result of the first provider that had
any data, so a provider with only a partial result (e.g. AniSkip with
just the intro) shadowed another provider that had the complete set
(e.g. IntroDB with intro + outro), silently dropping the outro.

Query IntroDB, Anime-Skip and AniSkip and merge their results by segment
category (opening / ending / recap), filling each category from the
highest-priority provider that has it (IntroDB, then Anime-Skip, then
AniSkip). The most complete set is always used and no provider shadows
another in either direction. The skipIntroEnabled gate and caching are
unchanged.
2026-06-26 01:46:18 -04:00
Joe00011
1ab467e810
Update Japanese strings.xml translation 2026-06-26 13:30:44 +09:00
YLaskco
0bfd611a45 Resolve skip segments on an app-lifetime scope
The skip lookup ran on the caller's composition-bound coroutine scope,
so navigating into the external player cancelled the in-flight network
request before it returned (and the cancelled lookup cached an empty
result, poisoning retries). Run resolution on a dedicated app scope so
it completes regardless of UI lifecycle.
2026-06-25 15:23:14 -04:00
YLaskco
af2e8ff926 Send resolved intro/outro skip segments to external players
Adds an opt-in External Player setting that hands resolved intro and
outro skip timestamps to external players via a skip_segments intent
extra, so a supporting player can auto-skip the opening and ending the
same way the internal player already does.

Resolution reuses the existing SkipIntroRepository (IntroDB, ARM,
AniSkip, Anime-Skip), so there is no new API, key, provider, or
dependency. The toggle is off by default and sits under Forward
Subtitles in the External Player settings. Resolution is bounded by a
timeout and only runs when the setting is on; players that do not read
the extra ignore it.
2026-06-25 14:38:45 -04:00
tapframe
19f1e1a656 Remove settings sidebar border 2026-06-25 11:38:35 +05:30
tapframe
b9c3e62eb0 ref: adjust authscreen layout and gradients 2026-06-25 02:46:53 +05:30
tapframe
a2d3fda686 ref: reorganize settings page 2026-06-25 01:45:50 +05:30
tapframe
d767f60d35 Apply profile mesh background to loading screens 2026-06-25 01:04:17 +05:30
tapframe
87670e7cb0 ref: remove startup observer causing stale catalog setting push 2026-06-24 20:40:55 +05:30
tapframe
9d32d238f4 fix: libmpv ass override.
fixes #1403
2026-06-24 19:55:30 +05:30
tapframe
df8b05f1c2 Adjust App Store settings policy and copy 2026-06-24 13:22:53 +05:30
tapframe
69f0dab65e feat: local db switch for development 2026-06-23 19:43:27 +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
f0f5e583a3 Fix home collections refresh
Fixes #1368
2026-06-22 19:43:22 +05:30
tapframe
e2215b64a4 Merge branch 'cmp-rewrite' of https://github.com/NuvioMedia/NuvioMobile into cmp-rewrite 2026-06-22 19:34:58 +05:30
Nayif
7f9cb51981
Merge pull request #1391 from VenusIsJaded/fix/imdb-rating-shows-tmdb-score
Fix: Keep addon IMDb rating instead of TMDB score
2026-06-22 19:34:51 +05:30
tapframe
85e1522712 Temporarily disable AVFoundation audio output 2026-06-22 19:31:21 +05:30
tapframe
7c7ab57334 Merge branch 'cmp-rewrite' into cmp 2026-06-22 19:04:48 +05:30
tapframe
6bd055d174 revert: rollback dependencies causing instablilty durign navigation and plugin fetches 2026-06-22 18:51:35 +05:30
tapframe
8498a5301d Fix mobile compile after merge 2026-06-22 18:36:56 +05:30
tapframe
4935ffc75a Merge branch 'cmp-rewrite' of https://github.com/NuvioMedia/NuvioMobile into cmp-rewrite 2026-06-22 18:19:28 +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
fca06204e0 fix(details): keep addon IMDb rating instead of TMDB score
When a metadata addon (e.g. aiometadata) supplies a genuine IMDb rating,
the TMDB enrichment on the details page was overwriting it with TMDB's
vote_average because the copy() preferred enrichment.rating over the
existing value. This made the IMDb placeholder display the TMDB score on
mobile, even though the addon provided IMDb ratings (the TV version was
already correct).

Invert the precedence so the addon-provided imdbRating is kept and TMDB's
vote_average is only used as a fallback when no rating was supplied.

Fixes #1377
2026-06-22 06:37:24 -05:00
VenusIsJaded
cc89e07eed fix: Let's Encrypt trust on Android 7 2026-06-22 05:38:31 -05:00
tapframe
389b990358 Handle deleted remote accounts on mobile
Fixes #81
2026-06-21 23:50:01 +05:30
Joe00011
029abadbe6
Add Japanese strings.xml translation 2026-06-21 20:30:48 +09:00
tapframe
e1cad830e9 Fix watch progress crash from concurrent updates 2026-06-21 16:51:20 +05:30
tapframe
3e49c78de7 fix: multiple ios crashes 2026-06-21 16:45:56 +05:30