fix: disk memory conversion (macOS report not bytes) (#233)

This commit is contained in:
Serhiy Mytrovtsiy
2020-12-19 21:37:01 +01:00
parent a93994f0f2
commit 8902efbea9
7 changed files with 76 additions and 42 deletions

View File

@@ -14,7 +14,7 @@ import StatsKit
public class MemoryWidget: Widget {
private var orderReversedState: Bool = false
private var value: (Int64, Int64) = (0, 0)
private var value: (String, String) = ("0", "0")
private let store: UnsafePointer<Store>?
@@ -27,10 +27,10 @@ public class MemoryWidget: Widget {
if let previewConfig = config!["Preview"] as? NSDictionary {
configuration = previewConfig
if let value = configuration["Value"] as? String {
let values = value.split(separator: ",").map{ (Int64($0) ) }
let values = value.split(separator: ",").map{ (String($0) ) }
if values.count == 2 {
self.value.0 = values[0]!
self.value.1 = values[1]!
self.value.0 = values[0]
self.value.1 = values[1]
}
}
}
@@ -83,7 +83,7 @@ public class MemoryWidget: Widget {
str.draw(with: rect)
rect = CGRect(x: letterWidth, y: freeY, width: rowWidth, height: rowHeight)
str = NSAttributedString.init(string: Units(bytes: self.value.0).getReadableMemory(), attributes: attributes)
str = NSAttributedString.init(string: self.value.0, attributes: attributes)
str.draw(with: rect)
rect = CGRect(x: Constants.Widget.margin.x, y: usedY, width: letterWidth, height: rowHeight)
@@ -91,11 +91,11 @@ public class MemoryWidget: Widget {
str.draw(with: rect)
rect = CGRect(x: letterWidth, y: usedY, width: rowWidth, height: rowHeight)
str = NSAttributedString.init(string: Units(bytes: self.value.1).getReadableMemory(), attributes: attributes)
str = NSAttributedString.init(string: self.value.1, attributes: attributes)
str.draw(with: rect)
}
public func setValue(_ value: (Int64, Int64)) {
public func setValue(_ value: (String, String)) {
self.value = value
DispatchQueue.main.async(execute: {

View File

@@ -63,7 +63,7 @@
<key>Preview</key>
<dict>
<key>Value</key>
<string>51383185408,198466408448</string>
<string>47.85 GB, 184.84 GB</string>
</dict>
<key>Order</key>
<integer>2</integer>

View File

@@ -109,7 +109,7 @@ public class Disk: Module {
self.readyHandler()
}
self.capacityReader?.callbackHandler = { [unowned self] value in
self.capacityCallback(value: value)
self.capacityCallback(value)
}
self.settingsView.selectedDiskHandler = { [unowned self] value in
@@ -134,27 +134,22 @@ public class Disk: Module {
}
}
private func capacityCallback(value: DiskList?) {
if value == nil {
private func capacityCallback(_ raw: DiskList?) {
guard raw != nil, let value = raw else {
return
}
DispatchQueue.main.async(execute: {
self.popupView.usageCallback(value!)
self.popupView.usageCallback(value)
})
self.settingsView.setList(value!)
self.settingsView.setList(value)
var d = value!.getDiskByName(self.selectedDisk)
if d == nil {
d = value!.getRootDisk()
}
if d == nil {
guard let d = value.getDiskByName(self.selectedDisk) ?? value.getRootDisk() else {
return
}
let total = d!.size
let free = d!.free
let total = d.size
let free = d.free
let usedSpace = total - free
let percentage = Double(usedSpace) / Double(total)
@@ -165,10 +160,10 @@ public class Disk: Module {
widget.setValue([percentage])
}
if let widget = self.widget as? MemoryWidget {
widget.setValue((free, usedSpace))
widget.setValue((DiskSize(free).getReadableMemory(), DiskSize(usedSpace).getReadableMemory()))
}
if let widget = self.widget as? SpeedWidget {
widget.setValue(upload: d?.stats?.write ?? 0, download: d?.stats?.read ?? 0)
widget.setValue(upload: d.stats?.write ?? 0, download: d.stats?.read ?? 0)
}
}
}

View File

@@ -99,7 +99,6 @@ internal class DiskView: NSView {
}
override func updateLayer() {
// self.layer?.backgroundColor = NSColor.red.cgColor
self.layer?.backgroundColor = isDarkMode ? NSColor(hexString: "#111111", alpha: 0.25).cgColor : NSColor(hexString: "#f5f5f5", alpha: 1).cgColor
}
@@ -317,9 +316,9 @@ internal class DiskLegendView: NSView {
var value: String
if self.showUsedSpace {
value = LocalizedString("Used disk memory", Units(bytes: (self.size - free)).getReadableMemory(), Units(bytes: self.size).getReadableMemory())
value = LocalizedString("Used disk memory", DiskSize(self.size - free).getReadableMemory(), DiskSize(self.size).getReadableMemory())
} else {
value = LocalizedString("Free disk memory", Units(bytes: free).getReadableMemory(), Units(bytes: self.size).getReadableMemory())
value = LocalizedString("Free disk memory", DiskSize(free).getReadableMemory(), DiskSize(self.size).getReadableMemory())
}
return value

View File

@@ -67,7 +67,7 @@
<key>Preview</key>
<dict>
<key>Value</key>
<string>51383185408,198466408448</string>
<string>7.75 GB, 8.25 GB</string>
</dict>
<key>Order</key>
<integer>4</integer>

View File

@@ -76,7 +76,7 @@ public class Memory: Module {
self.readyHandler()
}
self.usageReader?.callbackHandler = { [unowned self] value in
self.loadCallback(value: value)
self.loadCallback(value)
}
self.processReader?.callbackHandler = { [unowned self] value in
@@ -93,34 +93,36 @@ public class Memory: Module {
}
}
private func loadCallback(value: RAM_Usage?) {
if value == nil {
private func loadCallback(_ raw: RAM_Usage?) {
guard raw != nil, let value = raw else {
return
}
self.popupView.loadCallback(value!)
self.popupView.loadCallback(value)
if let widget = self.widget as? Mini {
widget.setValue(value!.usage)
widget.setPressure(value?.pressureLevel ?? 0)
widget.setValue(value.usage)
widget.setPressure(value.pressureLevel)
}
if let widget = self.widget as? LineChart {
widget.setValue(value!.usage)
widget.setPressure(value?.pressureLevel ?? 0)
widget.setValue(value.usage)
widget.setPressure(value.pressureLevel)
}
if let widget = self.widget as? BarChart {
widget.setValue([value!.usage])
widget.setPressure(value?.pressureLevel ?? 0)
widget.setValue([value.usage])
widget.setPressure(value.pressureLevel)
}
if let widget = self.widget as? PieChart {
let total: Double = value?.total ?? 1
let total: Double = value.total
widget.setValue([
circle_segment(value: value!.active/total, color: NSColor.systemBlue),
circle_segment(value: value!.wired/total, color: NSColor.systemOrange),
circle_segment(value: value!.compressed/total, color: NSColor.systemPink)
circle_segment(value: value.active/total, color: NSColor.systemBlue),
circle_segment(value: value.wired/total, color: NSColor.systemOrange),
circle_segment(value: value.compressed/total, color: NSColor.systemPink)
])
}
if let widget = self.widget as? MemoryWidget {
widget.setValue((Int64(value!.free), Int64(value!.used)))
let free = Units(bytes: Int64(value.free)).getReadableSpeed()
let used = Units(bytes: Int64(value.used)).getReadableSpeed()
widget.setValue((free, used))
}
}
}

View File

@@ -167,6 +167,44 @@ public struct Units {
}
}
public struct DiskSize {
public let value: Int64
public init(_ size: Int64) {
self.value = size
}
public var kilobytes: Double {
return Double(value) / 1_000
}
public var megabytes: Double {
return kilobytes / 1_000
}
public var gigabytes: Double {
return megabytes / 1_000
}
public var terabytes: Double {
return gigabytes / 1_000
}
public func getReadableMemory() -> String {
switch value {
case 0..<1_000:
return "0 KB"
case 1_000..<(1_000 * 1_000):
return String(format: "%.0f KB", kilobytes)
case 1_000..<(1_000 * 1_000 * 1_000):
return String(format: "%.0f MB", megabytes)
case 1_000..<(1_000 * 1_000 * 1_000 * 1_000):
return String(format: "%.2f GB", gigabytes)
case (1_000 * 1_000 * 1_000 * 1_000)...Int64.max:
return String(format: "%.2f TB", terabytes)
default:
return String(format: "%.0f KB", kilobytes)
}
}
}
public class LabelField: NSTextField {
public init(frame: NSRect, _ label: String = "") {
super.init(frame: frame)