31 lines
1.4 KiB
Swift
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 }
|
|
}
|
|
}
|