Commit graph

671 commits

Author SHA1 Message Date
Stéphane
fa9528d3a7 Merge remote-tracking branch 'origin/cmp-rewrite' into feat/extract-hardcoded-strings-pass4
# Conflicts:
#	composeApp/src/commonMain/composeResources/values-fr/strings.xml
#	composeApp/src/commonMain/composeResources/values/strings.xml
2026-05-25 19:47:53 +02:00
Nayif
0d5a15241f Merge pull request #1173 from guuilp/cmp-rewrite
feat: release alert badge, air-date countdown, and dropped-show filtering for Continue Watching
2026-05-25 13:19:06 +05:30
Guilherme Lima Pereira
28fe7fc567 feat: release alert badge and dropped-show filtering for CW section
- Add New Episode / New Season badge to the Continue Watching next-up
  cards, matching the NuvioTV implementation. Badge fires when a new
  episode has aired after the user's last watched timestamp and within
  the 60-day recency window.

- Filter shows that are marked as 'dropped' on Trakt from the Continue
  Watching in-progress list, next-up seed candidates, and the
  enrichment disk cache, matching NuvioTV behaviour.

- Add AirDateUtils.kt with calculateReleaseAlertState() and
  parseReleaseDateToEpochMs() helpers used for both badge logic and
  correct next-up sort ordering when a release alert is active.

- Persist isReleaseAlert / isNewSeasonRelease in CachedNextUpItem so
  badge state survives cold starts without waiting for a full re-fetch.

- Extend translations for the badge strings (airs today / tomorrow /
  in N days / on date) across de, el, es, fr, id, it, nb, pl, pt, tr,
  cs and the default English strings.

- Add unit tests for parseReleaseDateToEpochMs, calculateReleaseAlertState
  inputs/outputs, formatReleaseDateWithoutYear, isoCalendarDateOrNull,
  daysUntilExplicitRelease, and isoEpochDay.
2026-05-24 19:59:41 -03:00
Stéphane
5aa87684c9 i18n(fr): resolve cherry-pick conflicts after merging PR #943 + #1025 + #1029
After cherry-picking pass3 changes on top of the 3 merged i18n PRs:
- Combined imports & merged code from both versions where compatible
- For CollectionEditorRepository.kt: kept pass3 version entirely (cleaner
  scope.launch + getString flow vs runBlocking in #1025)
- For SubmitIntroDialog.kt: kept #943 convention (_label/_button suffixes)
- For TmdbCollectionSourceResolver.kt: merged all imports (#1025 + pass3)
- For PlayerControls.kt: kept #943 submit_intro_action key
- For PlaybackSettingsPage.kt: kept #943 pre-loaded invalidKeyMessage
- For CollectionEditorScreen.kt: kept new tmdb_country_placeholder key
- Added missing import in SubtitleRepository.kt

Strings.xml result: 1709 EN ↔ 1709 FR, 0 missing, 0 orphan, 0 vouvoiement.
2026-05-24 10:00:34 +02:00
Stéphane
33412cc700 i18n(fr): extract hardcoded strings, harmonize tutoiement, audit cohérence
- Extract 13 hardcoded user-facing strings from cloud, collection, player,
  debrid, IntroDB to res/values/strings.xml (FR translations included)
- Refactor titleForMedia() to accept localized suffixes as parameters,
  wrap addTmdbSourceFromInput/addTraktSourceFromResult in scope.launch
- Pre-load error message for runCatching error() to keep i18n-aware
- Harmonize entire values-fr/strings.xml to tutoiement (100 occurrences
  converted from vouvoiement: Cliquez→Clique, Vous→Tu, Votre→Ton, etc.)
- Fix terminology inconsistencies: Résumé→Aperçu, Réseaux→Chaînes (TMDB),
  Suivant→À suivre (up next), Téléchargement échoué→Échec du téléchargement,
  Découverte TMDB→TMDB Discover, etc.
- Add 134 EN strings, +444 FR (134 new + 310 backfill/rewrites)
- Parity preserved: 1532 ↔ 1532 strings, 0 placeholder divergence
2026-05-24 09:48:01 +02:00
Stéphane
fd71323cb5 merge: PR #1029 feat(i18n) extract last deep-cut 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:51 +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
Stéphane
9495300ea2 merge: PR #943 i18n(fr) full French localization overhaul 2026-05-24 09:39:50 +02:00
tapframe
8815bfcf4d Merge branch 'cmp-rewrite' of https://github.com/NuvioMedia/NuvioMobile into cmp-rewrite 2026-05-22 20:34:27 +05:30
tapframe
36a5b8c344 bump version 2026-05-22 20:34:16 +05:30
tapframe
ae6841d87e ref: adding attributes 2026-05-22 20:29:51 +05:30
tapframe
1daf6116fd Merge branch 'addon' into cmp-rewrite 2026-05-22 20:03:20 +05:30
tapframe
ab42e5feef feat: optimize cw enrichmnet logic 2026-05-22 20:03:00 +05:30
tapframe
e7632ccf28 Fix stale series watched markers 2026-05-22 18:39:29 +05:30
tapframe
023c26070a feat: add support for addon enable/disable flag 2026-05-22 17:48:48 +05:30
tapframe
d6fb9f4cae Merge branch 'stripdebrid' into cmp-rewrite 2026-05-22 17:19:30 +05:30
tapframe
41a22e957c feat: save resolved links in memory 2026-05-22 17:11:34 +05:30
tapframe
a1a9b10807 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
6720cbf7f6 feat(cloud): passing watchprogress 2026-05-22 15:32:11 +05:30
tapframe
d8baa1b109 proper management of cloud items in cw section 2026-05-22 15:03:38 +05:30
tapframe
7e630f3b18 fix: cw seeding and series continuity 2026-05-22 12:29:35 +05:30
tapframe
df481a5d29 Improve watched marking parity 2026-05-22 02:57:48 +05:30
Nayif
47896285bd Merge pull request #1142 from SimSalabimse/Norwegian-Translation
Corrected the ISO 639 language code for Norwegian translation
2026-05-22 02:11:36 +05:30
tapframe
cdc1f7eab8 ref(cloud): ui adjustments 2026-05-21 21:29:39 +05:30
tapframe
464024bc61 feat(streams): adjust autoplay stream selection for cloud services 2026-05-21 15:47:06 +05:30
tapframe
6d929a71cf ref: adjust cloud library ui and sorting 2026-05-21 15:11:42 +05:30
tapframe
0cecf20fd3 String changes 2026-05-21 14:51:30 +05:30
tapframe
cb60d0196b 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
664cc69ec3 ref: adjust phrasing 2026-05-21 13:09:01 +05:30
tapframe
e3cfcc820c feat: Add cloud library support 2026-05-21 12:56:53 +05:30
tapframe
48265df85e feat(torbox): link device 2026-05-21 12:07:29 +05:30
tapframe
5d5e1c83a3 feat(debrid): neutralize architecture 2026-05-21 11:39:54 +05:30
SimSalabimse
13d796c462 Merge branch 'Norwegian-Translation' of https://github.com/SimSalabimse/NuvioMobile into Norwegian-Translation 2026-05-20 20:43:50 +02:00
SimSalabimse
e1057220c3 Use 'nb' locale code for Norwegian
Switch Norwegian locale code from "no" to the ISO 639-1 code "nb" for consistency. Updated Android locale_config.xml, renamed resource folder values-no to values-nb (strings moved/renamed accordingly), and changed the AppLanguage enum to use "nb". Also removed a now-duplicate media_series string entry in the renamed resources.
2026-05-20 20:42:30 +02:00
tapframe
63ba15c1f2 feat: parallel cache check 2026-05-20 23:26:08 +05:30
tapframe
e25a2d7f3e removal: debrid integration 2026-05-20 21:44:27 +05:30
tapframe
1dad70cd01 Merge branch 'cmp-rewrite' of https://github.com/NuvioMedia/NuvioMobile into cmp-rewrite 2026-05-20 17:07:14 +05:30
tapframe
811ed3370e ref: adding upstream tv quickjs lib 2026-05-20 17:01:37 +05:30
Nayif
cf8f753bad Merge pull request #1137 from skoruppa/cmp-rewrite 2026-05-20 16:52:32 +05:30
tapframe
4ace7db97a ref(sync): pull method to support optional parameters for last watched and limit 2026-05-20 16:45:35 +05:30
skoruppa
ba08ba8194 Port Reuse Binge Group from the TV version 2026-05-20 13:05:14 +02:00
tapframe
e61db12730 Updated DebridStreamPresentation to filter out uncached streams and apply custom formatting based on settings. 2026-05-20 16:15:02 +05:30
tapframe
1ccaed7b20 feat: debrid hybrid approach 2026-05-20 13:16:22 +05:30
Stéphane
d1ee3cf784 feat(i18n): extract last deep-cut hardcoded strings to resources
Migrates 13 additional user-facing English literals found across 7 files
in a follow-up audit. Adds 13 new keys (EN + FR) and replaces the inline
literals with `getString(...)` / `runBlocking { getString(...) }`
depending on context.

- RuntimeFormat: episode / runtime hours+minutes template (`%dh %dm`,
  `%dh`, `%dm` → resource-backed; FR uses `%d h %d min`).
- SearchRepository: `require {}` empty-result message now hits
  `search_error_no_results_for_catalog` instead of the inline literal.
- PluginRepository: `already installed`, install-failed, refresh-failed
  fallback messages.
- PluginManifestParser: three `require {}` validation messages (name,
  version, providers).
- AddonManifestParser: `Manifest missing "<name>"` exception now uses
  `addons_manifest_missing_field`.
- PlayerEngine.ios: `MPV not available — Please rebuild the app` →
  `player_error_mpv_unavailable`.
- YoutubeChunkedDataSourceFactory: the developer-facing `No DataSpec`
  exception is replaced by a user-friendly `Unable to play this stream.`
  message that's safe to render through `onPlayerError.localizedMessage`.

FR translations follow existing conventions (tutoiement, curly apostrophes,
NBSP inside `« »`, internal branch names kept out of user-facing copy).
2026-05-20 06:41:24 +02:00
Stéphane
546226c79f feat(i18n): extract remaining hardcoded strings flagged by audit
Migrates the long tail of user-facing English literals identified by the
audit report — 65 new keys across 14 source files plus the matching FR
translations (tutoiement, NBSP, curly apostrophes).

Categories:
- TMDB filter placeholders in CollectionEditorScreen (10 keys, "28,12",
  "2020-01-01", "100", "en, ko, ja, hi", etc.)
- Collection editor titles & errors in CollectionEditorRepository
  (TMDB/Trakt fallback titles, validation errors, "Could not load …")
- Folder type labels in FolderDetailRepository ("Trakt Series List",
  "Trakt Movie List")
- TMDB resolver errors (api key required, not found, missing IDs, discover
  no data) in TmdbCollectionSourceResolver
- Trakt public list resolver errors and search-result fallbacks in
  TraktPublicListSourceResolver (rate limit, not public, items/likes
  counts, credentials missing, error_with_code formatter)
- Comments load failure in TraktCommentsRepository
- Trakt status messages (Connected/Disconnected) in TraktAuthRepository
- AppUpdater exceptions (no release, github api error, missing tag,
  no APK asset) — also strips the "cmp-rewrite" branch name from the
  user-facing copy
- HTTP error fallbacks shared by both AddonPlatform.{android,ios}.kt
  ("Request failed with HTTP %d", "Empty response body")
- AndroidAppUpdaterPlatform download/install errors
- iOS DownloadsPlatformDownloader file/HTTP errors
- SubtitleRepository addon-subtitle display format
- DownloadsLiveStatusPlatform.android Pause action (reuses
  compose_action_pause) and the byte-unit table (now includes
  unit_bytes_tb)

Non-Composable suspend bodies use the existing `getString(...)` pattern;
synchronous bodies (constructors, lambda inits) use the established
`runBlocking { getString(...) }` pattern already in the codebase.

Keys that overlap with #943 (the FR overhaul PR) use the exact same
names so the eventual merge is a no-op on those.
2026-05-20 06:41:00 +02:00
Stéphane
7b2095a862 i18n(fr): translate new upstream debrid + action_saving keys
8 EN keys added by upstream during the rebase had no FR counterpart:
- action_saving
- settings_debrid_dialog_placeholder / subtitle / title (Torbox API key dialog)
- settings_debrid_formatter_reset_title / subtitle (reset formatting row)
- settings_debrid_not_set
- settings_debrid_prepare_stream_count_warning (rate-limit warning copy)

Parity restored: 1459 keys EN ↔ FR.
2026-05-20 06:37:45 +02:00
Stéphane
5d694cbdb1 i18n(fr): translate new upstream keys merged during rebase
47 EN keys added upstream since the branch was last synced had no FR
counterpart. Adds the missing translations (tutoiement, NBSP, curly
apostrophes):

- Debrid settings + errors (compose_settings_page_debrid,
  settings_debrid_*, debrid_*) — 25 keys
- Parental content advisory labels (parental_*) — 8 keys
- TMDB watch-provider / watch-region filters
  (collections_editor_tmdb_watch_*) — 13 keys
- action_validate

Parity restored: 1451 keys EN ↔ FR.
2026-05-20 06:36:59 +02:00
Stéphane
cd87414b28 i18n(fr): migrate PlayerControls submit intro contentDescription
PlayerControls.kt:271 (player header button to open SubmitIntroDialog)
now uses stringResource(Res.string.submit_intro_action), the existing
key already present in upstream strings (cmp-rewrite).
2026-05-20 06:36:59 +02:00