Files
reimburse/reimburse/FolderImportSource.swift
T
2026-09-16 13:07:16 +08:00

31 lines
1.4 KiB
Swift

import Foundation
enum FolderImportSource {
static func validate(_ sources: [URL]) throws -> URL {
guard sources.count == 1, let source = sources.first else {
throw ValidationFailure(message: "请一次拖入一个材料根文件夹,不要同时拖入多个文件夹或文件。")
}
guard source.isFileURL else {
throw ValidationFailure(message: "请从访达拖入本机材料文件夹,不支持网页链接。")
}
let values: URLResourceValues
do {
values = try source.resourceValues(forKeys: [.isDirectoryKey, .isPackageKey, .isReadableKey])
} catch {
throw ValidationFailure(message: "无法读取这个文件夹,请确认它仍然存在,或使用“选择文件夹”重新授权。")
}
guard values.isDirectory == true, values.isPackage != true else {
throw ValidationFailure(message: "请拖入包含“发票”“付款截图”“实物照片”子目录的材料根文件夹,而不是单个文件或应用程序。")
}
guard values.isReadable == true else {
throw ValidationFailure(message: "没有读取这个文件夹的权限,请使用“选择文件夹”重新授权。")
}
return source
}
private struct ValidationFailure: LocalizedError {
let message: String
var errorDescription: String? { message }
}
}