feat: add AI retouch and album preview actions
This commit is contained in:
@@ -84,10 +84,10 @@ struct TravelAlbumPreviewProject: Identifiable, Sendable, Hashable {
|
||||
assets.first { $0.kind == kind }
|
||||
}
|
||||
|
||||
/// 将当前素材映射为仅含原图的预览项目;新接口接入后替换此适配层即可。
|
||||
/// 将素材映射为原图及实际存在的 AI 精修、氛围感结果图。
|
||||
init(material: TravelAlbumMaterial) {
|
||||
originalMaterialId = material.id
|
||||
assets = [
|
||||
var mappedAssets = [
|
||||
TravelAlbumPreviewAsset(
|
||||
id: "original-\(material.id)",
|
||||
kind: .original,
|
||||
@@ -97,6 +97,33 @@ struct TravelAlbumPreviewProject: Identifiable, Sendable, Hashable {
|
||||
fileSize: material.fileSize
|
||||
),
|
||||
]
|
||||
let refinedURL = material.aiRefinedURL.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
if !refinedURL.isEmpty {
|
||||
mappedAssets.append(
|
||||
TravelAlbumPreviewAsset(
|
||||
id: "retouched-\(material.id)",
|
||||
kind: .retouched,
|
||||
fileURL: refinedURL,
|
||||
coverURL: refinedURL,
|
||||
fileName: material.fileName,
|
||||
fileSize: material.fileSize
|
||||
)
|
||||
)
|
||||
}
|
||||
let atmosphereURL = material.aiAtmosphereURL.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
if !atmosphereURL.isEmpty {
|
||||
mappedAssets.append(
|
||||
TravelAlbumPreviewAsset(
|
||||
id: "atmosphere-\(material.id)",
|
||||
kind: .atmosphere,
|
||||
fileURL: atmosphereURL,
|
||||
coverURL: atmosphereURL,
|
||||
fileName: material.fileName,
|
||||
fileSize: material.fileSize
|
||||
)
|
||||
)
|
||||
}
|
||||
assets = mappedAssets
|
||||
}
|
||||
|
||||
/// 创建包含关联图片的项目,主要供适配器和测试使用。
|
||||
@@ -142,6 +169,15 @@ enum TravelAlbumPreviewNavigator {
|
||||
$0.projectIndex == current.projectIndex - 1 && $0.kind == .original
|
||||
} ?? currentIndex - 1
|
||||
}
|
||||
|
||||
/// 返回删除当前项目后应展示的项目索引;优先保持原索引以显示下一张,末项则回退上一张。
|
||||
static func projectIndexAfterDeletion(
|
||||
deletedProjectIndex: Int,
|
||||
remainingProjectCount: Int
|
||||
) -> Int? {
|
||||
guard remainingProjectCount > 0 else { return nil }
|
||||
return min(max(0, deletedProjectIndex), remainingProjectCount - 1)
|
||||
}
|
||||
}
|
||||
|
||||
/// 预览操作执行结果,便于后续替换真实业务接口。
|
||||
|
||||
Reference in New Issue
Block a user