175 lines
5.8 KiB
Swift
175 lines
5.8 KiB
Swift
//
|
|
// 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)
|
|
}
|
|
}
|