From 2cc7e5fb0165e6a1e32cf33168d059f9e4faa39d Mon Sep 17 00:00:00 2001 From: jinyaqiu Date: Thu, 28 Aug 2025 14:47:48 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=92=8C=E5=8E=BB?= =?UTF-8?q?=E9=87=8D=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wake/View/Upload/MediaUploadView.swift | 74 +++++++++++--------------- 1 file changed, 30 insertions(+), 44 deletions(-) diff --git a/wake/View/Upload/MediaUploadView.swift b/wake/View/Upload/MediaUploadView.swift index 640a26e..a63a635 100644 --- a/wake/View/Upload/MediaUploadView.swift +++ b/wake/View/Upload/MediaUploadView.swift @@ -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 {