FirmwareUpdateVC.swift 5.93 KB
//
//  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
//    }