Загрузка данных
Нужно исправить модуль 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.