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