2018-07-30 15:55:10 +08:00
|
|
|
//
|
|
|
|
// ApiRequest.swift
|
|
|
|
// ClashX
|
|
|
|
//
|
|
|
|
// Created by CYC on 2018/7/30.
|
|
|
|
// Copyright © 2018年 west2online. All rights reserved.
|
|
|
|
//
|
|
|
|
|
|
|
|
import Cocoa
|
|
|
|
import Alamofire
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ApiRequest{
|
2018-08-04 14:33:47 +08:00
|
|
|
static let shared = ApiRequest()
|
|
|
|
|
|
|
|
var trafficReq:DataRequest? = nil
|
|
|
|
|
2018-07-30 15:55:10 +08:00
|
|
|
static func requestConfig(completeHandler:@escaping ((ClashConfig)->())){
|
|
|
|
request(ConfigManager.apiUrl + "/configs", method: .get).responseData{
|
|
|
|
res in
|
|
|
|
guard let data = res.result.value else {return}
|
|
|
|
let config = ClashConfig.fromData(data)
|
|
|
|
completeHandler(config)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-08-04 14:33:47 +08:00
|
|
|
func requestTrafficInfo(callback:@escaping ((Int,Int)->()) ){
|
|
|
|
self.trafficReq?.cancel()
|
|
|
|
|
|
|
|
self.trafficReq =
|
|
|
|
request(ConfigManager.apiUrl + "/traffic").stream {(data) in
|
2018-07-30 15:55:10 +08:00
|
|
|
if let jsonData = try? JSONSerialization.jsonObject(with: data) as? [String:Int] {
|
|
|
|
callback(jsonData!["up"] ?? 0, jsonData!["down"] ?? 0)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static func requestConfigUpdate(callback:@escaping ((Bool)->())){
|
2018-08-04 14:09:54 +08:00
|
|
|
let success = updateAllConfig()
|
|
|
|
callback(success==0)
|
2018-07-30 15:55:10 +08:00
|
|
|
}
|
2018-08-04 16:30:10 +08:00
|
|
|
|
|
|
|
static func requestUpdateConfig(newConfig:ClashConfig?, callback:@escaping ((Bool)->())) {
|
|
|
|
guard (newConfig != nil) else {
|
|
|
|
callback(false)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
let encoder = JSONEncoder()
|
|
|
|
let jsonData = try! encoder.encode(newConfig)
|
|
|
|
|
|
|
|
let url = URL(string:ConfigManager.apiUrl + "/configs")!
|
|
|
|
var req = URLRequest(url: url)
|
|
|
|
req.httpMethod = HTTPMethod.put.rawValue
|
|
|
|
req.setValue("application/json; charset=UTF-8", forHTTPHeaderField: "Content-Type")
|
|
|
|
req.httpBody = jsonData
|
|
|
|
|
|
|
|
request(req).responseJSON { response in
|
|
|
|
switch response.result {
|
|
|
|
case .success(_):
|
|
|
|
callback(true)
|
|
|
|
case .failure(_):
|
|
|
|
callback(false)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2018-08-04 21:49:32 +08:00
|
|
|
|
|
|
|
static func requestProxyGroupList(completeHandler:@escaping (([String:[String:Any]])->())){
|
|
|
|
request(ConfigManager.apiUrl + "/proxies", method: .get).responseJSON{
|
|
|
|
res in
|
|
|
|
guard let data = res.result.value as? [String:[String:[String:Any]]] else {return}
|
|
|
|
completeHandler(data["proxies"]!)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static func updateProxyGroup(group:String,selectProxy:String,callback:@escaping ((Bool)->())) {
|
|
|
|
request(ConfigManager.apiUrl + "/proxies/\(group)", method: .put, parameters: ["name":selectProxy], encoding: JSONEncoding.default).responseJSON { (response) in
|
|
|
|
switch response.result {
|
|
|
|
case .success(_):
|
|
|
|
callback(true)
|
|
|
|
case .failure(_):
|
|
|
|
callback(false)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2018-07-30 15:55:10 +08:00
|
|
|
}
|