apple_kit

Apple-native services for Radroots iOS and macOS apps
git clone https://radroots.dev/git/apple_kit.git
Log | Files | Refs | README | LICENSE

RadrootsFileMaintenanceEntry.swift (2071B)


      1 import Darwin
      2 import Foundation
      3 
      4 /// Opaque captured identity. A candidate is valid only for its originating scan;
      5 /// neither its name nor its age is independent authority to remove a file.
      6 public struct RadrootsFileMaintenanceEntry: Sendable {
      7     public enum Kind: Sendable { case regularFile, directory, other }
      8 
      9     public let name: String
     10     public let kind: Kind
     11     public let sizeBytes: Int64
     12     public let modifiedAt: Date
     13     let scanID: UUID
     14     let identity: RadrootsFileMaintenanceIdentity
     15 
     16     init(name: String, value: stat, scanID: UUID) {
     17         self.name = name
     18         kind = switch value.st_mode & S_IFMT {
     19         case S_IFREG: .regularFile
     20         case S_IFDIR: .directory
     21         default: .other
     22         }
     23         sizeBytes = value.st_size
     24         modifiedAt = Date(timeIntervalSince1970:
     25             Double(value.st_mtimespec.tv_sec) + Double(value.st_mtimespec.tv_nsec) / 1_000_000_000)
     26         self.scanID = scanID
     27         identity = RadrootsFileMaintenanceIdentity(value)
     28     }
     29 }
     30 
     31 public struct RadrootsFileMaintenancePage: Sendable {
     32     public let entries: [RadrootsFileMaintenanceEntry]
     33     /// Includes ignored dot entries, disappeared entries and the coordination file.
     34     public let scannedEntries: Int
     35     /// End of this live stream, not a snapshot or a global absence assertion.
     36     public let reachedEnd: Bool
     37 }
     38 
     39 struct RadrootsFileMaintenanceIdentity: Sendable, Equatable {
     40     let device: dev_t
     41     let inode: ino_t
     42     let mode: mode_t
     43     let links: nlink_t
     44     let owner: uid_t
     45     let size: off_t
     46     let modifiedSeconds: Int
     47     let modifiedNanos: Int
     48     let changedSeconds: Int
     49     let changedNanos: Int
     50 
     51     init(_ value: stat) {
     52         device = value.st_dev
     53         inode = value.st_ino
     54         mode = value.st_mode
     55         links = value.st_nlink
     56         owner = value.st_uid
     57         size = value.st_size
     58         modifiedSeconds = value.st_mtimespec.tv_sec
     59         modifiedNanos = value.st_mtimespec.tv_nsec
     60         changedSeconds = value.st_ctimespec.tv_sec
     61         changedNanos = value.st_ctimespec.tv_nsec
     62     }
     63 }