Commit graph

671 commits

Author SHA1 Message Date
Stéphane
dd147cdfe1 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
1812b52e67
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
a0d40b9326 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
94b35c93c0 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
f0736813c4 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
c8c3095517 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
2aabf343f4 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
7f12c16ab0 merge: PR #943 i18n(fr) full French localization overhaul 2026-05-24 09:39:50 +02:00
tapframe
2fa1c87ae7 Merge branch 'cmp-rewrite' of https://github.com/NuvioMedia/NuvioMobile into cmp-rewrite 2026-05-22 20:34:27 +05:30
tapframe
97eaf6baaf bump version 2026-05-22 20:34:16 +05:30
tapframe
4b45d4dd25 ref: adding attributes 2026-05-22 20:29:51 +05:30
tapframe
9d41785887 Merge branch 'addon' into cmp-rewrite 2026-05-22 20:03:20 +05:30
tapframe
a789d7b455 feat: optimize cw enrichmnet logic 2026-05-22 20:03:00 +05:30
tapframe
96010101b8 Fix stale series watched markers 2026-05-22 18:39:29 +05:30
tapframe
ba5f460002 feat: add support for addon enable/disable flag 2026-05-22 17:48:48 +05:30
tapframe
ada9bc00f7 Merge branch 'stripdebrid' into cmp-rewrite 2026-05-22 17:19:30 +05:30
tapframe
e85ea4f322 feat: save resolved links in memory 2026-05-22 17:11:34 +05:30
tapframe
2e35652e81 Merge branch 'cwtest' into stripdebrid 2026-05-22 16:42:04 +05:30
tapframe
5d9a789139 Revert "removal: debrid integration"
This reverts commit 4e5a32510b.
2026-05-22 15:43:50 +05:30
tapframe
8fe059901c feat(cloud): passing watchprogress 2026-05-22 15:32:11 +05:30
tapframe
3d6d0fcfb4 proper management of cloud items in cw section 2026-05-22 15:03:38 +05:30
tapframe
29f78a98cb fix: cw seeding and series continuity 2026-05-22 12:29:35 +05:30
tapframe
efddba9df2 Improve watched marking parity 2026-05-22 02:57:48 +05:30
Nayif
436576da25
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
996fd7f949 ref(cloud): ui adjustments 2026-05-21 21:29:39 +05:30
tapframe
914f4147e9 feat(streams): adjust autoplay stream selection for cloud services 2026-05-21 15:47:06 +05:30
tapframe
800d7160b1 ref: adjust cloud library ui and sorting 2026-05-21 15:11:42 +05:30
tapframe
0bfd2cb99c String changes 2026-05-21 14:51:30 +05:30
tapframe
8c25cca724 feat(cloud): adding premimize 2026-05-21 14:37:44 +05:30
tapframe
cf1e162eb1 ref(torbox): short_name extraction 2026-05-21 14:01:03 +05:30
tapframe
b0906b7b19 ref: adjust phrasing 2026-05-21 13:09:01 +05:30
tapframe
8eb9f2c83b feat: Add cloud library support 2026-05-21 12:56:53 +05:30
tapframe
20f8717cf0 feat(torbox): link device 2026-05-21 12:07:29 +05:30
tapframe
075c5f8f51 feat(debrid): neutralize architecture 2026-05-21 11:39:54 +05:30
SimSalabimse
4b21fe2d85 Merge branch 'Norwegian-Translation' of https://github.com/SimSalabimse/NuvioMobile into Norwegian-Translation 2026-05-20 20:43:50 +02:00
SimSalabimse
a9a3398cea 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
782f65aaff feat: parallel cache check 2026-05-20 23:26:08 +05:30
tapframe
4e5a32510b removal: debrid integration 2026-05-20 21:44:27 +05:30
tapframe
88ea47d2f0 Merge branch 'cmp-rewrite' of https://github.com/NuvioMedia/NuvioMobile into cmp-rewrite 2026-05-20 17:07:14 +05:30
tapframe
d7f89d2f27 ref: adding upstream tv quickjs lib 2026-05-20 17:01:37 +05:30
Nayif
a3a7829a80
Merge pull request #1137 from skoruppa/cmp-rewrite 2026-05-20 16:52:32 +05:30
tapframe
de68ce2c30 ref(sync): pull method to support optional parameters for last watched and limit 2026-05-20 16:45:35 +05:30
skoruppa
5fe7364d5d Port Reuse Binge Group from the TV version 2026-05-20 13:05:14 +02:00
tapframe
41b0bd95ad Updated DebridStreamPresentation to filter out uncached streams and apply custom formatting based on settings. 2026-05-20 16:15:02 +05:30
tapframe
2a550c4356 feat: debrid hybrid approach 2026-05-20 13:16:22 +05:30
Stéphane
4f5740c42b 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
683ec41b62 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
1fe886af2b 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
bdccc7eeea 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
a276c5e31c 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