Эх сурвалжийг харах

ensure every network change will be recognized, use closures instead of notifications to notify network changes, don't use an extra flag to indicate whether there's network or not

cyberta 5 жил өмнө
parent
commit
e261a2ef88

+ 22 - 37
deltachat-ios/AppDelegate.swift

@@ -22,7 +22,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD
     var locationManager: LocationManager!
     var locationManager: LocationManager!
     private var backgroundTask: UIBackgroundTaskIdentifier = .invalid
     private var backgroundTask: UIBackgroundTaskIdentifier = .invalid
     var reachability = Reachability()!
     var reachability = Reachability()!
-    var hasNetwork = false
     var window: UIWindow?
     var window: UIWindow?
     var state = ApplicationState.stopped
     var state = ApplicationState.stopped
 
 
@@ -50,6 +49,28 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD
         UIApplication.shared.setMinimumBackgroundFetchInterval(UIApplication.backgroundFetchIntervalMinimum)
         UIApplication.shared.setMinimumBackgroundFetchInterval(UIApplication.backgroundFetchIntervalMinimum)
         startThreads()
         startThreads()
         setStockTranslations()
         setStockTranslations()
+
+        reachability.whenReachable = { reachability in
+            logger.info("could not start reachability notifier")
+            // call dc_maybe_network() from a worker thread.
+            // normally, dc_maybe_network() can be called uncoditionally,
+            // however, in fact, it may halt things for some seconds.
+            // this pr is a workaround that make things usable for now.
+            DispatchQueue.global(qos: .background).async {
+               self.dcContext.maybeNetwork()
+           }
+        }
+
+        reachability.whenUnreachable = { _ in
+            logger.info("network: not reachable")
+        }
+
+        do {
+            try reachability.startNotifier()
+        } catch {
+            print("Unable to start notifier")
+        }
+
         return true
         return true
     }
     }
 
 
@@ -85,9 +106,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD
     func applicationDidEnterBackground(_: UIApplication) {
     func applicationDidEnterBackground(_: UIApplication) {
         logger.info("---- background ----")
         logger.info("---- background ----")
 
 
-        reachability.stopNotifier()
-        NotificationCenter.default.removeObserver(self, name: .reachabilityChanged, object: reachability)
-
         maybeStop()
         maybeStop()
     }
     }
 
 
@@ -112,7 +130,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD
         closeDatabase()
         closeDatabase()
 
 
         reachability.stopNotifier()
         reachability.stopNotifier()
-        NotificationCenter.default.removeObserver(self, name: .reachabilityChanged, object: reachability)
     }
     }
 
 
     func openDatabase() {
     func openDatabase() {
@@ -208,38 +225,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD
                 self.dcContext.performMoveBox()
                 self.dcContext.performMoveBox()
             }
             }
         }
         }
-
-        NotificationCenter.default.addObserver(self, selector: #selector(reachabilityChanged(note:)),
-                                               name: .reachabilityChanged, object: reachability)
-        do {
-            try reachability.startNotifier()
-        } catch {
-            logger.info("could not start reachability notifier")
-        }
-    }
-
-    @objc private func reachabilityChanged(note: Notification) {
-        guard let reachability = note.object as? Reachability else {
-            logger.info("reachability object missing")
-            return
-        }
-
-        switch reachability.connection {
-        case .wifi, .cellular:
-            logger.info("network: reachable", reachability.connection.description)
-            hasNetwork = true
-
-            // call dc_maybe_network() from a worker thread.
-            // normally, dc_maybe_network() can be called uncoditionally,
-            // however, in fact, it may halt things for some seconds.
-            // this pr is a workaround that make things usable for now.
-            DispatchQueue.global(qos: .background).async {
-                self.dcContext.maybeNetwork()
-            }
-        case .none:
-            logger.info("network: not reachable")
-            hasNetwork = false
-        }
     }
     }
 
 
     // MARK: - BackgroundTask
     // MARK: - BackgroundTask

+ 1 - 1
deltachat-ios/Controller/AccountSetupController.swift

@@ -659,7 +659,7 @@ class AccountSetupController: UITableViewController, ProgressAlertHandler {
             if let ui = notification.userInfo {
             if let ui = notification.userInfo {
                 if ui["error"] as! Bool {
                 if ui["error"] as! Bool {
                     var errorMessage = ui["errorMessage"] as? String
                     var errorMessage = ui["errorMessage"] as? String
-                    if let appDelegate = UIApplication.shared.delegate as? AppDelegate, !appDelegate.hasNetwork {
+                    if let appDelegate = UIApplication.shared.delegate as? AppDelegate, appDelegate.reachability.connection == .none {
                         errorMessage = String.localized("login_error_no_internet_connection")
                         errorMessage = String.localized("login_error_no_internet_connection")
                     }
                     }
                     self.updateProgressAlert(error: errorMessage)
                     self.updateProgressAlert(error: errorMessage)