fix: changed the way to get a disk capacity (#1180)

This commit is contained in:
Serhiy Mytrovtsiy
2022-11-19 16:40:49 +01:00
parent e9bc4cc5d3
commit dea66ae900

View File

@@ -51,6 +51,7 @@ internal class CapacityReader: Reader<Disks> {
if var d = driveDetails(disk, removableState: removableState) {
if let path = d.path {
d.free = self.freeDiskSpaceInBytes(path)
d.size = self.totalDiskSpaceInBytes(path)
}
self.list.append(d)
self.list.sort()
@@ -92,6 +93,30 @@ internal class CapacityReader: Reader<Disks> {
return 0
}
private func totalDiskSpaceInBytes(_ path: URL) -> Int64 {
do {
let systemAttributes = try FileManager.default.attributesOfFileSystem(forPath: path.path)
if let totalSpace = (systemAttributes[FileAttributeKey.systemSize] as? NSNumber)?.int64Value {
return totalSpace
}
} catch let err {
error("error retrieving total space #2: \(err.localizedDescription)", log: self.log)
}
do {
if let url = URL(string: path.absoluteString) {
let values = try url.resourceValues(forKeys: [.volumeTotalCapacityKey])
if let space = values.volumeAvailableCapacityForImportantUsage, space != 0 {
return space
}
}
} catch let err {
error("error retrieving total space #1: \(err.localizedDescription)", log: self.log)
}
return 0
}
}
internal class ActivityReader: Reader<Disks> {
@@ -206,9 +231,6 @@ private func driveDetails(_ disk: DADisk, removableState: Bool) -> drive? {
}
}
}
if let mediaSize = dict[kDADiskDescriptionMediaSizeKey as String] {
d.size = Int64(truncating: mediaSize as! NSNumber)
}
if let deviceModel = dict[kDADiskDescriptionDeviceModelKey as String] {
d.model = (deviceModel as! String).trimmingCharacters(in: .whitespacesAndNewlines)
}
@@ -256,11 +278,9 @@ public func getDeviceIOParent(_ obj: io_registry_entry_t, level: Int) -> io_regi
return nil
}
for _ in 1...level {
if IORegistryEntryGetParentEntry(parent, kIOServicePlane, &parent) != KERN_SUCCESS {
IOObjectRelease(parent)
return nil
}
for _ in 1...level where IORegistryEntryGetParentEntry(parent, kIOServicePlane, &parent) != KERN_SUCCESS {
IOObjectRelease(parent)
return nil
}
return parent