Files
ShadowsocksX-NG-R/ShadowsocksX-NG/VersionChecker.swift
T
qinyuhang 6576ffd0cc Sync SSR-local
1. 更新 ss-locla
2. 现在开启软件自动检查更新了(bug UI会卡住一下,是异步的问题,待查)
3. 菜单添加检查更新按钮
2017-01-09 20:05:16 +08:00

96 lines
4.0 KiB
Swift

//
// VersionChecker.swift
// ShadowsocksX-NG
//
// Created by 秦宇航 on 2017/1/9.
// Copyright © 2017年 qinyuhang. All rights reserved.
//
import Foundation
let _VERSION_XML_URL = "https://raw.githubusercontent.com/shadowsocksr/ShadowsocksX-NG/develop/ShadowsocksX-NG/Info.plist"
let _VERSION_XML_LOCAL:String = Bundle.main.bundlePath + "/Contents/Info.plist"
class VersionChecker: NSObject {
var haveNewVersion: Bool = false
enum versionError: Error {
case CanNotGetOnlineData
}
func saveFile(fromURL: String, toPath: String, withName: String) -> Bool {
let manager = FileManager.default
let url = URL(string:fromURL)!
do {
let st = try String(contentsOf: url, encoding: String.Encoding.utf8)
print(st)
let data = st.data(using: String.Encoding.utf8)
manager.createFile( atPath: toPath + withName , contents: data, attributes: nil)
return true
} catch {
print(error)
return false
}
}
func checkNewVersion(showAlert: Bool) -> Bool {
func getOnlineData() throws -> NSDictionary{
guard NSDictionary(contentsOf: URL(string:_VERSION_XML_URL)!) != nil else {
throw versionError.CanNotGetOnlineData
}
return NSDictionary(contentsOf: URL(string:_VERSION_XML_URL)!)!
}
func showAlertView(Title: String, SubTitle: String, ConfirmBtn: String, CancelBtn: String) -> Int {
let alertView = NSAlert()
alertView.messageText = Title
alertView.informativeText = SubTitle
alertView.addButton(withTitle: ConfirmBtn)
if CancelBtn != "" {
alertView.addButton(withTitle: CancelBtn)
}
let action = alertView.runModal()
return action
}
var localData: NSDictionary = NSDictionary()
var onlineData: NSDictionary = NSDictionary()
localData = NSDictionary(contentsOfFile: _VERSION_XML_LOCAL)!
do{
try onlineData = getOnlineData()
}catch{
_ = showAlertView(Title: "网络错误", SubTitle: "由于网络错误无法检查更新", ConfirmBtn: "确认", CancelBtn: "")
return false
}
if (onlineData["CFBundleShortVersionString"] as! String == localData["CFBundleShortVersionString"] as! String && onlineData["CFBundleVersion"] as! String == localData["CFBundleVersion"] as! String){
if showAlert {
let currentVersionString:String = localData["CFBundleShortVersionString"] as! String
let currentBuildString:String = localData["CFBundleVersion"] as! String
_ = showAlertView(Title: "已是最新版本!", SubTitle: "当前版本 " + currentVersionString + " build " + currentBuildString, ConfirmBtn: "确认", CancelBtn: "")
}
return false
}
else{
haveNewVersion = true
// 弹窗提示有软件更新
let versionString:String = onlineData["CFBundleShortVersionString"] as! String
let buildString:String = onlineData["CFBundleVersion"] as! String
let currentVersionString:String = localData["CFBundleShortVersionString"] as! String
let currentBuildString:String = localData["CFBundleVersion"] as! String
let action = showAlertView(Title: "软件有更新!", SubTitle: "新版本为 " + versionString + " build " + buildString + "\n" + "当前版本 " + currentVersionString + " build " + currentBuildString, ConfirmBtn: "前往下载", CancelBtn: "取消")
switch action {
case 1000:
// go to download
NSWorkspace.shared().open(URL(string: "https://github.com/shadowsocksr/ShadowsocksX-NG/releases")!)
break
case 1001:
// cancel
break
default:
break
}
return true
}
}
}