// // CloudDriveFormatter.swift // suixinkan // import Foundation import UIKit /// 云盘展示格式化工具。 enum CloudDriveFormatter { /// 文件类型名称。 static func typeName(_ type: Int) -> String { switch type { case 1: "视频" case 2: "图片" case 99: "文件夹" default: "文件" } } /// 文件描述。 static func fileDescription(_ file: CloudFile) -> String { let createdDate = dateOnly(file.createdAt) if file.isFolder { return "\(createdDate) | \(file.childNum)个项目" } return "\(createdDate) | \(fileSize(file.fileSize))" } /// 文件大小展示。 static func fileSize(_ bytes: Int64) -> String { guard bytes > 0 else { return "0 B" } let units = ["B", "KB", "MB", "GB", "TB"] var value = Double(bytes) var index = 0 while value >= 1024, index < units.count - 1 { value /= 1024 index += 1 } return String(format: "%.2f %@", value, units[index]) } /// 将后端时间转换为 Android 列表使用的 yyyy-MM-dd 日期。 static func dateOnly(_ value: String) -> String { guard !value.isEmpty else { return "" } if value.count >= 10 { let endIndex = value.index(value.startIndex, offsetBy: 10) return String(value[.. String { let ext = URL(string: value)?.pathExtension ?? URL(fileURLWithPath: value).pathExtension return ext.isEmpty ? typeName(0) : ext.uppercased() } } /// 云盘 Android 同名图片资源访问工具。 enum CloudDriveAsset { /// 返回云盘图片资源,缺失时使用系统图标兜底。 static func image(named name: String, fallbackSystemName: String) -> UIImage? { UIImage(named: name)?.withRenderingMode(.alwaysOriginal) ?? UIImage(systemName: fallbackSystemName) } /// 返回缩放到指定点尺寸的云盘图标。 static func resizedImage(named name: String, fallbackSystemName: String, size: CGSize) -> UIImage? { guard let source = image(named: name, fallbackSystemName: fallbackSystemName) else { return nil } let renderer = UIGraphicsImageRenderer(size: size) return renderer.image { _ in source.draw(in: CGRect(origin: .zero, size: size)) }.withRenderingMode(.alwaysOriginal) } }