Skip to content

[PB-6482]: reliably upload iCloud-offloaded camera-roll originals - #529

Open
terrerox wants to merge 6 commits into
feature/drive-list-mode-thumbnailsfrom
fix/camera-roll-icloud-offloaded-upload
Open

[PB-6482]: reliably upload iCloud-offloaded camera-roll originals#529
terrerox wants to merge 6 commits into
feature/drive-list-mode-thumbnailsfrom
fix/camera-roll-icloud-offloaded-upload

Conversation

@terrerox

Copy link
Copy Markdown
Contributor
  • expo-image-picker (SDK 54) materialized all selected originals at pick time, all-or-nothing; an iCloud-offloaded original that couldn't download rejected the whole selection with PHPhotosErrorDomain 3164, which was swallowed silently (no upload, no error).
  • Replace the iOS camera-roll selection with a native PHPickerViewController (PhotoPicker.pickAssets) that returns asset identifiers only, then download each original via the existing native PHAssetExport (isNetworkAccessAllowed) with retry and per-asset failure isolation; surface a user-facing error instead of swallowing.
  • Wire PHAssetExportModule.swift/.m (which also host the new PhotoPicker module) into the Internxt app target in the Xcode project — they were previously not referenced, so the native modules never compiled in.
  • Add cameraRollAssets service (pickPhotoAssets/exportPhAsset/withRetry) and i18n strings.

@terrerox
terrerox requested a review from CandelR July 11, 2026 19:19
@terrerox
terrerox force-pushed the feature/drive-list-mode-thumbnails branch from 00cec16 to 652e4e0 Compare July 16, 2026 02:46
@terrerox
terrerox requested a review from TamaraFinogina as a code owner July 16, 2026 02:46
@terrerox terrerox self-assigned this Jul 16, 2026
terrerox and others added 5 commits July 15, 2026 23:01
  - Wire AuthConfig.clientName/clientVersion through
    BuildConfig.INTERNXT_CLIENT_NAME and BuildConfig.INTERNXT_CLIENT_VERSION,
    populated by app/build.gradle from package.json. package.json is now the
    single source of truth for the internxt-client/internxt-version headers.
  - Extract JSON helpers (orEmpty, map, optStringOrNull, optLongFlexible)
    from InternxtApiClient into JsonExtensions.kt; cover each branch in a
    new JsonExtensionsTest.
  - Rename InternxtApiClient.execute -> executeApiRequest.
  - Expand InternxtApiClientTest: listFolderFolders, createFolder, null
    optional fields, size given as a string, and 5xx -> ApiError. Add an
    enqueueJson helper to cut response-stub boilerplate.
  - Add @TamaraFinogina as CODEOWNER for the new documents/crypto/ directory.
…tVersion 54)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add a per-folder snapshot/diff change-feed in the File Provider
extension so working-set enumeration surfaces upload, create-folder,
move, rename, trash and restore as changes. SyncAnchorStore persists
the per-domain anchor; FileProviderModule exposes a native bridge so
the host app can signal the enumerator on RN mutations.
…bnail paths

Uploads of files whose names contain spaces or non-ASCII characters failed
with ENOENT because percent-encoded cache URIs were passed unmodified to
RNFS.copyFile and to the native thumbnail generator. Decode the source URI
before copy (copyFileFromEncodedUri) and the native-returned thumbnail URI
(fromFileUri); drop the stale manual %20 encoding. Device-verified on Android.
- expo-image-picker (SDK 54) materialized all selected originals at pick
  time, all-or-nothing; an iCloud-offloaded original that couldn't download
  rejected the whole selection with PHPhotosErrorDomain 3164, which was
  swallowed silently (no upload, no error).
- Replace the iOS camera-roll selection with a native PHPickerViewController
  (PhotoPicker.pickAssets) that returns asset identifiers only, then download
  each original via the existing native PHAssetExport (isNetworkAccessAllowed)
  with retry and per-asset failure isolation; surface a user-facing error
  instead of swallowing.
- Wire PHAssetExportModule.swift/.m (which also host the new PhotoPicker
  module) into the Internxt app target in the Xcode project — they were
  previously not referenced, so the native modules never compiled in.
- Add cameraRollAssets service (pickPhotoAssets/exportPhAsset/withRetry) and
  i18n strings. Android branch unchanged.
- Verified end-to-end on a physical device: previously-offloaded iCloud videos
  that failed with 3164 now download and upload successfully.
@terrerox
terrerox force-pushed the fix/camera-roll-icloud-offloaded-upload branch from 224e423 to 8ffa224 Compare July 16, 2026 03:02
@terrerox
terrerox removed the request for review from TamaraFinogina July 16, 2026 03:14
@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
3.4% Duplication on New Code (required ≤ 3%)

See analysis details on SonarQube Cloud

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant