mirror of
https://github.com/morgan9e/macos-stats
synced 2026-04-14 00:04:15 +09:00
fix: disk memory conversion (macOS report not bytes) (#233)
This commit is contained in:
@@ -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: {
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user