You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
22 lines
891 B
22 lines
891 B
import Foundation
|
|
|
|
// Reads a file's size + modification date and derives the library fileHash.
|
|
// Centralizes the computation so ScannerService (import) and TrackEditService
|
|
// (post-writeback refresh) can never drift. Hash uses Track.computeHash so the
|
|
// format stays identical to import-time hashes.
|
|
nonisolated struct TrackFileStats: Sendable {
|
|
let fileSize: Int64
|
|
let dateModified: Date
|
|
let fileHash: String
|
|
|
|
static func compute(for url: URL) throws -> TrackFileStats {
|
|
let attrs = try FileManager.default.attributesOfItem(atPath: url.path)
|
|
let fileSize = attrs[.size] as? Int64 ?? 0
|
|
let modDate = attrs[.modificationDate] as? Date ?? Date()
|
|
return TrackFileStats(
|
|
fileSize: fileSize,
|
|
dateModified: modDate,
|
|
fileHash: Track.computeHash(fileSize: fileSize, modificationDate: modDate)
|
|
)
|
|
}
|
|
}
|
|
|