feature: add heathcheck button
This commit is contained in:
parent
3ee2a7a694
commit
6e15e68921
2
.github/workflows/main.yml
vendored
2
.github/workflows/main.yml
vendored
@ -67,7 +67,7 @@ jobs:
|
||||
fastlane run notarize package:"./ClashX.dmg" bundle_id:"com.west2online.ClashX"
|
||||
|
||||
- name: upload to appcenter
|
||||
if: contains(github.event.head_commit.message, '[appcenter]')
|
||||
if: startsWith(github.ref, 'refs/tags/') || contains(github.event.head_commit.message, '[appcenter]')
|
||||
env:
|
||||
APPCENTER_DISTRIBUTE_UPLOAD_BUILD_ONLY: true
|
||||
APPCENTER_DISTRIBUTE_DESTINATIONS: Public
|
||||
|
@ -70,6 +70,7 @@
|
||||
F9A7C06C2306E874007163C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = F9A7C06B2306E874007163C7 /* main.m */; };
|
||||
F9E754D0239CC21F00CEE7CC /* WebPortalManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9E754CF239CC21F00CEE7CC /* WebPortalManager.swift */; };
|
||||
F9E754D2239CC28D00CEE7CC /* NSAlert+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9E754D1239CC28D00CEE7CC /* NSAlert+Extension.swift */; };
|
||||
F9E8F34623A12B89002DE5E8 /* String+Encode.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9E8F34523A12B89002DE5E8 /* String+Encode.swift */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
@ -187,6 +188,7 @@
|
||||
F9A7C06B2306E874007163C7 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
|
||||
F9E754CF239CC21F00CEE7CC /* WebPortalManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebPortalManager.swift; sourceTree = "<group>"; };
|
||||
F9E754D1239CC28D00CEE7CC /* NSAlert+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSAlert+Extension.swift"; sourceTree = "<group>"; };
|
||||
F9E8F34523A12B89002DE5E8 /* String+Encode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+Encode.swift"; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
@ -229,6 +231,7 @@
|
||||
F9203A25236342820020D57D /* AppDelegate+..swift */,
|
||||
F92D0B29236C759100575E15 /* NSTextField+Vibrancy.swift */,
|
||||
F9E754D1239CC28D00CEE7CC /* NSAlert+Extension.swift */,
|
||||
F9E8F34523A12B89002DE5E8 /* String+Encode.swift */,
|
||||
);
|
||||
path = Extensions;
|
||||
sourceTree = "<group>";
|
||||
@ -659,6 +662,7 @@
|
||||
499A485E22ED9B7C00F6C675 /* NSTableView+Reload.swift in Sources */,
|
||||
49862FA0218418C600A1D5EC /* ClashRule.swift in Sources */,
|
||||
49C9EF64223E78F5005D8B6A /* ClashProxy.swift in Sources */,
|
||||
F9E8F34623A12B89002DE5E8 /* String+Encode.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
15
ClashX/Extensions/String+Encode.swift
Normal file
15
ClashX/Extensions/String+Encode.swift
Normal file
@ -0,0 +1,15 @@
|
||||
//
|
||||
// String+Encode.swift
|
||||
// ClashX
|
||||
//
|
||||
// Created by yicheng on 2019/12/11.
|
||||
// Copyright © 2019 west2online. All rights reserved.
|
||||
//
|
||||
|
||||
import Cocoa
|
||||
|
||||
extension String {
|
||||
var encoded: String {
|
||||
return addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? ""
|
||||
}
|
||||
}
|
@ -198,9 +198,7 @@ class ApiRequest {
|
||||
}
|
||||
|
||||
static func getProxyDelay(proxyName: String, callback: @escaping ((Int) -> Void)) {
|
||||
let proxyNameEncoded = proxyName.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? ""
|
||||
|
||||
req("/proxies/\(proxyNameEncoded)/delay",
|
||||
req("/proxies/\(proxyName.encoded)/delay",
|
||||
method: .get,
|
||||
parameters: ["timeout": 5000, "url": "http://www.gstatic.com/generate_204"])
|
||||
.responseJSON { res in
|
||||
@ -221,6 +219,17 @@ class ApiRequest {
|
||||
completeHandler(rule.rules ?? [])
|
||||
}
|
||||
}
|
||||
|
||||
static func healthCheck(proxy: ClashProxyName) {
|
||||
Logger.log("HeathCheck for \(proxy) started")
|
||||
req("/providers/proxies/\(proxy.encoded)/healthcheck").response { res in
|
||||
if res.response?.statusCode == 204 {
|
||||
Logger.log("HeathCheck for \(proxy) finished")
|
||||
} else {
|
||||
Logger.log("HeathCheck for \(proxy) failed")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Connections
|
||||
|
@ -108,6 +108,7 @@ class MenuItemFactory {
|
||||
|
||||
submenu.addItem(proxyMenuItem)
|
||||
}
|
||||
addSpeedTestMenuItem(submenu, proxyGroup: proxyGroup)
|
||||
menu.submenu = submenu
|
||||
return menu
|
||||
}
|
||||
@ -117,7 +118,7 @@ class MenuItemFactory {
|
||||
menus.addItem(NSMenuItem.separator())
|
||||
let speedTestItem = ProxyGroupSpeedTestMenuItem(group: proxyGroup)
|
||||
speedTestItem.target = MenuItemFactory.self
|
||||
speedTestItem.action = #selector(empty)
|
||||
speedTestItem.action = #selector(actionSpeedTest)
|
||||
menus.addItem(speedTestItem)
|
||||
}
|
||||
|
||||
@ -145,7 +146,7 @@ class MenuItemFactory {
|
||||
proxyItem.target = MenuItemFactory.self
|
||||
submenu.addItem(proxyItem)
|
||||
}
|
||||
|
||||
addSpeedTestMenuItem(submenu, proxyGroup: proxyGroup)
|
||||
menu.submenu = submenu
|
||||
|
||||
return menu
|
||||
@ -196,5 +197,10 @@ extension MenuItemFactory {
|
||||
}
|
||||
}
|
||||
|
||||
@objc static func actionSpeedTest(sender: ProxyGroupSpeedTestMenuItem) {
|
||||
guard sender.testType == .reTest else { return }
|
||||
ApiRequest.healthCheck(proxy: sender.proxyGroup.name)
|
||||
}
|
||||
|
||||
@objc static func empty() {}
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ class AppVersionUtil: NSObject {
|
||||
static var currentBuild: String {
|
||||
return Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as? String ?? ""
|
||||
}
|
||||
|
||||
|
||||
static var isBeta: Bool {
|
||||
return Bundle.main.object(forInfoDictionaryKey: "BETA") as? Bool ?? false
|
||||
}
|
||||
|
@ -13,15 +13,15 @@ struct SavedProxyModel: Codable {
|
||||
let selected: ClashProxyName
|
||||
let config: String
|
||||
|
||||
var key:String {
|
||||
var key: String {
|
||||
return "\(group)_\(config)"
|
||||
}
|
||||
|
||||
static let key = "SavedProxyModels"
|
||||
|
||||
static func loadsFromUserDefault() -> [SavedProxyModel] {
|
||||
if let data = UserDefaults.standard.object(forKey: key) as? Data,
|
||||
let models = try? JSONDecoder().decode([SavedProxyModel].self, from: data) {
|
||||
|
||||
var set = Set<String>()
|
||||
return models.filter({ model in
|
||||
let pass = !set.contains(model.key)
|
||||
|
@ -10,8 +10,8 @@ import Carbon
|
||||
import Cocoa
|
||||
|
||||
class ProxyGroupSpeedTestMenuItem: NSMenuItem {
|
||||
var proxyGroup: ClashProxy
|
||||
var testType: TestType
|
||||
let proxyGroup: ClashProxy
|
||||
let testType: TestType
|
||||
|
||||
init(group: ClashProxy) {
|
||||
proxyGroup = group
|
||||
|
@ -1,7 +1,7 @@
|
||||
module github.com/yichengchen/clashX/ClashX
|
||||
|
||||
require (
|
||||
github.com/Dreamacro/clash v0.16.1-0.20191210092707-29cf3ca0efbe
|
||||
github.com/Dreamacro/clash v0.16.1-0.20191211093115-95e9ae2d8d4d
|
||||
github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2
|
||||
)
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
github.com/Dreamacro/clash v0.16.1-0.20191210092707-29cf3ca0efbe h1:3+YIAWHe7XAPqrm6DU7qq3lBhusukdX9PK4b/UXI48w=
|
||||
github.com/Dreamacro/clash v0.16.1-0.20191210092707-29cf3ca0efbe/go.mod h1:3AN6ikXSGG+ZHpQQMirTGu8t3tokzyLU/NUXb5QYZ9Q=
|
||||
github.com/Dreamacro/clash v0.16.1-0.20191211093115-95e9ae2d8d4d h1:xQbLXZZAJGaEJDRCiW9Aj7php6G6UXdfhUtGcbP7vw4=
|
||||
github.com/Dreamacro/clash v0.16.1-0.20191211093115-95e9ae2d8d4d/go.mod h1:3AN6ikXSGG+ZHpQQMirTGu8t3tokzyLU/NUXb5QYZ9Q=
|
||||
github.com/Dreamacro/go-shadowsocks2 v0.1.5 h1:BizWSjmwzAyQoslz6YhJYMiAGT99j9cnm9zlxVr+kyI=
|
||||
github.com/Dreamacro/go-shadowsocks2 v0.1.5/go.mod h1:LSXCjyHesPY3pLjhwff1mQX72ItcBT/N2xNC685cYeU=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
|
Loading…
Reference in New Issue
Block a user