feat: added public IP address to the network portal view (#1842)

This commit is contained in:
Serhiy Mytrovtsiy
2024-03-20 19:26:48 +01:00
parent 3250b9b6b2
commit 6482a43dea
3 changed files with 56 additions and 37 deletions

View File

@@ -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
}

View File

@@ -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"))"
}
}
})
}
}