Feature: Add log level selection
This commit is contained in:
parent
894cb72e23
commit
dbf52fc7da
|
@ -29,6 +29,8 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
||||||
@IBOutlet weak var separatorLineTop: NSMenuItem!
|
@IBOutlet weak var separatorLineTop: NSMenuItem!
|
||||||
@IBOutlet weak var sepatatorLineEndProxySelect: NSMenuItem!
|
@IBOutlet weak var sepatatorLineEndProxySelect: NSMenuItem!
|
||||||
|
|
||||||
|
@IBOutlet weak var logLevelMenuItem: NSMenuItem!
|
||||||
|
|
||||||
var disposeBag = DisposeBag()
|
var disposeBag = DisposeBag()
|
||||||
let ssQueue = DispatchQueue(label: "com.w2fzu.ssqueue", attributes: .concurrent)
|
let ssQueue = DispatchQueue(label: "com.w2fzu.ssqueue", attributes: .concurrent)
|
||||||
var statusItemView:StatusItemView!
|
var statusItemView:StatusItemView!
|
||||||
|
@ -46,7 +48,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
||||||
self.syncConfig()
|
self.syncConfig()
|
||||||
}
|
}
|
||||||
setupData()
|
setupData()
|
||||||
|
updateLoggingLevel()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -102,6 +104,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
||||||
case .global:self.proxyModeGlobalMenuItem.state = .on
|
case .global:self.proxyModeGlobalMenuItem.state = .on
|
||||||
case .rule:self.proxyModeRuleMenuItem.state = .on
|
case .rule:self.proxyModeRuleMenuItem.state = .on
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
self.proxyModeMenuItem.title = "Proxy Mode (\(config!.mode.rawValue))"
|
self.proxyModeMenuItem.title = "Proxy Mode (\(config!.mode.rawValue))"
|
||||||
|
|
||||||
|
@ -181,6 +184,12 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func updateLoggingLevel() {
|
||||||
|
for item in self.logLevelMenuItem.submenu?.items ?? [] {
|
||||||
|
item.state = item.title.lowercased() == ConfigManager.selectLoggingApiLevel.rawValue ? .on : .off
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
func startProxy() {
|
func startProxy() {
|
||||||
ssQueue.async {
|
ssQueue.async {
|
||||||
|
@ -274,6 +283,13 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@IBAction func actionSetLogLevel(_ sender: NSMenuItem) {
|
||||||
|
let level = ClashLogLevel(rawValue: sender.title.lowercased()) ?? .unknow
|
||||||
|
ConfigManager.selectLoggingApiLevel = level
|
||||||
|
updateLoggingLevel()
|
||||||
|
resetStreamApi()
|
||||||
|
}
|
||||||
|
|
||||||
@IBAction func actionImportBunchJsonFile(_ sender: NSMenuItem) {
|
@IBAction func actionImportBunchJsonFile(_ sender: NSMenuItem) {
|
||||||
ConfigFileFactory.importConfigFile()
|
ConfigFileFactory.importConfigFile()
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
<customObject id="Voe-Tx-rLC" customClass="AppDelegate" customModule="ClashX" customModuleProvider="target">
|
<customObject id="Voe-Tx-rLC" customClass="AppDelegate" customModule="ClashX" customModuleProvider="target">
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="autoStartMenuItem" destination="B1J-XB-BiZ" id="xaS-h5-qd0"/>
|
<outlet property="autoStartMenuItem" destination="B1J-XB-BiZ" id="xaS-h5-qd0"/>
|
||||||
|
<outlet property="logLevelMenuItem" destination="3Da-fL-Mzr" id="ZCW-Il-fOZ"/>
|
||||||
<outlet property="proxyModeDirectMenuItem" destination="Np6-Pm-Lo3" id="DER-K7-DNW"/>
|
<outlet property="proxyModeDirectMenuItem" destination="Np6-Pm-Lo3" id="DER-K7-DNW"/>
|
||||||
<outlet property="proxyModeGlobalMenuItem" destination="yiM-U4-MNg" id="M7s-kl-aPh"/>
|
<outlet property="proxyModeGlobalMenuItem" destination="yiM-U4-MNg" id="M7s-kl-aPh"/>
|
||||||
<outlet property="proxyModeMenuItem" destination="jGT-1M-xJu" id="3Xj-xK-MJj"/>
|
<outlet property="proxyModeMenuItem" destination="jGT-1M-xJu" id="3Xj-xK-MJj"/>
|
||||||
|
@ -86,7 +87,7 @@
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
<menu key="submenu" title="Config" id="tck-zU-JKQ">
|
<menu key="submenu" title="Config" id="tck-zU-JKQ">
|
||||||
<items>
|
<items>
|
||||||
<menuItem title="Generate Config" id="a4G-S3-jxT">
|
<menuItem title="Generate Config" state="on" id="a4G-S3-jxT">
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
<menu key="submenu" title="Generate Config" id="IeJ-1Q-UaF">
|
<menu key="submenu" title="Generate Config" id="IeJ-1Q-UaF">
|
||||||
<items>
|
<items>
|
||||||
|
@ -123,15 +124,27 @@
|
||||||
<items>
|
<items>
|
||||||
<menuItem title="ERROR" id="0iu-lB-eZN">
|
<menuItem title="ERROR" id="0iu-lB-eZN">
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="actionSetLogLevel:" target="Voe-Tx-rLC" id="KEd-c4-cB8"/>
|
||||||
|
</connections>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
<menuItem title="WARNING" id="ko2-Ir-DxA">
|
<menuItem title="WARNING" id="ko2-Ir-DxA">
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="actionSetLogLevel:" target="Voe-Tx-rLC" id="V2s-Xc-8lq"/>
|
||||||
|
</connections>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
<menuItem title="INFO" id="d8V-h0-0zF">
|
<menuItem title="INFO" id="d8V-h0-0zF">
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="actionSetLogLevel:" target="Voe-Tx-rLC" id="jeM-b7-3h6"/>
|
||||||
|
</connections>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
<menuItem title="DEBUG" id="XIR-Go-fWA">
|
<menuItem title="DEBUG" id="XIR-Go-fWA">
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="actionSetLogLevel:" target="Voe-Tx-rLC" id="wcc-7Y-8Ke"/>
|
||||||
|
</connections>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
</items>
|
</items>
|
||||||
</menu>
|
</menu>
|
||||||
|
|
|
@ -36,7 +36,7 @@ class Logger {
|
||||||
}
|
}
|
||||||
|
|
||||||
static func log(msg:String ,level:ClashLogLevel = .unknow) {
|
static func log(msg:String ,level:ClashLogLevel = .unknow) {
|
||||||
shared.logToFile(msg: msg, level: level)
|
shared.logToFile(msg: "[\(level.rawValue)] \(msg)", level: level)
|
||||||
}
|
}
|
||||||
|
|
||||||
func logFilePath() -> String {
|
func logFilePath() -> String {
|
||||||
|
|
|
@ -73,7 +73,7 @@ class ApiRequest{
|
||||||
|
|
||||||
logReq =
|
logReq =
|
||||||
alamoFireManager
|
alamoFireManager
|
||||||
.request(ConfigManager.apiUrl + "/logs")
|
.request(ConfigManager.apiUrl + "/logs?Level=\(ConfigManager.selectLoggingApiLevel.rawValue)")
|
||||||
.stream {(data) in
|
.stream {(data) in
|
||||||
retry = 0
|
retry = 0
|
||||||
if let jsonData = try? JSONSerialization.jsonObject(with: data) as? [String:String] {
|
if let jsonData = try? JSONSerialization.jsonObject(with: data) as? [String:String] {
|
||||||
|
@ -111,7 +111,6 @@ class ApiRequest{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static func requestProxyGroupList(completeHandler:@escaping (([String:[String:Any]])->())){
|
static func requestProxyGroupList(completeHandler:@escaping (([String:[String:Any]])->())){
|
||||||
request(ConfigManager.apiUrl + "/proxies", method: .get).responseJSON{
|
request(ConfigManager.apiUrl + "/proxies", method: .get).responseJSON{
|
||||||
res in
|
res in
|
||||||
|
|
|
@ -71,6 +71,15 @@ class ConfigManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static var selectLoggingApiLevel:ClashLogLevel {
|
||||||
|
get{
|
||||||
|
return ClashLogLevel(rawValue: UserDefaults.standard.string(forKey: "selectLoggingApiLevel") ?? "") ?? .info
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
UserDefaults.standard.set(newValue.rawValue, forKey: "selectLoggingApiLevel")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func refreshApiPort(){
|
func refreshApiPort(){
|
||||||
if let ini =
|
if let ini =
|
||||||
parseConfig("\(NSHomeDirectory())/.config/clash/config.ini"),
|
parseConfig("\(NSHomeDirectory())/.config/clash/config.ini"),
|
||||||
|
|
Loading…
Reference in New Issue