// // CameraTransferTask.swift // suixinkan // // Created by Codex on 2026/6/29. // import Foundation /// 相机传输任务状态。 enum CameraTransferStatus: String, Codable, Equatable { case pending case downloading case downloaded case uploading case uploaded case failed } /// 相机传输任务,表示从相机下载到上传登记的单条记录。 struct CameraTransferTask: Identifiable, Equatable, Codable { let id: UUID let assetID: String let filename: String var localPath: String? var remoteURL: String? var status: CameraTransferStatus var progress: Int var errorMessage: String? init( id: UUID = UUID(), assetID: String, filename: String, localPath: String? = nil, remoteURL: String? = nil, status: CameraTransferStatus = .pending, progress: Int = 0, errorMessage: String? = nil ) { self.id = id self.assetID = assetID self.filename = filename self.localPath = localPath self.remoteURL = remoteURL self.status = status self.progress = progress self.errorMessage = errorMessage } /// 本地文件 URL,支持相对路径与旧版绝对路径。 var localURL: URL? { guard let localPath, !localPath.isEmpty else { return nil } return CameraDownloadStorage.resolveLocalURL(from: localPath) } }