Commit graph

1380 commits

Author SHA1 Message Date
Luqman Fadlli
ccaa120ffb
fix typo 2026-05-26 15:16:11 +07:00
Luqman Fadlli
78bf7ffe10
fix: add missing layout import in ProfileSwitcherTab
- Added the missing `androidx.compose.foundation.layout.fillMaxSize` import statement.
- Resolves the "Unresolved reference 'fillMaxSize'" compilation failure during the iOS build task (`compileKotlinIosArm64`).
2026-05-26 14:36:02 +07:00
Luqman Fadlli
48f3eec9a2
Merge branch 'NuvioMedia:cmp-rewrite' into scrollable-language-option 2026-05-26 14:18:10 +07:00
Luqman Fadlli
c4ccf00904
Merge branch 'NuvioMedia:cmp-rewrite' into fix-ios-animated-avatar 2026-05-26 14:17:43 +07:00
Luqman Fadlli
38c13e81e0
Merge branch 'NuvioMedia:cmp-rewrite' into Indonesian-localization 2026-05-26 14:17:00 +07:00
Nayif
e2e26c99f2
Merge pull request #1077 from VenusIsJaded/fix/ios-indirect-input-events
fix: iOS mouse scrolling when AssistiveTouch and Perform Touch Gestures is on
2026-05-26 12:45:04 +05:30
Nayif
31b403afbb Merge pull request #1077 from VenusIsJaded/fix/ios-indirect-input-events
fix: iOS mouse scrolling when AssistiveTouch and Perform Touch Gestures is on
2026-05-26 12:45:04 +05:30
Luqman Fadlli
fd1cbf45ff
fix: correct touch area offset on Profile Edit Screen
- Removed redundant `clip` and `size` modifiers from `CollectionCardRemoteImage` in `ProfileIdentityCard` and `AvatarChoiceItem`.
- Used `Modifier.fillMaxSize()` to inherit parent shape constraints, fixing the touch offset issue on iOS devices without affecting Android.
2026-05-26 14:06:25 +07:00
Luqman Fadlli
2eaab2f545
fix: correct touch area offset in Profile Switcher Tab
- Applied `Modifier.fillMaxSize()` to `CollectionCardRemoteImage` inside `PopupProfileBubble` and `ActiveProfileMiniAvatar`.
- Removed redundant clipping layers that displaced the touch area for Native iOS views within the bottom navigation and popup switcher.
2026-05-26 14:01:49 +07:00
Luqman Fadlli
6f5c865a55
fix: correct touch area offset on Profile Selection Screen
- Replaced explicit `size` and `clip` modifiers with `Modifier.fillMaxSize()` on `CollectionCardRemoteImage`.
- Resolved an iOS-specific bug where extra Compose clipping layers caused the UIKitView hit-box to shift away from its visual bounds.
- Restored accurate touch targets by relying on the parent Box's constraints.
2026-05-26 14:00:11 +07:00
Luqman Fadlli
ee9a63f27b
fix: correct touch area offset on Profile Edit Screen
- Removed redundant `clip` and `size` modifiers from `CollectionCardRemoteImage` in `ProfileIdentityCard` and `AvatarChoiceItem`.
- Used `Modifier.fillMaxSize()` to inherit parent shape constraints, fixing the touch offset issue on iOS devices without affecting Android.
2026-05-26 13:58:29 +07:00
Luqman Fadlli
d6c44b3c07
fix(ios): enable animated GIF preview on Profile Edit Screen
- Updated `ProfileIdentityCard` to use `CollectionCardRemoteImage`.
- Configured `animateIfPossible = true` to provide real-time animated previews during profile creation or customization on iOS.
2026-05-26 10:22:41 +07:00
Luqman Fadlli
0a6807a804
fix(ios): enable animated GIF avatars in Profile Switcher Tab
- Integrated `CollectionCardRemoteImage` into `PopupProfileBubble` and `ActiveProfileMiniAvatar`.
- Set `animateIfPossible = true` to ensure consistent GIF playback within the bottom navigation tab and popup switcher on iOS.
- Maintained existing layout sizes and clip shapes for visual consistency.
2026-05-26 10:17:49 +07:00
Luqman Fadlli
452b3bb173
fix(ios): enable animated GIF avatars on Profile Selection Screen
- Replaced Coil's `AsyncImage` with `CollectionCardRemoteImage` inside `ProfileAvatarCard`.
- Passed `animateIfPossible = true` to allow iOS to utilize the existing custom native GIF decoding engine used in collection poster.
- Ensured zero behavioral impact on Android as the component maps back to Coil under the hood.
2026-05-26 10:13:32 +07:00
Stéphane
302c6dc7f8 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
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
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
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
tapframe
902b59cc88 fix: entry handling in TraktProgressRepository 2026-05-25 18:21:50 +05:30
tapframe
78948e8b45 fix: entry handling in TraktProgressRepository 2026-05-25 18:21:50 +05:30
André Costa
24620fe9e1
Update strings.xml 2026-05-25 11:46:56 +01:00
André Costa
e8ef651060 Update strings.xml 2026-05-25 11:46:56 +01:00
Luqman Fadlli
b1d0008da4
Merge branch 'NuvioMedia:cmp-rewrite' into scrollable-language-option 2026-05-25 17:12:00 +07:00
Luqman Fadlli
6d9abb6cea
aligned with the iOS translation from values-id folder 2026-05-25 17:08:56 +07:00
Luqman Fadlli
c9a1a19aea
Merge branch 'NuvioMedia:cmp-rewrite' into Indonesian-localization 2026-05-25 16:11:52 +07:00
albyalex96
bf5fc80d29
Merge branch 'cmp-rewrite' into update/localization-italian 2026-05-25 10:38:41 +02:00
albyalex96
14169abd7e Merge branch 'cmp-rewrite' into update/localization-italian 2026-05-25 10:38:41 +02:00
tapframe
fbcd40a72c Merge Trakt TV parity 2026-05-25 13:50:30 +05:30
tapframe
765c6d4dbe Merge Trakt TV parity 2026-05-25 13:50:30 +05:30
tapframe
43e938f1c0 Align Trakt sync with TV app 2026-05-25 13:49:42 +05:30
tapframe
1a77f5efca Align Trakt sync with TV app 2026-05-25 13:49:42 +05:30
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
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
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
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
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
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
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
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
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
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
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
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
7f12c16ab0 merge: PR #943 i18n(fr) full French localization overhaul 2026-05-24 09:39:50 +02:00
Stéphane
9495300ea2 merge: PR #943 i18n(fr) full French localization overhaul 2026-05-24 09:39:50 +02:00
Luqman Fadlli
8b120438b1
feat: make language selection bottom sheet scrollable
- Refactored `AppearanceLanguageBottomSheet` in `AppearanceSettingsPage.kt` to use a `LazyColumn` instead of a standard `Column`.
- Wrapped the sheet title inside an `item` block and used `itemsIndexed` to render the language options.
- This resolves an issue where the language list was truncated and unscrollable, particularly in landscape mode or when the list of translations grows.
2026-05-23 18:57:29 +07:00
albyalex96
0d09b83319
Update Italian strings for various settings and actions 2026-05-23 13:33:35 +02:00
albyalex96
9137d89252 Update Italian strings for various settings and actions 2026-05-23 13:33:35 +02:00
Luqman Fadlli
66877be703
Merge branch 'NuvioMedia:cmp-rewrite' into Indonesian-localization 2026-05-23 11:30:12 +07:00
Luqman Fadlli
c28f93ee2b
update values-in directory to follow values-id for Indonesian localization in Android and iOS
This commit introduces the `values-in/strings.xml` file to support Indonesian translations specifically for Android.

It is necessary to keep both `values-id` and `values-in` in the codebase due to platform differences. iOS uses the modern ISO code `id` for Indonesian, whereas Android relies on the older `in` code. Providing both directories guarantees that the Indonesian localization works seamlessly across both iOS and Android platforms.
2026-05-23 08:11:04 +07:00