fix: changed reference from unowned to weak in the modules (prevents crash in some cases)

This commit is contained in:
Serhiy Mytrovtsiy
2023-08-13 13:15:27 +02:00
parent d523a90103
commit 9115329767
9 changed files with 133 additions and 149 deletions

View File

@@ -72,28 +72,28 @@ public class Battery: Module {
self.usageReader = UsageReader(.battery)
self.processReader = ProcessReader(.battery)
self.settingsView.callback = {
self.settingsView.callback = { [weak self] in
DispatchQueue.global(qos: .background).async {
self.usageReader?.read()
self?.usageReader?.read()
}
}
self.settingsView.callbackWhenUpdateNumberOfProcesses = {
self.popupView.numberOfProcessesUpdated()
self.settingsView.callbackWhenUpdateNumberOfProcesses = { [weak self] in
self?.popupView.numberOfProcessesUpdated()
DispatchQueue.global(qos: .background).async {
self.processReader?.read()
self?.processReader?.read()
}
}
self.usageReader?.callbackHandler = { [unowned self] value in
self.usageCallback(value)
self.usageReader?.callbackHandler = { [weak self] value in
self?.usageCallback(value)
}
self.usageReader?.readyCallback = { [unowned self] in
self.readyHandler()
self.usageReader?.readyCallback = { [weak self] in
self?.readyHandler()
}
self.processReader?.callbackHandler = { [unowned self] value in
self.processReader?.callbackHandler = { [weak self] value in
if let list = value {
self.popupView.processCallback(list)
self?.popupView.processCallback(list)
}
}
@@ -120,9 +120,7 @@ public class Battery: Module {
}
private func usageCallback(_ raw: Battery_Usage?) {
guard let value = raw, self.enabled else {
return
}
guard let value = raw, self.enabled else { return }
self.checkLowNotification(value: value)
self.checkHighNotification(value: value)

View File

@@ -88,24 +88,22 @@ public class Bluetooth: Module {
)
guard self.available else { return }
self.settingsView.callback = { [unowned self] in
self.devicesReader.read()
self.settingsView.callback = { [weak self] in
self?.devicesReader.read()
}
self.devicesReader.callbackHandler = { [unowned self] value in
self.batteryCallback(value)
self.devicesReader.callbackHandler = { [weak self] value in
self?.batteryCallback(value)
}
self.devicesReader.readyCallback = { [unowned self] in
self.readyHandler()
self.devicesReader.readyCallback = { [weak self] in
self?.readyHandler()
}
self.addReader(self.devicesReader)
}
private func batteryCallback(_ raw: [BLEDevice]?) {
guard let value = raw, self.enabled else {
return
}
guard let value = raw, self.enabled else { return }
let active = value.filter{ $0.isPaired || ($0.isConnected && !$0.batteryLevel.isEmpty) }
DispatchQueue.main.async(execute: {

View File

@@ -98,8 +98,8 @@ public class CPU: Module {
self.frequencyReader = FrequencyReader(.CPU, popup: true)
#endif
self.settingsView.callback = { [unowned self] in
self.loadReader?.read()
self.settingsView.callback = { [weak self] in
self?.loadReader?.read()
}
self.settingsView.callbackWhenUpdateNumberOfProcesses = {
self.popupView.numberOfProcessesUpdated()
@@ -107,50 +107,50 @@ public class CPU: Module {
self.processReader?.read()
}
}
self.settingsView.setInterval = { [unowned self] value in
self.loadReader?.setInterval(value)
self.settingsView.setInterval = { [weak self] value in
self?.loadReader?.setInterval(value)
}
self.settingsView.setTopInterval = { [unowned self] value in
self.processReader?.setInterval(value)
self.settingsView.setTopInterval = { [weak self] value in
self?.processReader?.setInterval(value)
}
self.settingsView.IPGCallback = { [unowned self] value in
self.settingsView.IPGCallback = { [weak self] value in
if value {
self.frequencyReader?.setup()
self?.frequencyReader?.setup()
}
self.popupView.toggleFrequency(state: value)
self?.popupView.toggleFrequency(state: value)
}
self.loadReader?.callbackHandler = { [unowned self] value in
self.loadCallback(value)
self.loadReader?.callbackHandler = { [weak self] value in
self?.loadCallback(value)
}
self.loadReader?.readyCallback = { [unowned self] in
self.readyHandler()
self.loadReader?.readyCallback = { [weak self] in
self?.readyHandler()
}
self.processReader?.callbackHandler = { [unowned self] value in
self.processReader?.callbackHandler = { [weak self] value in
if let list = value {
self.popupView.processCallback(list)
self?.popupView.processCallback(list)
}
}
self.temperatureReader?.callbackHandler = { [unowned self] value in
self.temperatureReader?.callbackHandler = { [weak self] value in
if let v = value {
self.popupView.temperatureCallback(v)
self?.popupView.temperatureCallback(v)
}
}
self.frequencyReader?.callbackHandler = { [unowned self] value in
self.frequencyReader?.callbackHandler = { [weak self] value in
if let v = value {
self.popupView.frequencyCallback(v)
self?.popupView.frequencyCallback(v)
}
}
self.limitReader?.callbackHandler = { [unowned self] value in
self.limitReader?.callbackHandler = { [weak self] value in
if let v = value {
self.popupView.limitCallback(v)
self?.popupView.limitCallback(v)
}
}
self.averageReader?.callbackHandler = { [unowned self] value in
self.averageReader?.callbackHandler = { [weak self] value in
if let v = value {
self.popupView.averageCallback(v)
self?.popupView.averageCallback(v)
}
}
@@ -175,9 +175,7 @@ public class CPU: Module {
}
private func loadCallback(_ raw: CPU_Load?) {
guard let value = raw, self.enabled else {
return
}
guard let value = raw, self.enabled else { return }
self.popupView.loadCallback(value)
self.portalView.loadCallback(value)

View File

@@ -68,14 +68,14 @@ public class Clock: Module {
)
guard self.available else { return }
self.reader.callbackHandler = { [unowned self] value in
self.reader.callbackHandler = { [weak self] value in
guard let value else { return }
self.callback(value)
self?.callback(value)
}
self.addReader(self.reader)
self.reader.readyCallback = { [unowned self] in
self.readyHandler()
self.reader.readyCallback = { [weak self] in
self?.readyHandler()
}
}

View File

@@ -223,40 +223,40 @@ public class Disk: Module {
self.selectedDisk = Store.shared.string(key: "\(Disk.name)_disk", defaultValue: self.selectedDisk)
self.capacityReader.callbackHandler = { [unowned self] value in
if let value = value {
self.capacityCallback(value)
self.capacityReader.callbackHandler = { [weak self] value in
if let value {
self?.capacityCallback(value)
}
}
self.capacityReader.readyCallback = { [unowned self] in
self.readyHandler()
self.capacityReader.readyCallback = { [weak self] in
self?.readyHandler()
}
self.activityReader.callbackHandler = { [unowned self] value in
if let value = value {
self.activityCallback(value)
self.activityReader.callbackHandler = { [weak self] value in
if let value {
self?.activityCallback(value)
}
}
self.processReader.callbackHandler = { [unowned self] value in
self.processReader.callbackHandler = { [weak self] value in
if let list = value {
self.popupView.processCallback(list)
self?.popupView.processCallback(list)
}
}
self.settingsView.selectedDiskHandler = { [unowned self] value in
self.selectedDisk = value
self.capacityReader.read()
self.settingsView.selectedDiskHandler = { [weak self] value in
self?.selectedDisk = value
self?.capacityReader.read()
}
self.settingsView.callback = { [unowned self] in
self.capacityReader.read()
self.settingsView.callback = { [weak self] in
self?.capacityReader.read()
}
self.settingsView.setInterval = { [unowned self] value in
self.capacityReader.setInterval(value)
self.settingsView.setInterval = { [weak self] value in
self?.capacityReader.setInterval(value)
}
self.settingsView.callbackWhenUpdateNumberOfProcesses = {
self.popupView.numberOfProcessesUpdated()
self.settingsView.callbackWhenUpdateNumberOfProcesses = { [weak self] in
self?.popupView.numberOfProcessesUpdated()
DispatchQueue.global(qos: .background).async {
self.processReader.read()
self?.processReader.read()
}
}
@@ -272,9 +272,7 @@ public class Disk: Module {
}
private func capacityCallback(_ value: Disks) {
guard self.enabled else {
return
}
guard self.enabled else { return }
DispatchQueue.main.async(execute: {
self.popupView.capacityCallback(value)

View File

@@ -101,22 +101,22 @@ public class GPU: Module {
self.infoReader = InfoReader(.GPU)
self.selectedGPU = Store.shared.string(key: "\(self.config.name)_gpu", defaultValue: self.selectedGPU)
self.infoReader?.callbackHandler = { [unowned self] value in
self.infoCallback(value)
self.infoReader?.callbackHandler = { [weak self] value in
self?.infoCallback(value)
}
self.infoReader?.readyCallback = { [unowned self] in
self.readyHandler()
self.infoReader?.readyCallback = { [weak self] in
self?.readyHandler()
}
self.settingsView.selectedGPUHandler = { [unowned self] value in
self.selectedGPU = value
self.infoReader?.read()
self.settingsView.selectedGPUHandler = { [weak self] value in
self?.selectedGPU = value
self?.infoReader?.read()
}
self.settingsView.setInterval = { [unowned self] value in
self.infoReader?.setInterval(value)
self.settingsView.setInterval = { [weak self] value in
self?.infoReader?.setInterval(value)
}
self.settingsView.callback = {
self.infoReader?.read()
self.settingsView.callback = { [weak self] in
self?.infoReader?.read()
}
if let reader = self.infoReader {
@@ -125,9 +125,7 @@ public class GPU: Module {
}
private func infoCallback(_ raw: GPUs?) {
guard raw != nil && !raw!.list.isEmpty, let value = raw, self.enabled else {
return
}
guard raw != nil && !raw!.list.isEmpty, let value = raw, self.enabled else { return }
DispatchQueue.main.async(execute: {
self.popupView.infoCallback(value)

View File

@@ -156,38 +156,38 @@ public class Network: Module {
}
}
self.usageReader?.callbackHandler = { [unowned self] value in
self.usageCallback(value)
self.usageReader?.callbackHandler = { [weak self] value in
self?.usageCallback(value)
}
self.usageReader?.readyCallback = { [unowned self] in
self.readyHandler()
self.usageReader?.readyCallback = { [weak self] in
self?.readyHandler()
}
self.processReader?.callbackHandler = { [unowned self] value in
self.processReader?.callbackHandler = { [weak self] value in
if let list = value {
self.popupView.processCallback(list)
self?.popupView.processCallback(list)
}
}
self.connectivityReader?.callbackHandler = { [unowned self] value in
self.connectivityCallback(value)
self.connectivityReader?.callbackHandler = { [weak self] value in
self?.connectivityCallback(value)
}
self.settingsView.callback = { [unowned self] in
self.usageReader?.getDetails()
self.usageReader?.read()
self.settingsView.callback = { [weak self] in
self?.usageReader?.getDetails()
self?.usageReader?.read()
}
self.settingsView.usageResetCallback = { [unowned self] in
self.setUsageReset()
self.settingsView.usageResetCallback = { [weak self] in
self?.setUsageReset()
}
self.settingsView.ICMPHostCallback = { [unowned self] isDisabled in
self.settingsView.ICMPHostCallback = { [weak self] isDisabled in
if isDisabled {
self.popupView.resetConnectivityView()
self.connectivityCallback(Network_Connectivity(status: false))
self?.popupView.resetConnectivityView()
self?.connectivityCallback(Network_Connectivity(status: false))
}
}
self.settingsView.publicIPRefreshIntervalCallback = { [unowned self] in
self.setIPUpdater()
self.settingsView.publicIPRefreshIntervalCallback = { [weak self] in
self?.setIPUpdater()
}
if let reader = self.usageReader {
@@ -215,9 +215,7 @@ public class Network: Module {
}
private func usageCallback(_ raw: Network_Usage?) {
guard let value = raw, self.enabled else {
return
}
guard let value = raw, self.enabled else { return }
self.popupView.usageCallback(value)
self.portalView.usageCallback(value)

View File

@@ -106,37 +106,37 @@ public class RAM: Module {
)
guard self.available else { return }
self.settingsView.callback = { [unowned self] in
self.usageReader?.read()
self.settingsView.callback = { [weak self] in
self?.usageReader?.read()
}
self.settingsView.setInterval = { [unowned self] value in
self.processReader?.read()
self.usageReader?.setInterval(value)
self.settingsView.setInterval = { [weak self] value in
self?.processReader?.read()
self?.usageReader?.setInterval(value)
}
self.settingsView.setTopInterval = { [unowned self] value in
self.processReader?.setInterval(value)
self.settingsView.setTopInterval = { [weak self] value in
self?.processReader?.setInterval(value)
}
self.usageReader = UsageReader(.RAM)
self.processReader = ProcessReader(.RAM)
self.settingsView.callbackWhenUpdateNumberOfProcesses = {
self.popupView.numberOfProcessesUpdated()
self.settingsView.callbackWhenUpdateNumberOfProcesses = { [weak self] in
self?.popupView.numberOfProcessesUpdated()
DispatchQueue.global(qos: .background).async {
self.processReader?.read()
self?.processReader?.read()
}
}
self.usageReader?.callbackHandler = { [unowned self] value in
self.loadCallback(value)
self.usageReader?.callbackHandler = { [weak self] value in
self?.loadCallback(value)
}
self.usageReader?.readyCallback = { [unowned self] in
self.readyHandler()
self.usageReader?.readyCallback = { [weak self] in
self?.readyHandler()
}
self.processReader?.callbackHandler = { [unowned self] value in
self.processReader?.callbackHandler = { [weak self] value in
if let list = value {
self.popupView.processCallback(list)
self?.popupView.processCallback(list)
}
}
@@ -149,9 +149,7 @@ public class RAM: Module {
}
private func loadCallback(_ raw: RAM_Usage?) {
guard raw != nil, let value = raw, self.enabled else {
return
}
guard raw != nil, let value = raw, self.enabled else { return }
self.popupView.loadCallback(value)
self.portalView.loadCallback(value)

View File

@@ -34,36 +34,36 @@ public class Sensors: Module {
self.popupView.setup(self.sensorsReader.list.sensors)
self.settingsView.callback = { [unowned self] in
self.sensorsReader.read()
self.settingsView.callback = { [weak self] in
self?.sensorsReader.read()
}
self.settingsView.setInterval = { [unowned self] value in
self.sensorsReader.setInterval(value)
self.settingsView.setInterval = { [weak self] value in
self?.sensorsReader.setInterval(value)
}
self.settingsView.HIDcallback = { [unowned self] in
self.settingsView.HIDcallback = { [weak self] in
DispatchQueue.global(qos: .background).async {
self.sensorsReader.HIDCallback()
self?.sensorsReader.HIDCallback()
DispatchQueue.main.async {
self.popupView.setup(self.sensorsReader.list.sensors)
self.settingsView.setList(list: self.sensorsReader.list.sensors)
self?.popupView.setup(self?.sensorsReader.list.sensors)
self?.settingsView.setList(list: self?.sensorsReader.list.sensors ?? [])
}
}
}
self.settingsView.unknownCallback = { [unowned self] in
self.settingsView.unknownCallback = { [weak self] in
DispatchQueue.global(qos: .background).async {
self.sensorsReader.unknownCallback()
self?.sensorsReader.unknownCallback()
DispatchQueue.main.async {
self.popupView.setup(self.sensorsReader.list.sensors)
self.settingsView.setList(list: self.sensorsReader.list.sensors)
self?.popupView.setup(self?.sensorsReader.list.sensors)
self?.settingsView.setList(list: self?.sensorsReader.list.sensors ?? [])
}
}
}
self.sensorsReader.callbackHandler = { [unowned self] value in
self.usageCallback(value)
self.sensorsReader.callbackHandler = { [weak self] value in
self?.usageCallback(value)
}
self.sensorsReader.readyCallback = { [unowned self] in
self.readyHandler()
self.sensorsReader.readyCallback = { [weak self] in
self?.readyHandler()
}
self.addReader(self.sensorsReader)
@@ -92,9 +92,7 @@ public class Sensors: Module {
}
private func usageCallback(_ raw: Sensors_List?) {
guard let value = raw, self.enabled else {
return
}
guard let value = raw, self.enabled else { return }
var list: [Stack_t] = []
var flatList: [[ColorValue]] = []