diff --git a/CapCollector.xcodeproj/project.xcworkspace/xcuserdata/imac.xcuserdatad/UserInterfaceState.xcuserstate b/CapCollector.xcodeproj/project.xcworkspace/xcuserdata/imac.xcuserdatad/UserInterfaceState.xcuserstate index 976a93b..c702d5e 100644 Binary files a/CapCollector.xcodeproj/project.xcworkspace/xcuserdata/imac.xcuserdatad/UserInterfaceState.xcuserstate and b/CapCollector.xcodeproj/project.xcworkspace/xcuserdata/imac.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/CapCollector/AppDelegate.swift b/CapCollector/AppDelegate.swift index 4cee8b1..a45792a 100644 --- a/CapCollector/AppDelegate.swift +++ b/CapCollector/AppDelegate.swift @@ -97,8 +97,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { } func applicationDidBecomeActive(_ application: UIApplication) { - app.database?.uploadRemainingCaps() - app.database?.uploadRemainingImages() + app.database?.uploadRemainingData() guard shouldLaunchCamera else { return } shouldLaunchCamera = false diff --git a/CapCollector/Base.lproj/Main.storyboard b/CapCollector/Base.lproj/Main.storyboard index b292b11..9b4a01e 100644 --- a/CapCollector/Base.lproj/Main.storyboard +++ b/CapCollector/Base.lproj/Main.storyboard @@ -170,7 +170,7 @@ - + diff --git a/CapCollector/Data/Database.swift b/CapCollector/Data/Database.swift index 3df9180..6c6c7ab 100644 --- a/CapCollector/Data/Database.swift +++ b/CapCollector/Data/Database.swift @@ -300,7 +300,7 @@ final class Database { guard update("name", for: cap, setter: Cap.columnName <- name, Cap.columnUploaded <- false) else { return false } - uploadRemainingCaps() + uploadRemainingData() return true } @@ -659,27 +659,40 @@ final class Database { } } - func uploadRemainingCaps() { + func uploadRemainingData() { + guard !isInOfflineMode else { + log("Not uploading pending data due to offline mode") + return + } let uploads = self.pendingCapUploads guard uploads.count > 0 else { log("No pending cap uploads") + uploadRemainingImages() return } log("\(uploads.count) cap uploads pending") + var remaining = uploads.count for cap in uploads { upload.upload(name: cap.name, for: cap.id) { success in - guard success else { + if success { + self.log("Uploaded cap \(cap.id)") + self.update(uploaded: true, for: cap.id) + } else { self.log("Failed to upload cap \(cap.id)") - return } - self.log("Uploaded cap \(cap.id)") - self.update(uploaded: true, for: cap.id) + + remaining -= 1 + if remaining == 0 { + DispatchQueue.main.async { + self.uploadRemainingImages() + } + } } } } - func uploadRemainingImages() { + private func uploadRemainingImages() { let uploads = pendingImageUploads guard uploads.count > 0 else { log("No pending image uploads") diff --git a/CapCollector/TableView.swift b/CapCollector/TableView.swift index 637e9f0..7725f05 100644 --- a/CapCollector/TableView.swift +++ b/CapCollector/TableView.swift @@ -336,7 +336,14 @@ class TableView: UITableViewController { private func showOfflineDialog() { let offline = app.database.isInOfflineMode if offline { - + print("Marking as online") + app.database.isInOfflineMode = false + app.database.uploadRemainingData() + self.showAlert("Offline mode was disabled", title: "Online") + } else { + print("Marking as offline") + app.database.isInOfflineMode = true + self.showAlert("Offline mode was enabled", title: "Offline") } }