feat: 添加和去重处理
This commit is contained in:
parent
b3d0d026bf
commit
2cc7e5fb01
@ -139,57 +139,43 @@ struct MediaUploadView: View {
|
|||||||
print("🔄 开始处理用户选择的媒体文件")
|
print("🔄 开始处理用户选择的媒体文件")
|
||||||
print("📌 新选择的媒体数量: \(newSelections.count)")
|
print("📌 新选择的媒体数量: \(newSelections.count)")
|
||||||
|
|
||||||
// 记录当前已选择的媒体ID
|
// 1. 去重处理:过滤掉已经存在的媒体项
|
||||||
let existingMediaIDs = uploadManager.selectedMedia.map { $0.id }
|
var uniqueNewMedia: [MediaType] = []
|
||||||
print("📋 当前已选择的媒体ID: \(existingMediaIDs)")
|
|
||||||
|
|
||||||
// 只处理尚未选择的媒体项
|
for newItem in newSelections {
|
||||||
let newItems = newSelections.filter { newItem in
|
let isDuplicate = uploadManager.selectedMedia.contains { existingItem in
|
||||||
let isNew = !uploadManager.selectedMedia.contains { $0.id == newItem.id }
|
switch (existingItem, newItem) {
|
||||||
print("🔍 检查媒体项 \(newItem.id) - \(isNew ? "新添加" : "已存在")")
|
case (.image(let existingImage), .image(let newImage)):
|
||||||
return isNew
|
return existingImage.pngData() == newImage.pngData()
|
||||||
}
|
case (.video(let existingURL, _), .video(let newURL, _)):
|
||||||
|
return existingURL == newURL
|
||||||
print("✅ 过滤后的新添加媒体数量: \(newItems.count)")
|
default:
|
||||||
|
return false
|
||||||
if !newItems.isEmpty {
|
|
||||||
print("🔄 开始处理 \(newItems.count) 个新添加的媒体项...")
|
|
||||||
|
|
||||||
// 记录新添加的媒体类型
|
|
||||||
newItems.forEach { item in
|
|
||||||
switch item {
|
|
||||||
case .image(let uiImage):
|
|
||||||
print("🖼️ 添加图片 - 尺寸: \(uiImage.size.width)x\(uiImage.size.height)")
|
|
||||||
case .video(let url, _):
|
|
||||||
print("🎥 添加视频 - URL: \(url.lastPathComponent)")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 1. 清空现有媒体
|
if !isDuplicate {
|
||||||
uploadManager.clearAllMedia()
|
uniqueNewMedia.append(newItem)
|
||||||
print("🧹 已清空现有媒体列表")
|
} else {
|
||||||
|
print("⚠️ 检测到重复文件,已跳过: \(newItem)")
|
||||||
// 2. 添加新选择的媒体
|
|
||||||
uploadManager.addMedia(newItems)
|
|
||||||
print("✅ 已添加 \(newItems.count) 个媒体项到上传管理器")
|
|
||||||
|
|
||||||
// 3. 更新选中状态
|
|
||||||
if selectedIndices.isEmpty, let firstItem = newItems.first {
|
|
||||||
selectedIndices = [0]
|
|
||||||
selectedMedia = firstItem
|
|
||||||
print("👆 自动选择第一个新增的媒体项: \(firstItem.id)")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4. 开始上传
|
|
||||||
print("🚀 开始上传媒体...")
|
|
||||||
uploadManager.startUpload()
|
|
||||||
} else {
|
|
||||||
print("ℹ️ 没有新的媒体项需要添加")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 重置选择
|
// 2. 添加新文件
|
||||||
mediaPickerSelection = []
|
if !uniqueNewMedia.isEmpty {
|
||||||
print("🔄 已重置媒体选择器状态")
|
print("✅ 添加 \(uniqueNewMedia.count) 个新文件")
|
||||||
|
uploadManager.addMedia(uniqueNewMedia)
|
||||||
|
|
||||||
|
// 如果没有当前选中的媒体,则选择第一个新添加的
|
||||||
|
if selectedMedia == nil, let firstNewItem = uniqueNewMedia.first {
|
||||||
|
selectedMedia = firstNewItem
|
||||||
|
}
|
||||||
|
|
||||||
|
// 开始上传
|
||||||
|
uploadManager.startUpload()
|
||||||
|
} else {
|
||||||
|
print("ℹ️ 没有新文件需要添加,所有选择的文件都已存在")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
imageSelectionLimit: max(0, 20 - uploadManager.selectedMedia.filter {
|
imageSelectionLimit: max(0, 20 - uploadManager.selectedMedia.filter {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user