fix: moved DispatchSource.MemoryPressureEvent to custom RAMPressure enum. Fixed the crashes on some macs (#2212)

This commit is contained in:
Serhiy Mytrovtsiy
2024-11-14 17:00:19 +01:00
parent 354698a389
commit 3d0bfa456d
14 changed files with 65 additions and 43 deletions

View File

@@ -26,16 +26,12 @@ public struct RAM_Usage: Codable {
var app: Double
var cache: Double
var rawPressureLevel: UInt
var swap: Swap
var pressure: Pressure
public var usage: Double {
get { Double((self.total - self.free) / self.total) }
}
public var pressureLevel: DispatchSource.MemoryPressureEvent {
DispatchSource.MemoryPressureEvent(rawValue: self.rawPressureLevel)
}
}
public struct Swap: Codable {
@@ -44,6 +40,11 @@ public struct Swap: Codable {
var free: Double
}
public struct Pressure: Codable {
let level: Int
let value: RAMPressure
}
public class RAM: Module {
private let popupView: Popup
private let settingsView: Settings
@@ -141,10 +142,10 @@ public class RAM: Module {
switch w.item {
case let widget as Mini:
widget.setValue(value.usage)
widget.setPressure(value.pressureLevel)
widget.setPressure(value.pressure.value)
case let widget as LineChart:
widget.setValue(value.usage)
widget.setPressure(value.pressureLevel)
widget.setPressure(value.pressure.value)
case let widget as BarChart:
if self.splitValueState {
widget.setValue([[
@@ -155,7 +156,7 @@ public class RAM: Module {
} else {
widget.setValue([[ColorValue(value.usage)]])
widget.setColorZones((0.8, 0.95))
widget.setPressure(value.pressureLevel)
widget.setPressure(value.pressure.value)
}
case let widget as PieChart:
widget.setValue([
@@ -167,7 +168,7 @@ public class RAM: Module {
let free = Units(bytes: Int64(value.free)).getReadableMemory()
let used = Units(bytes: Int64(value.used)).getReadableMemory()
widget.setValue((free, used), usedPercentage: value.usage)
widget.setPressure(value.pressureLevel)
widget.setPressure(value.pressure.value)
case let widget as Tachometer:
widget.setValue([
circle_segment(value: value.app/total, color: self.appColor),
@@ -175,7 +176,7 @@ public class RAM: Module {
circle_segment(value: value.compressed/total, color: self.compressedColor)
])
case let widget as TextWidget:
var text = self.textValue
var text = "\(self.textValue)"
let pairs = TextWidget.parseText(text)
pairs.forEach { pair in
var replacement: String? = nil
@@ -203,8 +204,8 @@ public class RAM: Module {
}
case "$pressure":
switch pair.value {
case "value": replacement = value.pressureLevel.description
case "level": replacement = value.rawPressureLevel.description
case "level": replacement = "\(value.pressure.level)"
case "value": replacement = value.pressure.value.rawValue
default: return
}
default: return