ZcashLightClientKit/Example/ZcashLightClientSample/ZcashLightClientSample/Sapling Parameters/SaplingParametersViewContro...

124 lines
4.5 KiB
Swift

//
// SaplingParametersViewController.swift
// ZcashLightClientSample
//
// Created by Francisco Gindre on 10/7/20.
// Copyright © 2020 Electric Coin Company. All rights reserved.
//
import UIKit
import ZcashLightClientKit
// swiftlint:disable force_try
class SaplingParametersViewController: UIViewController {
@IBOutlet weak var outputPath: UILabel!
@IBOutlet weak var spendPath: UILabel!
@IBOutlet weak var downloadButton: UIButton!
@IBOutlet weak var deleteButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
let spendParamPath = try! spendParamsURLHelper().path
let outputParamPath = try! outputParamsURLHelper().path
self.spendPath.text = spendParamPath
self.outputPath.text = outputParamPath
self.updateColor()
self.spendPath.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(spendPathTapped(_:))))
self.outputPath.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(outputPathTapped(_:))))
self.outputPath.isUserInteractionEnabled = true
self.spendPath.isUserInteractionEnabled = true
self.updateButtons()
}
func updateButtons() {
let spendParamPath = try! spendParamsURLHelper().path
let outputParamPath = try! outputParamsURLHelper().path
self.downloadButton.isHidden = fileExists(outputParamPath) && fileExists(spendParamPath)
self.deleteButton.isHidden = !(fileExists(outputParamPath) || fileExists(spendParamPath))
}
func updateColor() {
let spendParamPath = try! spendParamsURLHelper().path
let outputParamPath = try! outputParamsURLHelper().path
self.spendPath.textColor = fileExists(spendParamPath) ? UIColor.green : UIColor.red
self.outputPath.textColor = fileExists(outputParamPath) ? UIColor.green : UIColor.red
}
@objc func spendPathTapped(_ gesture: UIGestureRecognizer) {
loggerProxy.event("copied to clipboard:\(self.spendPath.text ?? "")")
UIPasteboard.general.string = self.spendPath.text
let alert = UIAlertController(
title: "",
message: "Path Copied to clipboard",
preferredStyle: UIAlertController.Style.alert
)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
@objc func outputPathTapped(_ gesture: UIGestureRecognizer) {
loggerProxy.event("copied to clipboard:\(self.outputPath.text ?? "")")
UIPasteboard.general.string = self.outputPath.text
let alert = UIAlertController(
title: "",
message: "Path Copied to clipboard",
preferredStyle: UIAlertController.Style.alert
)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
@IBAction func download(_ sender: Any) {
let outputParameter = try! outputParamsURLHelper()
let spendParameter = try! spendParamsURLHelper()
Task { @MainActor in
do {
let urls = try await SaplingParameterDownloader.downloadParamsIfnotPresent(
spendURL: spendParameter,
outputURL: outputParameter
)
spendPath.text = urls.spend.path
outputPath.text = urls.output.path
updateColor()
updateButtons()
} catch {
showError(error)
}
}
}
func fileExists(_ path: String) -> Bool {
(try? FileManager.default.attributesOfItem(atPath: path)) != nil
}
func showError(_ error: Error) {
let alert = UIAlertController(
title: "Download Failed",
message: "\(error)",
preferredStyle: UIAlertController.Style.alert
)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
@IBAction func deleteFiles(_ sender: Any) {
let spendParamURL = try! spendParamsURLHelper()
let outputParamURL = try! outputParamsURLHelper()
try? FileManager.default.removeItem(at: spendParamURL)
try? FileManager.default.removeItem(at: outputParamURL)
self.updateColor()
self.updateButtons()
}
}