diff --git a/ModuleKit/Widgets/Memory.swift b/ModuleKit/Widgets/Memory.swift index acb96f8b..75ca8cc3 100644 --- a/ModuleKit/Widgets/Memory.swift +++ b/ModuleKit/Widgets/Memory.swift @@ -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? @@ -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: { diff --git a/Modules/Disk/config.plist b/Modules/Disk/config.plist index a8c648a1..9fb9bcd8 100644 --- a/Modules/Disk/config.plist +++ b/Modules/Disk/config.plist @@ -63,7 +63,7 @@ Preview Value - 51383185408,198466408448 + 47.85 GB, 184.84 GB Order 2 diff --git a/Modules/Disk/main.swift b/Modules/Disk/main.swift index 0a017576..78fb6a57 100644 --- a/Modules/Disk/main.swift +++ b/Modules/Disk/main.swift @@ -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) } } } diff --git a/Modules/Disk/popup.swift b/Modules/Disk/popup.swift index 0be06707..c8831a79 100644 --- a/Modules/Disk/popup.swift +++ b/Modules/Disk/popup.swift @@ -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 diff --git a/Modules/Memory/config.plist b/Modules/Memory/config.plist index 4865eded..fa7588f2 100644 --- a/Modules/Memory/config.plist +++ b/Modules/Memory/config.plist @@ -67,7 +67,7 @@ Preview Value - 51383185408,198466408448 + 7.75 GB, 8.25 GB Order 4 diff --git a/Modules/Memory/main.swift b/Modules/Memory/main.swift index 49ec371c..dddaaed2 100644 --- a/Modules/Memory/main.swift +++ b/Modules/Memory/main.swift @@ -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)) } } } diff --git a/StatsKit/helpers.swift b/StatsKit/helpers.swift index ed0ab563..e0dcfb2d 100644 --- a/StatsKit/helpers.swift +++ b/StatsKit/helpers.swift @@ -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)