修复 OTG 列表删除照片后边拍边传仍会带回已删项的问题。

删除时同步清理管道任务并维护 excludedAssetIDs,避免 notify 将无本地文件的旧任务重新展示为仅文件名的待上传项。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-01 15:58:25 +08:00
parent 90d135b5ac
commit 19d681192c
4 changed files with 109 additions and 0 deletions

View File

@ -27,6 +27,8 @@ final class CameraTransferPipeline {
private let deferredNotifyInterval: TimeInterval = 0.15
private let maxConcurrentUploads = 3
private var isUIAttached = false
/// asset ID
private(set) var excludedAssetIDs: Set<String> = []
///
init(cameraService: any CameraServiceProtocol) {
@ -224,7 +226,24 @@ final class CameraTransferPipeline {
tasks.first { $0.assetID == assetID }
}
/// asset ID sync/notify
func setExcludedAssetIDs(_ ids: Set<String>) {
excludedAssetIDs = ids
}
/// asset
func removeAsset(assetID: String) {
guard !assetID.isEmpty else { return }
excludedAssetIDs.insert(assetID)
tasks.removeAll { $0.assetID == assetID }
autoUploadEligibleAssetIDs.remove(assetID)
activeUploadAssetIDs.remove(assetID)
inFlightAssetIDs.remove(assetID)
lastNotifiedProgressByAssetID.removeValue(forKey: assetID)
}
private func handleNewAsset(_ asset: CameraAsset, skipIfExists: Bool) async {
if excludedAssetIDs.contains(asset.id) { return }
if skipIfExists,
let existing = tasks.first(where: { $0.assetID == asset.id }),
existing.status == .uploaded || existing.status == .downloaded {