Files

37 lines
1.3 KiB
Swift

// Copyright (C) 2026 ysicing
// SPDX-License-Identifier: AGPL-3.0-or-later
import Foundation
/// 只保留上一轮的文件元数据和汇总,不常驻逐消息解析状态。
/// 文件集、内容、日期或时区变化时仍走原有增量检查点和跨文件去重流程。
struct LocalUsageScanCache {
struct Revision: Equatable {
struct File: Equatable {
let path: String
let size: UInt64
let modified: Date
let inode: UInt64
}
let files: [File]
let day: Date
let timeZone: String
init(files: [URL], now: Date, calendar: Calendar) throws {
self.files = try files.map { url in
try Task.checkCancellation()
let path = url.resolvingSymlinksInPath().path
let attributes = try FileManager.default.attributesOfItem(atPath: path)
return File(path: path, size: (attributes[.size] as? NSNumber)?.uint64Value ?? 0,
modified: attributes[.modificationDate] as? Date ?? .distantPast,
inode: (attributes[.systemFileNumber] as? NSNumber)?.uint64Value ?? 0)
}
day = calendar.startOfDay(for: now)
timeZone = calendar.timeZone.identifier
}
}
let revision: Revision
let report: LocalUsageReport
}