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
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
- Rewrote all user-facing French strings from informal address (tu/ton/ta/
tes, 2nd-person-singular imperatives) to formal vouvoiement (vous/votre/
vos, 2nd-person-plural imperatives). 171 strings updated.
- Past participles and adjectives kept singular (politeness "vous"):
"Vous avez ete deconnecte", "Vous etes seul responsable".
- Setting behavior descriptions written in 3rd person ("Affiche les
badges...") left unchanged: they describe the option, not the user.
- Key parity unchanged, placeholders (%1$s, \n), HTML entities and French
typography (apostrophes ', non-breaking spaces) preserved.
- 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
Long-press menu was blocked for debrid instant streams because
playableDirectUrl is null until resolved. Now the menu opens for
any stream that has a direct URL or is a debrid candidate.
Download and Copy Link actions now resolve the debrid stream URL
via DirectDebridPlaybackResolver before enqueuing/copying, matching
the same flow used by the player.