feat: added total read/written that are from the disk stats itself and separate it from the SMART data (#2527)

This commit is contained in:
Serhiy Mytrovtsiy
2025-07-07 18:57:22 +02:00
parent bc43976ce6
commit c04220a6fd

View File

@@ -150,7 +150,7 @@ internal class Popup: PopupWrapper {
let views = self.disks.subviews.filter{ $0 is DiskView }.map{ $0 as! DiskView } let views = self.disks.subviews.filter{ $0 is DiskView }.map{ $0 as! DiskView }
value.reversed().forEach { (drive: drive) in value.reversed().forEach { (drive: drive) in
if let view = views.first(where: { $0.name == drive.mediaName }) { if let view = views.first(where: { $0.name == drive.mediaName }) {
view.updateReadWrite(read: drive.activity.read, write: drive.activity.write) view.updateStats(stats: drive.activity)
} }
} }
} }
@@ -339,10 +339,10 @@ internal class DiskView: NSStackView {
self.detailsView.update(smart: smart) self.detailsView.update(smart: smart)
} }
public func updateReadWrite(read: Int64, write: Int64) { public func updateStats(stats: stats) {
self.nameView.update(free: nil, read: read, write: write) self.nameView.update(free: nil, read: stats.read, write: stats.write)
self.chartView.update(read: read, write: write) self.chartView.update(read: stats.read, write: stats.write)
self.detailsView.update(read: read, write: write) self.detailsView.update(stats: stats)
} }
public func setChartColor(read: NSColor? = nil, write: NSColor? = nil) { public func setChartColor(read: NSColor? = nil, write: NSColor? = nil) {
self.chartView.setColors(read: read, write: write) self.chartView.setColors(read: read, write: write)
@@ -721,6 +721,9 @@ internal class DetailsView: NSStackView {
private var totalReadValueField: ValueField? private var totalReadValueField: ValueField?
private var totalWrittenValueField: ValueField? private var totalWrittenValueField: ValueField?
private var smartTotalReadValueField: ValueField?
private var smartTotalWrittenValueField: ValueField?
private var temperatureValueField: ValueField? private var temperatureValueField: ValueField?
private var healthValueField: ValueField? private var healthValueField: ValueField?
private var powerCyclesValueField: ValueField? private var powerCyclesValueField: ValueField?
@@ -765,7 +768,7 @@ internal class DetailsView: NSStackView {
} }
private func initSpeed() -> NSView { private func initSpeed() -> NSView {
let view: NSView = NSView(frame: NSRect(x: 0, y: 0, width: self.frame.width, height: 44)) let view: NSView = NSView(frame: NSRect(x: 0, y: 0, width: self.frame.width, height: 88))
view.widthAnchor.constraint(equalToConstant: view.bounds.width).isActive = true view.widthAnchor.constraint(equalToConstant: view.bounds.width).isActive = true
view.heightAnchor.constraint(equalToConstant: view.bounds.height).isActive = true view.heightAnchor.constraint(equalToConstant: view.bounds.height).isActive = true
let container: NSStackView = NSStackView(frame: NSRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height)) let container: NSStackView = NSStackView(frame: NSRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height))
@@ -774,9 +777,13 @@ internal class DetailsView: NSStackView {
(_, _, self.readSpeedValueField) = popupWithColorRow(container, color: self.readColor, title: "\(localizedString("Read")):", value: "0 KB/s") (_, _, self.readSpeedValueField) = popupWithColorRow(container, color: self.readColor, title: "\(localizedString("Read")):", value: "0 KB/s")
(_, _, self.writeSpeedValueField) = popupWithColorRow(container, color: self.writeColor, title: "\(localizedString("Write")):", value: "0 KB/s") (_, _, self.writeSpeedValueField) = popupWithColorRow(container, color: self.writeColor, title: "\(localizedString("Write")):", value: "0 KB/s")
self.totalReadValueField = popupRow(container, title: "\(localizedString("Total read")):", value: "0 KB").1
self.totalWrittenValueField = popupRow(container, title: "\(localizedString("Total written")):", value: "0 KB").1
self.readSpeedValueField?.font = NSFont.systemFont(ofSize: 11, weight: .regular) self.readSpeedValueField?.font = NSFont.systemFont(ofSize: 11, weight: .regular)
self.writeSpeedValueField?.font = NSFont.systemFont(ofSize: 11, weight: .regular) self.writeSpeedValueField?.font = NSFont.systemFont(ofSize: 11, weight: .regular)
self.totalReadValueField?.font = NSFont.systemFont(ofSize: 11, weight: .regular)
self.totalWrittenValueField?.font = NSFont.systemFont(ofSize: 11, weight: .regular)
view.addSubview(container) view.addSubview(container)
@@ -792,15 +799,15 @@ internal class DetailsView: NSStackView {
container.orientation = .vertical container.orientation = .vertical
container.spacing = 0 container.spacing = 0
self.totalReadValueField = popupRow(container, title: "\(localizedString("Total read")):", value: "0 KB").1 self.smartTotalReadValueField = popupRow(container, title: "\(localizedString("Total read")):", value: "0 KB").1
self.totalWrittenValueField = popupRow(container, title: "\(localizedString("Total written")):", value: "0 KB").1 self.smartTotalWrittenValueField = popupRow(container, title: "\(localizedString("Total written")):", value: "0 KB").1
self.temperatureValueField = popupRow(container, title: "\(localizedString("Temperature")):", value: "\(temperature(0))").1 self.temperatureValueField = popupRow(container, title: "\(localizedString("Temperature")):", value: "\(temperature(0))").1
self.healthValueField = popupRow(container, title: "\(localizedString("Health")):", value: "0%").1 self.healthValueField = popupRow(container, title: "\(localizedString("Health")):", value: "0%").1
self.powerCyclesValueField = popupRow(container, title: "\(localizedString("Power cycles")):", value: "0").1 self.powerCyclesValueField = popupRow(container, title: "\(localizedString("Power cycles")):", value: "0").1
self.powerOnHoursValueField = popupRow(container, title: "\(localizedString("Power on hours")):", value: "0").1 self.powerOnHoursValueField = popupRow(container, title: "\(localizedString("Power on hours")):", value: "0").1
self.totalReadValueField?.font = NSFont.systemFont(ofSize: 11, weight: .regular) self.smartTotalReadValueField?.font = NSFont.systemFont(ofSize: 11, weight: .regular)
self.totalWrittenValueField?.font = NSFont.systemFont(ofSize: 11, weight: .regular) self.smartTotalWrittenValueField?.font = NSFont.systemFont(ofSize: 11, weight: .regular)
self.temperatureValueField?.font = NSFont.systemFont(ofSize: 11, weight: .regular) self.temperatureValueField?.font = NSFont.systemFont(ofSize: 11, weight: .regular)
self.healthValueField?.font = NSFont.systemFont(ofSize: 11, weight: .regular) self.healthValueField?.font = NSFont.systemFont(ofSize: 11, weight: .regular)
self.powerCyclesValueField?.font = NSFont.systemFont(ofSize: 11, weight: .regular) self.powerCyclesValueField?.font = NSFont.systemFont(ofSize: 11, weight: .regular)
@@ -812,24 +819,25 @@ internal class DetailsView: NSStackView {
return view return view
} }
public func update(read: Int64?, write: Int64?) { public func update(stats: stats) {
guard self.window?.isVisible ?? false else { return } guard self.window?.isVisible ?? false else { return }
if let read = read { self.readSpeedValueField?.stringValue = Units(bytes: stats.read).getReadableSpeed()
self.readSpeedValueField?.stringValue = Units(bytes: read).getReadableSpeed() self.writeSpeedValueField?.stringValue = Units(bytes: stats.write).getReadableSpeed()
}
if let write = write { self.totalReadValueField?.stringValue = Units(bytes: stats.readBytes).getReadableMemory()
self.writeSpeedValueField?.stringValue = Units(bytes: write).getReadableSpeed() self.totalReadValueField?.toolTip = "\(stats.readBytes / (512 * 1000))"
} self.totalWrittenValueField?.stringValue = Units(bytes: stats.writeBytes).getReadableMemory()
self.totalWrittenValueField?.toolTip = "\(stats.writeBytes / (512 * 1000))"
} }
public func update(smart: smart_t?) { public func update(smart: smart_t?) {
guard self.window?.isVisible ?? false, let smart else { return } guard self.window?.isVisible ?? false, let smart else { return }
self.totalReadValueField?.toolTip = "\(smart.totalRead / (512 * 1000))" self.smartTotalReadValueField?.toolTip = "\(smart.totalRead / (512 * 1000))"
self.totalWrittenValueField?.toolTip = "\(smart.totalWritten / (512 * 1000))" self.smartTotalWrittenValueField?.toolTip = "\(smart.totalWritten / (512 * 1000))"
self.totalReadValueField?.stringValue = Units(bytes: smart.totalRead).getReadableMemory(style: .decimal) self.smartTotalReadValueField?.stringValue = Units(bytes: smart.totalRead).getReadableMemory()
self.totalWrittenValueField?.stringValue = Units(bytes: smart.totalWritten).getReadableMemory(style: .decimal) self.smartTotalWrittenValueField?.stringValue = Units(bytes: smart.totalWritten).getReadableMemory()
self.temperatureValueField?.stringValue = "\(temperature(Double(smart.temperature)))" self.temperatureValueField?.stringValue = "\(temperature(Double(smart.temperature)))"
self.healthValueField?.stringValue = "\(smart.life)%" self.healthValueField?.stringValue = "\(smart.life)%"