Add TravelAlbum, ProfileSpace, and wired camera transfer modules.

Introduce travel album entry with Sony PTP tethering pipeline, profile space settings page, home routing updates, Launch Screen storyboard, and related tests/docs.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-30 09:41:05 +08:00
parent 5692134efc
commit d2fe5d71e4
48 changed files with 6477 additions and 11 deletions

View File

@ -0,0 +1,33 @@
import Foundation
enum CameraServiceError: LocalizedError {
case notConnected
case assetNotFound
case downloadFailed(String)
case permissionDenied
var errorDescription: String? {
switch self {
case .notConnected:
"相机未连接"
case .assetNotFound:
"找不到相机内的文件"
case .downloadFailed(let reason):
"下载失败:\(reason)"
case .permissionDenied:
"未获得相机访问权限"
}
}
}
protocol CameraServiceProtocol: AnyObject {
var brand: CameraBrand { get }
var connectionState: CameraConnectionState { get }
var onConnectionStateChange: ((CameraConnectionState) -> Void)? { get set }
var onNewAsset: ((CameraAsset) -> Void)? { get set }
func connect() async
func disconnect() async
func listAssets() async throws -> [CameraAsset]
func downloadAsset(_ asset: CameraAsset) async throws -> URL
}