mirror of
https://github.com/morgan9e/macos-stats
synced 2026-04-14 00:04:15 +09:00
feat: added public IP address to the network portal view (#1842)
This commit is contained in:
@@ -350,7 +350,7 @@ public func popupRow(_ view: NSView, n: CGFloat = 0, title: String, value: Strin
|
||||
return (labelView, valueView)
|
||||
}
|
||||
|
||||
public func portalRow(_ v: NSStackView, title: String) -> ValueField {
|
||||
public func portalRow(_ v: NSStackView, title: String, value: String = "") -> ValueField {
|
||||
let view: NSStackView = NSStackView()
|
||||
view.orientation = .horizontal
|
||||
view.distribution = .fillProportionally
|
||||
@@ -359,7 +359,7 @@ public func portalRow(_ v: NSStackView, title: String) -> ValueField {
|
||||
let labelView: LabelField = LabelField(title)
|
||||
labelView.font = NSFont.systemFont(ofSize: 11, weight: .regular)
|
||||
|
||||
let valueView: ValueField = ValueField()
|
||||
let valueView: ValueField = ValueField(value)
|
||||
valueView.font = NSFont.systemFont(ofSize: 12, weight: .regular)
|
||||
|
||||
view.addArrangedSubview(labelView)
|
||||
|
||||
@@ -73,7 +73,7 @@ internal class Popup: PopupWrapper {
|
||||
|
||||
private var downloadColorState: Color = .secondBlue
|
||||
private var downloadColor: NSColor {
|
||||
var value = NSColor.systemRed
|
||||
var value = NSColor.systemBlue
|
||||
if let color = self.downloadColorState.additional as? NSColor {
|
||||
value = color
|
||||
}
|
||||
@@ -81,7 +81,7 @@ internal class Popup: PopupWrapper {
|
||||
}
|
||||
private var uploadColorState: Color = .secondRed
|
||||
private var uploadColor: NSColor {
|
||||
var value = NSColor.systemBlue
|
||||
var value = NSColor.systemRed
|
||||
if let color = self.uploadColorState.additional as? NSColor {
|
||||
value = color
|
||||
}
|
||||
|
||||
@@ -12,18 +12,18 @@
|
||||
import Cocoa
|
||||
import Kit
|
||||
|
||||
public class Portal: NSStackView, Portal_p {
|
||||
public var name: String
|
||||
|
||||
public class Portal: PortalWrapper {
|
||||
private var chart: NetworkChartView? = nil
|
||||
|
||||
private var publicIPField: NSTextField? = nil
|
||||
|
||||
private var base: DataSizeBase {
|
||||
DataSizeBase(rawValue: Store.shared.string(key: "\(self.name)_base", defaultValue: "byte")) ?? .byte
|
||||
}
|
||||
|
||||
private var downloadColorState: Color = .secondBlue
|
||||
private var downloadColor: NSColor {
|
||||
var value = NSColor.systemRed
|
||||
var value = NSColor.systemBlue
|
||||
if let color = self.downloadColorState.additional as? NSColor {
|
||||
value = color
|
||||
}
|
||||
@@ -31,48 +31,54 @@ public class Portal: NSStackView, Portal_p {
|
||||
}
|
||||
private var uploadColorState: Color = .secondRed
|
||||
private var uploadColor: NSColor {
|
||||
var value = NSColor.systemBlue
|
||||
var value = NSColor.systemRed
|
||||
if let color = self.uploadColorState.additional as? NSColor {
|
||||
value = color
|
||||
}
|
||||
return value
|
||||
}
|
||||
|
||||
public init(_ module: ModuleType) {
|
||||
self.name = module.rawValue
|
||||
private var initialized: Bool = false
|
||||
|
||||
public override func load() {
|
||||
self.loadColors()
|
||||
|
||||
super.init(frame: NSRect.zero)
|
||||
|
||||
self.wantsLayer = true
|
||||
self.layer?.backgroundColor = NSColor.windowBackgroundColor.cgColor
|
||||
self.layer?.cornerRadius = 3
|
||||
|
||||
self.orientation = .vertical
|
||||
self.distribution = .fillEqually
|
||||
self.spacing = Constants.Popup.spacing*2
|
||||
self.edgeInsets = NSEdgeInsets(
|
||||
top: Constants.Popup.spacing*2,
|
||||
let view = NSStackView()
|
||||
view.orientation = .vertical
|
||||
view.distribution = .fillEqually
|
||||
view.spacing = Constants.Popup.spacing*2
|
||||
view.edgeInsets = NSEdgeInsets(
|
||||
top: 0,
|
||||
left: Constants.Popup.spacing*2,
|
||||
bottom: Constants.Popup.spacing*2,
|
||||
bottom: 0,
|
||||
right: Constants.Popup.spacing*2
|
||||
)
|
||||
self.addArrangedSubview(PortalHeader(name))
|
||||
|
||||
let chart = NetworkChartView(frame: NSRect.zero, num: 120, outColor: self.uploadColor, inColor: self.downloadColor)
|
||||
chart.base = self.base
|
||||
let chartView = self.chartView()
|
||||
view.addArrangedSubview(chartView)
|
||||
|
||||
self.publicIPField = portalRow(view, title: "\(localizedString("Public IP")):", value: localizedString("Unknown"))
|
||||
view.subviews.last?.heightAnchor.constraint(equalToConstant: 16).isActive = true
|
||||
|
||||
self.addArrangedSubview(view)
|
||||
}
|
||||
|
||||
public func loadColors() {
|
||||
self.downloadColorState = Color.fromString(Store.shared.string(key: "\(self.name)_downloadColor", defaultValue: self.downloadColorState.key))
|
||||
self.uploadColorState = Color.fromString(Store.shared.string(key: "\(self.name)_uploadColor", defaultValue: self.uploadColorState.key))
|
||||
}
|
||||
|
||||
private func chartView() -> NSView {
|
||||
let view = NSStackView()
|
||||
view.orientation = .vertical
|
||||
view.distribution = .fill
|
||||
view.spacing = Constants.Popup.spacing*2
|
||||
let chart = NetworkChartView(frame: NSRect.zero, num: 120, minMax: true, outColor: self.uploadColor, inColor: self.downloadColor)
|
||||
self.chart = chart
|
||||
self.chart!.toolTip = localizedString("Network activity")
|
||||
self.addArrangedSubview(self.chart!)
|
||||
|
||||
self.heightAnchor.constraint(equalToConstant: Constants.Popup.portalHeight).isActive = true
|
||||
}
|
||||
|
||||
required init?(coder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
public override func updateLayer() {
|
||||
self.layer?.backgroundColor = NSColor.windowBackgroundColor.cgColor
|
||||
view.addArrangedSubview(chart)
|
||||
|
||||
return view
|
||||
}
|
||||
|
||||
public func usageCallback(_ value: Network_Usage) {
|
||||
@@ -83,6 +89,19 @@ public class Portal: NSStackView, Portal_p {
|
||||
}
|
||||
chart.addValue(upload: Double(value.bandwidth.upload), download: Double(value.bandwidth.download))
|
||||
}
|
||||
|
||||
if let view = self.publicIPField, view.stringValue != value.raddr.v4 {
|
||||
if let addr = value.raddr.v4 {
|
||||
view.stringValue = (value.wifiDetails.countryCode != nil) ? "\(addr) (\(value.wifiDetails.countryCode!))" : addr
|
||||
} else {
|
||||
view.stringValue = localizedString("Unknown")
|
||||
}
|
||||
if let addr = value.raddr.v6 {
|
||||
view.toolTip = "\("\(localizedString("v6")):") \(addr)"
|
||||
} else {
|
||||
view.toolTip = "\("\(localizedString("v6")):") \(localizedString("Unknown"))"
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user