[+] Implement upload and download backup
This commit is contained in:
@@ -177,6 +177,32 @@ class ManageVC: UIViewController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Called when the user clicks the upload backup button
|
||||||
|
*/
|
||||||
|
@IBAction func uploadBackup(_ sender: Any)
|
||||||
|
{
|
||||||
|
sendReq(APIs.uploadConfig, title: "Uploading...", params: ["config": localStorage.string(forKey: "alarms")!])
|
||||||
|
{ it in self.msg("Success!", "You're backed up.") }
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Called when the user clicks the download backup button
|
||||||
|
*/
|
||||||
|
@IBAction func downloadBackup(_ sender: Any)
|
||||||
|
{
|
||||||
|
sendReq(APIs.downloadConfig, title: "Downloading...")
|
||||||
|
{
|
||||||
|
// Save backup
|
||||||
|
localStorage.setValue($0, forKey: "alarms")
|
||||||
|
|
||||||
|
// Update UI
|
||||||
|
AlarmViewController.staticTable?.reloadData()
|
||||||
|
|
||||||
|
self.msg("Success!", "You're restored your backup.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Called when the user clicks the logout button
|
Called when the user clicks the logout button
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -874,7 +874,7 @@
|
|||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="gYR-mG-zfS">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="gYR-mG-zfS">
|
||||||
<rect key="frame" x="20" y="0.0" width="374" height="441.5"/>
|
<rect key="frame" x="20" y="0.0" width="374" height="541.5"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="gUf-g1-1af">
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="gUf-g1-1af">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="374" height="170"/>
|
<rect key="frame" x="0.0" y="0.0" width="374" height="170"/>
|
||||||
@@ -948,8 +948,22 @@
|
|||||||
<color key="textColor" systemColor="secondaryLabelColor"/>
|
<color key="textColor" systemColor="secondaryLabelColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="3pG-br-PVl">
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Ae0-Ce-3T1">
|
||||||
<rect key="frame" x="0.0" y="361.5" width="374" height="30"/>
|
<rect key="frame" x="0.0" y="361.5" width="374" height="30"/>
|
||||||
|
<state key="normal" title="Download Alarm Backup"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="downloadBackup:" destination="3gV-kF-UbK" eventType="touchUpInside" id="3GI-T3-9E4"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="PJQ-Rs-7jD">
|
||||||
|
<rect key="frame" x="0.0" y="411.5" width="374" height="30"/>
|
||||||
|
<state key="normal" title="Upload Alarm Backup"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="uploadBackup:" destination="3gV-kF-UbK" eventType="touchUpInside" id="TXd-5k-cdI"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="3pG-br-PVl">
|
||||||
|
<rect key="frame" x="0.0" y="461.5" width="374" height="30"/>
|
||||||
<state key="normal" title="Log Out">
|
<state key="normal" title="Log Out">
|
||||||
<color key="titleColor" systemColor="systemOrangeColor"/>
|
<color key="titleColor" systemColor="systemOrangeColor"/>
|
||||||
</state>
|
</state>
|
||||||
@@ -958,7 +972,7 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="awy-Du-cqu">
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="awy-Du-cqu">
|
||||||
<rect key="frame" x="0.0" y="411.5" width="374" height="30"/>
|
<rect key="frame" x="0.0" y="511.5" width="374" height="30"/>
|
||||||
<state key="normal" title="Delete Account">
|
<state key="normal" title="Delete Account">
|
||||||
<color key="titleColor" systemColor="systemRedColor"/>
|
<color key="titleColor" systemColor="systemRedColor"/>
|
||||||
</state>
|
</state>
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ class APIs
|
|||||||
## Returns
|
## Returns
|
||||||
Success or error
|
Success or error
|
||||||
*/
|
*/
|
||||||
static let uploadConfig = API<String>(loc: "/backup/upload")
|
static let uploadConfig = API<String>(loc: "/user/backup/upload")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Download the config from the cloud.
|
Download the config from the cloud.
|
||||||
@@ -96,7 +96,7 @@ class APIs
|
|||||||
## Returns
|
## Returns
|
||||||
Config Json
|
Config Json
|
||||||
*/
|
*/
|
||||||
static let downloadConfig = API<String>(loc: "/backup/download")
|
static let downloadConfig = API<String>(loc: "/user/backup/download")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Get family info for this account
|
Get family info for this account
|
||||||
|
|||||||
Reference in New Issue
Block a user