Add offline mode
This commit is contained in:
parent
8892d04f62
commit
5441261c6c
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="16096" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="qlf-I7-aOI">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="16097.2" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="qlf-I7-aOI">
|
||||
<device id="retina4_7" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/>
|
||||
@ -168,7 +168,7 @@
|
||||
</connections>
|
||||
</tableView>
|
||||
<navigationItem key="navigationItem" title="Caps" id="qe9-JJ-Ei4">
|
||||
<barButtonItem key="leftBarButtonItem" image="arrow.clockwise.icloud" catalog="system" id="SDv-mW-eqq">
|
||||
<barButtonItem key="leftBarButtonItem" title="Item" image="arrow.clockwise.icloud" catalog="system" id="SDv-mW-eqq">
|
||||
<connections>
|
||||
<action selector="updateInfo:" destination="2ro-5c-16N" id="DgZ-Jh-0hR"/>
|
||||
</connections>
|
||||
@ -179,6 +179,9 @@
|
||||
</connections>
|
||||
</barButtonItem>
|
||||
</navigationItem>
|
||||
<connections>
|
||||
<outlet property="infoButton" destination="SDv-mW-eqq" id="hKf-A3-chi"/>
|
||||
</connections>
|
||||
</tableViewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="xpG-Fd-7Lc" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
|
@ -145,6 +145,16 @@ final class Database {
|
||||
}
|
||||
}
|
||||
|
||||
var isInOfflineMode: Bool {
|
||||
set {
|
||||
UserDefaults.standard.set(newValue, forKey: Upload.offlineKey)
|
||||
log("Offline mode set to \(newValue)")
|
||||
}
|
||||
get {
|
||||
UserDefaults.standard.bool(forKey: Upload.offlineKey)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: Data updates
|
||||
|
||||
/**
|
||||
@ -168,6 +178,10 @@ final class Database {
|
||||
log("Cap image not saved")
|
||||
return false
|
||||
}
|
||||
guard !isInOfflineMode else {
|
||||
log("Offline mode: Not uploading cap")
|
||||
return true
|
||||
}
|
||||
upload.upload(name: name, for: cap.id) { success in
|
||||
guard success else {
|
||||
return
|
||||
@ -224,6 +238,10 @@ final class Database {
|
||||
log("Failed to add cap \(cap) version \(version) to upload queue")
|
||||
return false
|
||||
}
|
||||
guard !isInOfflineMode else {
|
||||
log("Offline mode: Not uploading cap image")
|
||||
return true
|
||||
}
|
||||
upload.uploadImage(for: cap, version: version) { actualVersion in
|
||||
guard let actualVersion = actualVersion else {
|
||||
self.log("Failed to upload image \(version) for cap \(cap)")
|
||||
|
@ -12,6 +12,8 @@ import SQLite
|
||||
|
||||
struct Upload {
|
||||
|
||||
static let offlineKey = "offline"
|
||||
|
||||
let serverUrl: URL
|
||||
|
||||
let table = Table("uploads")
|
||||
|
@ -12,6 +12,8 @@ import JGProgressHUD
|
||||
|
||||
class TableView: UITableViewController {
|
||||
|
||||
@IBOutlet weak var infoButton: UIBarButtonItem!
|
||||
|
||||
private var classifier: Classifier?
|
||||
|
||||
private var accessory: SearchAndDisplayAccessory?
|
||||
@ -79,7 +81,11 @@ class TableView: UITableViewController {
|
||||
|
||||
// MARK: - Actions
|
||||
|
||||
@IBAction func updateInfo(_ sender: UIBarButtonItem) {
|
||||
@IBAction func updateInfo(_ sender: UIBarButtonItem, forEvent event: UIEvent) {
|
||||
guard let touch = event.allTouches?.first, touch.tapCount > 0, !app.database.isInOfflineMode else {
|
||||
showOfflineDialog()
|
||||
return
|
||||
}
|
||||
downloadCapNames()
|
||||
}
|
||||
|
||||
@ -122,6 +128,8 @@ class TableView: UITableViewController {
|
||||
accessory = SearchAndDisplayAccessory(width: self.view.frame.width)
|
||||
accessory?.delegate = self
|
||||
|
||||
initInfoButton()
|
||||
|
||||
app.database.delegate = self
|
||||
let count = app.database.capCount
|
||||
if count == 0 {
|
||||
@ -152,6 +160,16 @@ class TableView: UITableViewController {
|
||||
initNavigationItemTitleView()
|
||||
}
|
||||
|
||||
private func initInfoButton() {
|
||||
let offline = app.database.isInOfflineMode
|
||||
setInfoButtonIcon(offline: offline)
|
||||
}
|
||||
|
||||
private func setInfoButtonIcon(offline: Bool) {
|
||||
let symbol = offline ? "icloud.slash" : "arrow.clockwise.icloud"
|
||||
infoButton.image = UIImage(systemName: symbol)
|
||||
}
|
||||
|
||||
private func initNavigationItemTitleView() {
|
||||
self.titleLabel = UILabel()
|
||||
titleLabel.text = titleText
|
||||
@ -315,6 +333,13 @@ class TableView: UITableViewController {
|
||||
nav.allowLandscape = true
|
||||
}
|
||||
|
||||
private func showOfflineDialog() {
|
||||
let offline = app.database.isInOfflineMode
|
||||
if offline {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private func downloadCapNames() {
|
||||
app.database.downloadCapNames { success in
|
||||
guard success else {
|
||||
|
Loading…
Reference in New Issue
Block a user