Загрузка данных


Нужно исправить модуль Activity в существующем проекте Fuji Scout.

ВАЖНО:
Сейчас приложение уже успешно видит Fujifilm X-Pro3 по USB в режиме:

CONNECTION MODE → USB RAW CONV./BACKUP RESTORE

В этом режиме уже РЕАЛЬНО РАБОТАЕТ существующий RAW Lab:
- iPhone видит X-Pro3;
- приложение устанавливает соединение с камерой;
- RAF передается в камеру;
- камера сама проявляет RAF;
- готовый JPEG успешно возвращается обратно в приложение.

НЕ ЛОМАЙ существующий RAW Lab, FujiPTPManager и рабочее подключение камеры.

ПРОБЛЕМА:

Текущий Activity требует от пользователя переключить X-Pro3 в:

PC CONNECTION MODE → USB CARD READER

После переключения в USB CARD READER приложение вообще перестает видеть камеру, кнопка SYNC PHOTO WALK остается неактивной.

Я хочу по возможности ПОЛНОСТЬЮ УБРАТЬ необходимость переключать X-Pro3 в USB CARD READER.

ЗАДАЧА №1 — ПРОВЕРИТЬ PTP В RAW CONV MODE

Используй уже существующее и рабочее соединение FujiPTPManager.

Когда X-Pro3 подключена в USB RAW CONV./BACKUP RESTORE, попробуй через доступный PTP-интерфейс определить, можно ли получить доступ к объектам/файлам на SD-карте.

Проверь поддержку операций, эквивалентных:

GetStorageIDs
GetStorageInfo
GetNumObjects
GetObjectHandles
GetObjectInfo
GetThumb

Не предполагай заранее, что камера их поддерживает.

Сначала запроси DeviceInfo / SupportedOperations и определи реальные возможности подключенной камеры.

Если стандартные PTP operations недоступны через текущую реализацию ImageCaptureCore, исследуй существующие ICCameraDevice / ICCameraItem / ICCameraFile API, которые уже доступны проекту.

Не используй private iOS API.

ЗАДАЧА №2 — ACTIVITY БЕЗ CARD READER

Если X-Pro3 в USB RAW CONV./BACKUP RESTORE позволяет получить список объектов:

Activity должен работать прямо через это соединение.

Пользователь НЕ должен менять USB MODE камеры.

Workflow должен стать:

X-Pro3 находится в USB RAW CONV./BACKUP RESTORE
→ подключаем к iPhone
→ Fuji Scout обнаруживает камеру
→ Camera работает
→ RAW Lab работает
→ Activity работает
→ нажимаем SYNC PHOTO WALK.

Убери жесткую проверку:

PC CONNECTION MODE → USB CARD READER

и не блокируй кнопку Sync только потому, что камера не находится в Card Reader Mode.

ЗАДАЧА №3 — НЕ СКАЧИВАТЬ ПОЛНЫЕ ФОТОГРАФИИ

Activity должен быть максимально быстрым.

НЕ импортировать все RAF/JPEG на iPhone.

Для каждого файла по возможности получать только:

- ObjectInfo / metadata;
- EXIF;
- дату и время съемки;
- GPS, если присутствует;
- ISO;
- shutter speed;
- aperture;
- focal length;
- filename;
- file type;
- размер;
- orientation;
- другие доступные полезные EXIF-поля.

Thumbnail получать только там, где он действительно нужен для интерфейса Activity.

Для географической точки достаточно одного thumbnail.

Полноразмерные RAF/JPEG для построения Activity НЕ нужны.

ЗАДАЧА №4 — ACTIVITY ДОЛЖЕН РАБОТАТЬ БЕЗ GPS

Сейчас Activity фактически считает отсутствие GPS ошибкой.

Это неправильно.

Если фотографии найдены, но GPS отсутствует, прогулка ВСЕ РАВНО должна создаваться.

Без GPS показывать:

- количество кадров;
- время первого кадра;
- время последнего кадра;
- длительность съемки;
- самый активный час;
- максимальную серию кадров;
- средний интервал между кадрами;
- самый длинный перерыв;
- RAW/JPEG statistics;
- наиболее используемый ISO;
- диапазон ISO;
- наиболее используемую выдержку;
- наиболее используемую диафрагму;
- наиболее используемое фокусное;
- количество уникальных фокусных;
- количество кадров по часам;
- другие интересные статистические факты, которые можно достоверно вычислить из metadata.

Если GPS присутствует:
дополнительно строить существующую карту, точки, названия мест и коллаж прогулки.

GPS должен быть enhancement, а НЕ обязательным условием Activity.

ЗАДАЧА №5 — PTP DIAGNOSTICS

Добавь скрытый диагностический экран для разработки.

Например, long press по надписи FUJI ACTIVITY или другой ненавязчивый способ.

Название:

PTP DIAGNOSTICS

Показывать:

Camera model
Connection state
Transport
DeviceInfo
SupportedOperations
SupportedEvents
SupportedProperties
Storage IDs
Storage information
Object count
GetObjectHandles result
GetObjectInfo result
Thumbnail availability
ICCameraDevice mediaFiles count, если доступно.

Также показать результаты тестов:

Storage access: YES / NO
Object listing: YES / NO
Metadata access: YES / NO
Thumbnail access: YES / NO
Full object access: YES / NO

Для ошибки показывать:
PTP response code / NSError / описание ошибки.

Это нужно, чтобы на реальной X-Pro3 можно было понять, что Fujifilm разрешает в USB RAW CONV mode.

ЗАДАЧА №6 — FALLBACK

Если после реального тестирования выясняется, что X-Pro3 в USB RAW CONV./BACKUP RESTORE НЕ предоставляет доступ к файлам SD-карты:

НЕ симулируй поддержку.

НЕ показывай фиктивные данные.

НЕ ломай RAW Lab.

В таком случае Activity должен четко определить:

"Camera connected, but storage access is unavailable in current USB mode."

После этого реализуй архитектуру fallback для USB CARD READER отдельно от существующего RAW/PTP подключения.

Важно:
USB CARD READER может определяться iOS не тем же способом, что USB RAW CONV.

Поэтому не используй только FujiPTPManager.state == .connected как единственное условие доступности Activity.

Исследуй доступные публичные iOS API для доступа к подключенной камере/накопителю и используй подходящий публичный механизм.

Если iOS вообще не предоставляет приложению прямого программного доступа к USB Mass Storage без пользовательского Document Picker — явно зафиксируй это в коде/диагностике и НЕ создавай фальшивую реализацию.

ЗАДАЧА №7 — UI

Сохрани существующий дизайн Fuji Scout.

На экране Activity вместо постоянного:

PC CONNECTION MODE → USB CARD READER

показывай состояние автоматически:

X-PRO3 CONNECTED
READING CAMERA…
READING METADATA…
BUILDING ACTIVITY…
DONE

Если камера подключена в RAW CONV и storage доступен:

DIRECT PTP SYNC

Если приходится использовать fallback:

CARD READER REQUIRED

Кнопка:

SYNC PHOTO WALK

должна становиться активной автоматически, когда существует реальный источник файлов/metadata.

Во время синхронизации показывать прогресс:

Reading 37 / 284
Metadata 37 / 284
Thumbnails 3 / 12

В верхнем правом углу сохранить счетчик:

0 FULL IMAGES
METADATA + THUMBNAILS

и реально гарантировать, что Activity не скачивает полноразмерные изображения без необходимости.

ВАЖНО ПО КОДУ:

1. Сначала изучи существующие:
FujiPTPManager.swift
FujiPTPProtocol.swift
ActivitySyncEngine.swift
ActivityView.swift
ActivityModels.swift

и связанные файлы.

2. Не переписывай рабочий PTP слой без необходимости.

3. Не ломай RAW Lab — он сейчас реально работает на X-Pro3.

4. Не создавай mock/demo данные.

5. Не заявляй поддержку PTP operation, пока камера реально не вернула успешный response.

6. Учитывай Optional значения ImageCaptureCore.

7. Соблюдай Swift Concurrency / MainActor isolation.

8. Не используй private API.

9. После изменений собери проект и исправь ВСЕ compile errors.

10. Не останавливайся после написания кода — выполни Build и проверь, что проект компилируется.

11. Если какая-либо возможность может быть проверена только на физической X-Pro3, не придумывай результат. Реализуй диагностику и напиши мне, какой тест нужно выполнить на камере.

КОНЕЧНАЯ ЦЕЛЬ:

Идеальный вариант:

USB RAW CONV./BACKUP RESTORE
        ↓
     iPhone
        ↓
    Fuji Scout
   ↙    ↓     ↘
Camera RAW Lab Activity

Один USB-режим камеры для всего приложения.

Если Fujifilm технически блокирует чтение SD-карты в этом режиме — приложение должно доказать это через PTP Diagnostics и использовать наиболее удобный реально возможный fallback.