Showing 1 changed files with 21 additions and 6 deletions
+21 -6
USB Meter/Model/AppData.swift
@@ -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
     }