// // HomeViewController.swift // Firebase test // // Created by Max Hunt on 06/05/2020. // Copyright © 2020 smt. All rights reserved. // import UIKit import FirebaseAuth import SwiftyJSON class HomeViewController: UIViewController { @IBOutlet weak var welcomeLbl: UILabel! @IBOutlet weak var onSwitch: UISwitch! @IBOutlet weak var bSlider: UISlider! @IBOutlet weak var errorLbl: UILabel! @IBOutlet weak var colourOutput: UIView! @IBOutlet weak var colorWheel: ColorWheel! @IBOutlet weak var cSlider: UISlider! var pColour = "000000" var continousReq = false var timer = Timer() override func viewDidLoad() { super.viewDidLoad() welcomeLbl.text = "Welcome, " + (Auth.auth().currentUser?.email)! // Do any additional setup after loading the view. } func apiCall(endpoint: String, data: [String : Any]){ let parameters = data let url = URL(string: endpoint)! //change the url let session = URLSession.shared var request = URLRequest(url: url) request.httpMethod = "POST" //set http method as POST do { request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted) // pass dictionary to nsdata object and set it as request body } catch let error { print(error.localizedDescription) } request.addValue("application/json", forHTTPHeaderField: "Content-Type") request.addValue("application/json", forHTTPHeaderField: "Accept") //create dataTask using the session object to send data to the server let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in guard error == nil else { return } guard let data = data else { return } do { let responseJSON = try? JSON(data: data) let status = responseJSON?["success"].stringValue if status != "true"{ let err = responseJSON?["error"].stringValue DispatchQueue.main.async { self.errorLbl.isHidden = false self.errorLbl.text = err } } } }) task.resume() } func sendUpdate() { let state = String(self.onSwitch.isOn) let brightness = Int(self.bSlider.value) let colour = Int(self.cSlider.value) Auth.auth().currentUser?.getIDToken(completion: { (idToken, err) in if err == nil, let token = idToken { let parameters = ["state": state, "brightness":brightness, "color":colour, "authToken":token] as [String : Any] let endpoint = "http://192.168.1.65:5050/zlight" self.apiCall(endpoint: endpoint, data: parameters) }else{ self.errorLbl.text = err?.localizedDescription self.errorLbl.isHidden = false } }) } func u2h(colour:UIColor) -> String { guard let components = colour.cgColor.components, components.count >= 3 else { return "XERROR" } let r = Float(components[0]) let g = Float(components[1]) let b = Float(components[2]) return String(format: "%02lX%02lX%02lX", lroundf(r * 255), lroundf(g * 255), lroundf(b * 255)) } /* // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // Get the new view controller using segue.destination. // Pass the selected object to the new view controller. } */ @IBAction func switchToggled(_ sender: Any) { print("editing ended, state: ", onSwitch.isOn) sendUpdate() } @IBAction func bChanged1(_ sender: Any) { print("editing ended, value: ", bSlider.value) sendUpdate() } @IBAction func bChanged2(_ sender: Any) { print("editing ended, value: ", bSlider.value) sendUpdate() } @IBAction func bChanged3(_ sender: Any) { if (self.continousReq) { sendUpdate() } } @IBAction func cC1(_ sender: Any) { sendUpdate() } @IBAction func cC2(_ sender: Any) { sendUpdate() } @IBAction func handleTapGesture(_ sender: UITapGestureRecognizer) { let point = sender.location(in: colorWheel) let colour = colorWheel.colorAtPoint(point: point) colourOutput.backgroundColor = colour self.pColour = u2h(colour: colour) } @IBAction func handleDragGesture(_ sender: UIPanGestureRecognizer) { let point = sender.location(in: colorWheel) let colour = colorWheel.colorAtPoint(point: point) colourOutput.backgroundColor = colour self.pColour = u2h(colour: colour) if (self.continousReq) { sendUpdate() } } @IBAction func cPreviewTap(_ sender: Any) { sendUpdate() } @IBAction func throttleToggled(_ sender: UISwitch) { self.continousReq = sender.isOn } } extension UIColor { convenience init(hexString: String, alpha: CGFloat = 1.0) { let hexString: String = hexString.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) let scanner = Scanner(string: hexString) var color: UInt64 = 0 scanner.scanHexInt64(&color) let mask = 0x000000FF let r = Int(color >> 16) & mask let g = Int(color >> 8) & mask let b = Int(color) & mask let red = CGFloat(r) / 255.0 let green = CGFloat(g) / 255.0 let blue = CGFloat(b) / 255.0 self.init(red:red, green:green, blue:blue, alpha:alpha) } }