// // FirmwareUpdateVC.swift // Twear // // Created by yangbin on 2021/12/25. // import UIKit import Alamofire import HandyJSON class FirmwareUpdateVC: UIViewController, XMLParserDelegate { @IBOutlet weak var updateBtn: UIButton! @IBOutlet weak var updateImageView: UIImageView! @IBOutlet weak var deviceImageView: UIImageView! @IBOutlet weak var updateLabel: UILabel! @IBOutlet weak var progressLabel: UILabel! @IBOutlet weak var versionLabel: UILabel! var latestVersion: String = "" var downLoadUrlPath: String = "" var id: String = "" var device = CurDevice var downloadRequest: DownloadRequest? //下载请求对象 override func viewDidLoad() { super.viewDidLoad() title = LocString("固件升级") BluetoothManager.shared.getFirmwareVersion {[weak self] version, type, error in self?.device = CurDevice self?.queryLatestVersion() } } func queryLatestVersion() { Alamofire.request("http://hodafone.com.cn/qwear/update/\(device.type)/version.xml").responseData { responseData in if let data = responseData.data { self.parseXML(data) } } } private func checkUpdate() { if device.version.checkVersion(latestVersion) { updateBtn.isUserInteractionEnabled = true updateBtn.backgroundColor = UIColor.rgbColorFromHex(0x00993E) let string = NSMutableAttributedString(string: "\(LocString("发现新版本")):v \(latestVersion)") string.addAttributes([.foregroundColor: UIColor.rgbColorFromHex(0x00993E)], range: NSMakeRange(6, string.string.length-6)) versionLabel.attributedText = string } else { updateBtn.isUserInteractionEnabled = false updateBtn.backgroundColor = UIColor.rgbColorFromHex(0xCBCBCB) let str1 = LocString("当前已是最新版本") let string = NSMutableAttributedString(string: "\(str1)\nv \(device.version)") string.addAttributes([.foregroundColor: UIColor.rgbColorFromHex(0x00993E)], range: NSMakeRange(str1.count, string.string.count-str1.count)) versionLabel.attributedText = string } } @IBAction func update(_ sender: UIButton) { print("开始更新") updateBtn.isUserInteractionEnabled = false updateBtn.backgroundColor = UIColor.rgbColorFromHex(0xCBCBCB) deviceImageView.isHidden = true updateLabel.isHidden = false progressLabel.isHidden = false downloadUpdateFile() } func downloadUpdateFile() { // let url = URL(string: "http://hodafone.com.cn/qwear/update/\(id)/\(downLoadUrlPath)") let version = latestVersion var filePath = "" let dest: DownloadRequest.DownloadFileDestination = { _, _ in let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] let fileURL = documentsURL.appendingPathComponent("update/firmware.zip") return (fileURL, [.removePreviousFile, .createIntermediateDirectories]) } Alamofire.download("http://hodafone.com.cn/qwear/update/\(id)/\(downLoadUrlPath)", to: dest).downloadProgress { progress in }.responseData { response in if let data = response.value { print("下载成功") // self.syncFile(response.destinationURL!.path) // response.destinationURL } else { self.showAlert(title: "", message: "升级失败,请重试") } } //开始下载 // AF.download(url, interceptor: nil, to: dest).downloadProgress(closure: { (progress) in // // debugPrint("-------下载进度: \(progress.fractionCompleted)") // }).responseData { (res) in // if let data = res.value { // //显示图片 // let image = UIImage(data: data) // self.imgGif.image = image // } // } } func syncFile(_ path: String) { BluetoothManager.shared.syncFileWith(path: path, isFirmware: true) {[weak self] progress in let n = progress/2 * 2 self?.updateImageView.image = UIImage(named: "update_\(n)") self?.progressLabel.text = "\(progress)%" } completion: {[weak self] error in if error == nil { self?.updateLabel.text = "升级完成" self?.updateImageView.image = UIImage(named: "update_100") } } } func parseXML(_ data: Data) { let parser = XMLParser(data: data) parser.delegate = self parser.parse() } func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) { if elementName == "product"{ print(attributeDict) if let least = attributeDict["least"] { latestVersion = least checkUpdate() } if let file = attributeDict["file"] { downLoadUrlPath = file } if let id = attributeDict["id"] { self.id = id } } } deinit { print("deinit\(NSStringFromClass(type(of: self)))!!!!!!!") } } // func compareVersion(nowVersion:String,newVersion:String) -> Bool { // // let nowArray = nowVersion.split(separator: ".") // // let newArray = newVersion.split(separator: ".") // // let big = nowArray.count > newArray.count ? newArray.count : nowArray.count // // for index in 0...big - 1 { // // let first = nowArray[index] // let second = newArray[index] // if Int(first)! < Int(second)! { // return true // } // } // return false // }