From 91153297677c69c09145b6c9f8e41a40edc92a8b Mon Sep 17 00:00:00 2001 From: Serhiy Mytrovtsiy Date: Sun, 13 Aug 2023 13:15:27 +0200 Subject: [PATCH] fix: changed reference from unowned to weak in the modules (prevents crash in some cases) --- Modules/Battery/main.swift | 26 +++++++++---------- Modules/Bluetooth/main.swift | 16 +++++------- Modules/CPU/main.swift | 50 +++++++++++++++++------------------- Modules/Clock/main.swift | 8 +++--- Modules/Disk/main.swift | 44 +++++++++++++++---------------- Modules/GPU/main.swift | 26 +++++++++---------- Modules/Net/main.swift | 40 ++++++++++++++--------------- Modules/RAM/main.swift | 36 ++++++++++++-------------- Modules/Sensors/main.swift | 36 ++++++++++++-------------- 9 files changed, 133 insertions(+), 149 deletions(-) diff --git a/Modules/Battery/main.swift b/Modules/Battery/main.swift index 1f0a72c9..edd74329 100644 --- a/Modules/Battery/main.swift +++ b/Modules/Battery/main.swift @@ -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) diff --git a/Modules/Bluetooth/main.swift b/Modules/Bluetooth/main.swift index 031a1968..62767795 100644 --- a/Modules/Bluetooth/main.swift +++ b/Modules/Bluetooth/main.swift @@ -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: { diff --git a/Modules/CPU/main.swift b/Modules/CPU/main.swift index f1603a65..c1e3ad76 100644 --- a/Modules/CPU/main.swift +++ b/Modules/CPU/main.swift @@ -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) diff --git a/Modules/Clock/main.swift b/Modules/Clock/main.swift index 284a9a20..c39febdd 100644 --- a/Modules/Clock/main.swift +++ b/Modules/Clock/main.swift @@ -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() } } diff --git a/Modules/Disk/main.swift b/Modules/Disk/main.swift index a2bb3570..5aac263c 100644 --- a/Modules/Disk/main.swift +++ b/Modules/Disk/main.swift @@ -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) diff --git a/Modules/GPU/main.swift b/Modules/GPU/main.swift index df421f29..fc9ea540 100644 --- a/Modules/GPU/main.swift +++ b/Modules/GPU/main.swift @@ -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) diff --git a/Modules/Net/main.swift b/Modules/Net/main.swift index cd22427d..d7c87214 100644 --- a/Modules/Net/main.swift +++ b/Modules/Net/main.swift @@ -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) diff --git a/Modules/RAM/main.swift b/Modules/RAM/main.swift index b117a952..0dfad01b 100644 --- a/Modules/RAM/main.swift +++ b/Modules/RAM/main.swift @@ -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) diff --git a/Modules/Sensors/main.swift b/Modules/Sensors/main.swift index b71e54bf..74794ade 100644 --- a/Modules/Sensors/main.swift +++ b/Modules/Sensors/main.swift @@ -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]] = []