@@ -48,7 +48,8 @@ final class AppData : ObservableObject {
|
||
| 48 | 48 |
label: "ro.xdev.usb-meter.charged-devices-reload", |
| 49 | 49 |
qos: .userInitiated |
| 50 | 50 |
) |
| 51 |
- private var chargedDevicesReloadGeneration: UInt = 0 |
|
| 51 |
+ private var chargedDevicesReloadInFlight = false |
|
| 52 |
+ private var chargedDevicesReloadPending = false |
|
| 52 | 53 |
private let meterStore = MeterNameStore.shared |
| 53 | 54 |
private var chargeInsightsStore: ChargeInsightsStore? |
| 54 | 55 |
private let chargerStandbyPowerStore = ChargerStandbyPowerStore() |
@@ -857,13 +858,25 @@ final class AppData : ObservableObject {
|
||
| 857 | 858 |
} |
| 858 | 859 |
|
| 859 | 860 |
private func reloadChargedDevices() {
|
| 861 |
+ if Thread.isMainThread == false {
|
|
| 862 |
+ DispatchQueue.main.async { [weak self] in
|
|
| 863 |
+ self?.reloadChargedDevices() |
|
| 864 |
+ } |
|
| 865 |
+ return |
|
| 866 |
+ } |
|
| 867 |
+ |
|
| 860 | 868 |
pendingChargedDevicesReloadWorkItem?.cancel() |
| 861 | 869 |
pendingChargedDevicesReloadWorkItem = nil |
| 862 | 870 |
|
| 871 |
+ guard chargedDevicesReloadInFlight == false else {
|
|
| 872 |
+ chargedDevicesReloadPending = true |
|
| 873 |
+ return |
|
| 874 |
+ } |
|
| 875 |
+ |
|
| 863 | 876 |
let standbyMeasurementsByChargerID = chargerStandbyPowerStore.measurementsByChargerID() |
| 864 |
- let reloadGeneration = chargedDevicesReloadGeneration &+ 1 |
|
| 865 |
- chargedDevicesReloadGeneration = reloadGeneration |
|
| 866 | 877 |
let readStore = chargeInsightsReadStore ?? chargeInsightsStore |
| 878 |
+ chargedDevicesReloadInFlight = true |
|
| 879 |
+ chargedDevicesReloadPending = false |
|
| 867 | 880 |
|
| 868 | 881 |
chargedDevicesReloadQueue.async { [weak self] in
|
| 869 | 882 |
guard let self else { return }
|
@@ -877,15 +890,17 @@ final class AppData : ObservableObject {
|
||
| 877 | 890 |
|
| 878 | 891 |
DispatchQueue.main.async { [weak self] in
|
| 879 | 892 |
guard let self else { return }
|
| 880 |
- guard reloadGeneration == self.chargedDevicesReloadGeneration else {
|
|
| 881 |
- return |
|
| 882 |
- } |
|
| 883 | 893 |
|
| 884 | 894 |
self.chargedDevices = summaries |
| 885 | 895 |
self.chargeNotificationCoordinator.process(chargedDevices: self.deviceSummaries) |
| 886 | 896 |
for meter in self.meters.values {
|
| 887 | 897 |
self.restoreChargeMonitoringStateIfNeeded(for: meter) |
| 888 | 898 |
} |
| 899 |
+ |
|
| 900 |
+ self.chargedDevicesReloadInFlight = false |
|
| 901 |
+ if self.chargedDevicesReloadPending {
|
|
| 902 |
+ self.reloadChargedDevices() |
|
| 903 |
+ } |
|
| 889 | 904 |
} |
| 890 | 905 |
} |
| 891 | 906 |
} |